pytest框架的特點(diǎn)
1、比unittest 更靈活,容易上手
2、可與selenium、request、appium結(jié)合
3、可實(shí)現(xiàn)用例跳過,或失敗用例重試
4、可與allure生成美觀的測(cè)試報(bào)告
5、可與jenkins結(jié)合持續(xù)集成
6、有非常強(qiáng)大的插件,并運(yùn)用插件實(shí)現(xiàn)很多的實(shí)用操作
一、pytest常用插件:
pytest -html? ? ? ? ? ? ? ? ? ? ?生成html格式的自動(dòng)化測(cè)試報(bào)告
pytest -xdist? ? ? ? ? ? ? ? ? ? ?測(cè)試用例分布式執(zhí)行,多cpu分發(fā)
pytest -ordering? ? ? ? ? ? ? ?用于改變測(cè)試用例的執(zhí)行順序
pytest -rerunfailures? ? ? ? 用例失敗重跑
allure -pytest? ? ? ? ? ? ? ? ? ? 用于生成美觀的測(cè)試報(bào)告
1)安裝:pip install pytest-html,生成測(cè)試報(bào)告(--html=report.html)
2)使用的插件放在requirements.txt 中,通過 pip install -r?requirements.txt
二、命令行模式
運(yùn)行所有:? ? pytest?
指定模塊:? ? pytest -vs test_login.py
指定目錄:? ? pytest -vs ./interface_testcase
指定文件:? ??pytest -vs ./interface_testcase/test_interface.py::test_04_func
指定用例關(guān)鍵詞:? ? pytest test_cal.py -vs -k 'div'? or 'add'? ? # 指定用例test_div,test_add
核心參數(shù):
1) -s: 顯示程序中的print/logging輸出
2) -v: 豐富信息模式, 輸出更詳細(xì)的用例執(zhí)行信息
3)-reruns=xxx,失敗重新運(yùn)行
4)--pytest -x? ? ? ? ? ?表示只要有一個(gè)用例錯(cuò)誤,那么測(cè)試停止
5)--pytest -vx? ./testcase -k "ao"? ? ?選擇部分執(zhí)行
6)--pytest --maxfail=3? 用例運(yùn)行時(shí) 允許的最大失敗次數(shù),超過則立即停止
7)--pytest? ?-m? ?標(biāo)記(marker)用于標(biāo)記測(cè)試并分組 :pytest -vv -m smoke
8)--lf / --last-failed? ?只執(zhí)行上次執(zhí)行失敗的測(cè)試
9) --pytest collect-only? ?只收集用例,不執(zhí)行
10) --pytest junitxml=path? 生成執(zhí)行結(jié)果xml文件
11) --pytest setup-show? ?回溯fixture的執(zhí)行過程
三、主函數(shù)
(1)運(yùn)行所有:pytest.main()
(2)?指定目錄:pytest.main(['-vs','./interface_testcase'])
(3)指定模塊:pytest.main(['-vs','test_login.py'])
(4)指定文件:通過nodeid指定用例運(yùn)行,nodeid由模塊名,分隔符,類名,方法名,函數(shù)名組成
pytest.main(['-s','./pytest-demo.py','-m','smoke'])
pytest.main(['-vs','./interface_testcase/test_interface.py::test_04_func'])
四、通過讀取pytest.ini配置文件運(yùn)行
pytest.ini? ?這個(gè)文件是pytest單元測(cè)試框架的核心配置文件
pytest.ini文件是pytest的主配置文件,可以改變pytest的運(yùn)行方式,它是一個(gè)固定的文件pytest.ini文件,讀取配置信息,按指定的方式去運(yùn)行。
pytest.ini的位置:一般放在項(xiàng)目工程的根目錄(即當(dāng)前項(xiàng)目的頂級(jí)文件夾下)
編碼格式:ASNI
作用:改變pytest默認(rèn)的行為
運(yùn)行的規(guī)則:不管是主函數(shù)的模式運(yùn)行,命令行運(yùn)行,都會(huì)去讀取這個(gè)
五、pytest 用例標(biāo)記mark
1)默認(rèn)是從上到下,改變默認(rèn)執(zhí)行順序,使用mark標(biāo)記
@pytest.mark.run(order=1)
2)mark實(shí)現(xiàn)參數(shù)化
@pytest.mark.parametrize("test_info", data)??
3)實(shí)現(xiàn)分組執(zhí)行
pytest.ini配置文件中增加分組參數(shù)markers來實(shí)現(xiàn)用例分組,如:
markers =
????g1:組一
????smoke:冒煙測(cè)試
函數(shù)中標(biāo)記 @pytest.mark.g1 、@pytest.mark.smoke
執(zhí)行時(shí)可按標(biāo)記單獨(dú)執(zhí)行
Skip使用場(chǎng)景和Xfail使用場(chǎng)景
@pytest.mark.skip 、 @pytest.mark.skipif? ??
不想運(yùn)行這個(gè)用例、標(biāo)記無法在某些平臺(tái)運(yùn)行的測(cè)試用例、某些版本執(zhí)行,其他版本跳過、當(dāng)前外部資源不可用時(shí)跳過
@pytest.mark.xfail
功能尚未實(shí)施或未修復(fù)的錯(cuò)誤,預(yù)計(jì)會(huì)失敗仍xpass,報(bào)告中體現(xiàn);測(cè)試某種情況就應(yīng)該失敗
六、pytest斷言
常用斷言:
assert xx 判斷 xx 為真
assert not xx 判斷 xx 不為真
assert a in b 判斷 b 包含?
aassert a==b 判斷 a 等于 b
assert a!=b 判斷 a 不等于 b
七、pytest跳過測(cè)試用例
(1)有條件跳過
@pytest.mark.skipif(age>=18,"已成年")? ?#skipif 有條件跳過
(2)無條件跳過
@pytest.mark.skip(reason="失敗")? ? ?#skip 無條件跳過