pytest介紹
pytest是一個(gè)非常成熟的全功能的Python測試框架,主要有以下幾個(gè)特點(diǎn):
1.簡單靈活蒜危,容易上手
2.支持參數(shù)化
3.能夠支持簡單的單元測試和復(fù)雜的功能測試,還可以用來做selenium/appnium等自動(dòng)化測試睹耐、接口自動(dòng)化測試(pytest+requests)
4.pytest具有很多第三方插件辐赞,并且可以自定義擴(kuò)展,比較好用的如pytest-selenium(集成selenium)疏橄、pytest-html(完美html測試報(bào)告生成)占拍、pytest-rerunfailures(失敗case重復(fù)執(zhí)行)、pytest-xdist(多CPU分發(fā))等
5.測試用例的skip和xfail處理
6.可以很好的和jenkins集成
7.report框架----allure 也支持了pytest
Pytest命名規(guī)范:
1捎迫、測試用例文件命名應(yīng)該以 test_開頭或者以_test結(jié)尾晃酒。
2、測試函數(shù)命名窄绒,測試類的方法命名應(yīng)該以test_開頭贝次。
3、測試類命名應(yīng)當(dāng)以Test開頭彰导。
? ? ?測試類的不應(yīng)該有構(gòu)造函數(shù)
pytest用例的運(yùn)行方式
1蛔翅、主函數(shù)模式
(1)運(yùn)行所有:pytest.main()
(2指定模塊:pytest.main(['-vs','test_login.py])
(3 指定目錄:pytes.main(['-vs','./interface_testcase'])
(4 通過nodeid指定用例運(yùn)行:nodeid由模塊名,分割符位谋,類名山析,方法名,函數(shù)名組成
? ? pytest.main(['-vs','./interface_testcase/test_interface.py::test_04_func'])
? ? pytest.main(['-vs','./interface_testcase/test_interface.py::Testinterface::test_04_func'])
2掏父、命令行模式
(1)運(yùn)行所有:pytest
(2)指定模塊:pytest -vs test_login.py
(3)指定目錄:pytes -vs ./interface_testcase
(4)通過nodeid指定用例運(yùn)行:nodeid由模塊名笋轨,分割符,類名傻工,方法名洞坑,函數(shù)名組成
? ? pytest -vs ./interface_testcase/test_interface.py::test_04_func
? ? pytest -vs ./interface_testcase/test_interface.py::Testinterface::test_04_func
參數(shù)詳解:
-s: 表示輸出調(diào)試信息前计,包括print打印的信息
-v:?顯示更詳細(xì)的信息
-vs:兩個(gè)參數(shù)一起用
-n:支持多線程或分布式運(yùn)行用例
? ? ? ?如:pytest -vs ./testcase/test_login.py -n 2
-return NUM:失敗用例重跑荒叼,num失敗后重跑的次數(shù)
-x:表示只要有一個(gè)用例報(bào)錯(cuò),那么測試停止
--maxfall=2 :出現(xiàn)兩個(gè)用例失敗就停止
-k:根據(jù)測試用例的步伐字符串指定測試用例
? ? ?如:pytest -vs ./testcase -k "ao"
--html ./report/report.html :會(huì)在之指定路徑下生成html的報(bào)告
3履羞、通過讀取pytest.ini配置文件運(yùn)行
pytest.ini這個(gè)文件它是pytest單元測試框架的核心配置文件
1房铭、位置:一般放在項(xiàng)目的跟目錄下
2还棱、編碼:必須是ANSI掺出,可以使用notpad++修改編碼格式
3徽千、作用:改變pytest默認(rèn)的行為
4、運(yùn)行規(guī)則:不管是主函數(shù)的模式運(yùn)行汤锨,命令模式運(yùn)行罐栈,都會(huì)去讀取這個(gè)配置文件
pytest執(zhí)行用例的順序:
unittes :ASCII的大小來決定執(zhí)行的順序
pytest:默認(rèn)從上到下
改變默認(rèn)的執(zhí)行順序,使用mark標(biāo)記
@pytest.mark.run(order=2)