介紹前,思考以下問題
- 測試數據如何自動化清除(運行前和運行后)
- 多個測試用例,如何組織在一起執行
- 多個測試用例的結果,如何展示在一份報告上
01:什么是Unittest
是python自帶的單元測試框架(不需要安裝),主要適用於單元測試,可以對多個測試用例進行管理和封裝
Unittest也叫pyunit,它提供了很多類和方法來處理各種測試工作
單元測試-用一部分代碼測試另一部分代碼
02:四大功能組成
(一)測試用例----testcase
- 測試用例必須在類中
- 測試用例所在的類,必須繼承Unittest.TestCase
- 測試用例的方法名稱必須以test開頭
- 測試用例的執行順序,按照Ascill碼順序(0~9,A~Z,a~z)
- 利用父類TestCase的assertXXXX方法來斷言
- 用@unittest.skip(reason)裝飾來跳過測試用例
(二)測試固件----testfixture
- 也叫測試夾件,主要工作是【初始化和善后】
- 測試固件分為兩種,一種是類級別的,一種是方法級別的
- 類級別的測試固件,所有測試用例執行之前與之后運行一次
- 方法級別的測試固件,每個測試用例執行之前與之后都運行一次
1.示例一代碼(方法級別):
運行結果(鼠標頂格運行 ):
2.示例二代碼(類級別):
運行結果:
3.斷言assert
斷言失敗的話,用例2之后的測試用例不執行
由此得出Unittest缺點--不能批量執行測試用例
改造Unittest自己的assert:self.assertEqual
報錯后可繼續執行下面的用例,且打印到測試報告中
4.跳過某個測試用例
使用@unittest.skip(reason)裝飾
(三)測試套件----testsuite
- 是用來組織測試用例的
- 如:
方法一:用例逐個添加到suite
import unittest # 1構建測試套件test_suite # 1-1 方法一:逐個添加到suite suit = unittest.TestSuite() suit.addTest(UnittestDemo('test_001')) suit.addTest(UnittestDemo('test_002'))
方法二:用例放入列表中,再添加到suite
suite = unittest.TestSuite() list=[類名1("方法名1"),類名2("方法名2")] suite.addTests(list) 例: list=[UnittestDemo('test_001'),UnittestDemo('test_002')] suite.addTests(list)
方法三:通過TestLoader類的discover 方法來
suite = unittest.defaultTestLoader.discover('用例所在的模塊', pattern="*通配*.py")
discover(start_dir,pattern='test*.py',top_level_dir=None)
-case_dir:這個是待執行用例的目錄。
-pattern:這個是匹配腳本名稱的規則,test*.py 意思是匹配 test 開頭的所有腳本。
-top_level_dir:這個是頂層目錄的名稱,一般默認等於 None 就行了。
(四)測試運行器----testrunner
- 是用來執行測試用例的
- 第一種輸出方法
runner=unittest.TextTestRunner() #實例化TestRunner類 runner.run(suite)#執行用例
03: HTMLTestRunner--輸出報告
ClassicHTMLTestRunner下載解壓
放在此下目錄,整個項目可通用
導入:
from ClassicHTML.TestRuner import HTML.TestRunner
- 第二種輸出方法,使用HTMLTestRunner
runner = HTML.TestRunner(tester = '測試報告人','title'='測試報告', description='接口測試報告'.stream = '文件路徑',verbosity=2#詳細描述) runner.run(suite)
04:DDT數據驅動
解決問題:如何解決批量運行問題
ddt官方文檔地址:https://pypi.org/project/ddt/
安裝:
pip install ddt
導入:
from ddt import ddt,data,unpack
- ddt.ddt:裝飾類,也就是繼承TestCase的類。
- ddt.data:裝飾測試方法,參數是一系列的值。
- ddt.unpack:傳遞的是復雜的數據結構時使用,比如使用列表或者元組,添加unpack后,ddt會自動把元組或者列表對應到多個參數上
代碼中加入:
@ddt #類上面加上ddt class UnittestDemo(unittest.TestCase): #測試用例 @data(放參數) def test_005(self,data):