前言
用例執(zhí)行狀態(tài)
用例執(zhí)行完成后,每條用例都有自己的狀態(tài),常見(jiàn)的狀態(tài)有
passed:測(cè)試通過(guò)
failed:斷言失敗
error:用例本身寫(xiě)的質(zhì)量不行,本身代碼報(bào)錯(cuò)(譬如:fixture不存在,fixture里面有報(bào)錯(cuò))
xfail:預(yù)期失敗,加了 @pytest.mark.xfail()
error例子1:參數(shù)不存在
def pwd():
print("獲取用戶(hù)名")
a = "yygirl"
assert a == "yygirl123"
def test_1(pwd):
assert user == "yygirl"
為啥是error
pwd參數(shù)并不存在,所以用例執(zhí)行error
error例子2:fixture有錯(cuò)
@pytest.fixture()
def user():
print("獲取用戶(hù)名")
a = "yygirl"
assert a == "yygirl123"
return a
def test_1(user):
assert user == "yygirl"
為啥是error?
fixture里面斷言失敗,所以fixture會(huì)報(bào)錯(cuò);
因?yàn)閠est_1調(diào)用了錯(cuò)誤的fixture,所以error表示用例有問(wèn)題
failed例子1
@pytest.fixture()
def pwd():
print("獲取密碼")
a = "yygirl"
return a
def test_2(pwd):
assert pwd == "yygirl123"
為啥是failed
因?yàn)閒ixture返回的變量斷言失敗
failed例子2
@pytest.fixture()
def pwd():
print("獲取密碼")
a = "polo"
return a
def test_2(pwd):
raise NameError
assert pwd == "polo"
為啥是failed?
因?yàn)橛美龍?zhí)行期間拋出了異常。
測(cè)試用例的代碼有異常,包括主動(dòng)拋出異?;虼a有異常,都算failed;
當(dāng)測(cè)試用例調(diào)用的fixture有異常,或傳入的參數(shù)有異常的時(shí)候,都算error;
如果一份測(cè)試報(bào)告中,error的測(cè)試用例數(shù)量越多,說(shuō)明測(cè)試用例質(zhì)量越差;
xfail的例子
斷言裝飾器
@pytest.mark.xfail(raises=ZeroDivisionError)
def test_f():
1 / 0
為啥是xfail?
代碼有異常,且和raised的異常類(lèi)匹配,所以是xfail(算測(cè)試通過(guò)的一種,表示符合期望捕捉到的異常),并不算failed
如果和raised的異常類(lèi)不匹配,則是failed
失敗重跑插件pytest-rerunfailures
環(huán)境前提
以下先決條件才能使用pytest-rerunfailures
Python 3.5, 最高 3.8, or PyPy3
pytest 5.0或更高版本
安裝插件
pip3 install pytest-rerunfailures -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
插件重點(diǎn):
命令行參數(shù):–reruns n(重新運(yùn)行次數(shù)),–reruns-delay m(等待運(yùn)行秒數(shù))
裝飾器參數(shù):reruns=n(重新運(yùn)行次數(shù)),reruns_delay=m(等待運(yùn)行秒數(shù))
重新運(yùn)行所有失敗的用例
要重新運(yùn)行所有測(cè)試失敗的用例,使用 --reruns 命令行選項(xiàng),并指定要運(yùn)行測(cè)試的最大次數(shù):
pytest --reruns 5 -s
運(yùn)行失敗的 fixture 或 setup_class 也將重新執(zhí)行
添加重新運(yùn)行的延時(shí)
要在兩次重試之間增加延遲時(shí)間,使用 --reruns-delay 命令行選項(xiàng),指定下次測(cè)試重新開(kāi)始之前等待的秒數(shù)
pytest --reruns 5 --reruns-delay 10 -s
重新運(yùn)行指定的測(cè)試用例
要將單個(gè)測(cè)試用例添加flaky裝飾器 @pytest.mark.flaky(reruns=5) ,并在測(cè)試失敗時(shí)自動(dòng)重新運(yùn)行,需要指定最大重新運(yùn)行的次數(shù)
例子:
import pytest
@pytest.mark.flaky(reruns=5)
def test_example():
import random
assert random.choice([True, False, False])
執(zhí)行結(jié)果
collecting ... collected 1 item
11_reruns.py::test_example RERUN [100%]
11_reruns.py::test_example PASSED [100%]
========================= 1 passed, 1 rerun in 0.05s ==========================
同樣的,這個(gè)也可以指定重新運(yùn)行的等待時(shí)間
@pytest.mark.flaky(reruns=5, reruns_delay=2)
def test_example():
import random
assert random.choice([True, False, False])
注意:
如果指定了用例的重新運(yùn)行次數(shù),則在命令行添加 --reruns 對(duì)這些用例是不會(huì)生效的
兼容性問(wèn)題
不可以和fixture裝飾器一起使用: @pytest.fixture()
該插件與pytest-xdist的 --looponfail 標(biāo)志不兼容
該插件與核心–pdb標(biāo)志不兼容
下面是我整理的2023年最全的軟件測(cè)試工程師學(xué)習(xí)知識(shí)架構(gòu)體系圖 |
一、Python編程入門(mén)到精通
二、接口自動(dòng)化項(xiàng)目實(shí)戰(zhàn)
三、Web自動(dòng)化項(xiàng)目實(shí)戰(zhàn)
四、App自動(dòng)化項(xiàng)目實(shí)戰(zhàn)
五、一線(xiàn)大廠簡(jiǎn)歷
六、測(cè)試開(kāi)發(fā)DevOps體系
七、常用自動(dòng)化測(cè)試工具
八、JMeter性能測(cè)試
九、總結(jié)(尾部小驚喜)
只有不斷超越自己的勇氣,才能讓夢(mèng)想破繭而出,綻放最美的花朵。無(wú)論前方多么艱辛,堅(jiān)持奮斗,擁抱努力的人生,成功的光芒將永遠(yuǎn)照耀你的未來(lái)。
只有拼盡全力,才能超越自己;只有奮斗不息,才能創(chuàng)造奇跡;只有堅(jiān)持不懈,才能迎接輝煌。相信自己,努力奮斗,未來(lái)將是屬于你的壯麗篇章!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-516072.html
只有堅(jiān)持不懈的努力,才能追尋到遙不可及的成功;每一次挫折都是磨礪的契機(jī),只要你不放棄,勝利就在前方等候。相信自己,勇敢前行,你將創(chuàng)造屬于自己的輝煌。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-516072.html
到了這里,關(guān)于火爆全網(wǎng),Pytest自動(dòng)化測(cè)試框架-測(cè)試用例執(zhí)行與失敗重跑(實(shí)戰(zhàn)詳細(xì))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!