一暴区、pytest 中內(nèi)置的標記
pytest 標記使用需要通過 pytest.mark.標記 來使用仙粱,pytest 中為應對各種測試場景也內(nèi)置了很多的標記伐割。
1.1隔心、pytest.mark.parametrize:用例參數(shù)化的標記
通過 parametrize 可以將用例數(shù)據(jù)和用例執(zhí)行的邏輯代碼分離,并實現(xiàn)根據(jù)用例硬霍,自動生成測試用例唯卖。
Demo:
@pytest.mark.parametrize('item',[11,22,33,44,55,66])deftest_demo(item)assert item >50
1.2拜轨、pytest.mark.skip:跳過用例執(zhí)行
通過 skip 裝飾的用例允青,在執(zhí)行的時候會無條件跳過颠锉,
參數(shù) reason:跳過測試函數(shù)的原因。
Demo
# 不寫跳過原因@pytest.mark.skipdeftest_demo()assert item >50# 寫跳過原因@pytest.mark.skip(reason='不需要執(zhí)行')deftest_demo()assert item >50
1.3皆串、pytest.mark.skipif:根據(jù)條件跳過用例
skipif 可以根據(jù)條件來決定是否跳過用例的執(zhí)行, 如果條件為 True 則跳過測試函數(shù)執(zhí)行。
參數(shù) :condition —跳過的條件
參數(shù) :reason —跳過的原因
Demo
a =10@pytest.mark.skipif(a >20,reason='條件不成立谤牡,不執(zhí)行')deftest_demo()assert item >50
1.4翅萤、pytest.mark.xfail:標記預期失敗的用例
xfail 可以將測試函數(shù)標記為預期執(zhí)行失敗的用例腊满。
參數(shù) :condition — 將測試函數(shù)標記為 xfail 的條件(True/False )
參數(shù) :reason — 測試函數(shù)被標記為 xfail 的原因
參數(shù) :raises — 預期失敗的異常類型
參數(shù) :run — 是否應該實際執(zhí)行測試函數(shù)碳蛋。如果 False,該函數(shù)將始終 xfail 并且不會被執(zhí)行 肃弟。
參數(shù) :strict — 嚴格模式(True/False )
Demo
a =10@pytest.mark.xfail(a >20,reason='條件不成立笤受,不執(zhí)行'raises=AssertionError )deftest_demo()assert item >50
1.5箩兽、pytest.mark.usefixtures:給測試類或模塊設置測試夾具
usefixtures 標記一般用于給測試類下面的測試方法統(tǒng)一設置測試夾具汗贫。
Demo
# TestDome這個測試類的所有測試用例均執(zhí)行my_fixture這個夾具@pytest.mark.usefixtures('my_fixture這個夾具')classTestDome:# 函數(shù)用例 指定測試夾具deftest_02(self):? ? ? ? print('----測試用例:test_01------')# 函數(shù)用例 指定測試夾具deftest_03(self):? ? ? ? print('----測試用例:test_02------')
二芳绩、自定義標記
pytest 支持通過 pytest.ini 文件注冊自定義的標記。以滿足執(zhí)行用例時搪花,通過標記對用例進行篩選撮竿。幢踏,
2.1许师、注冊標記
pytest.ini 文件注冊標記的語法如下:
[pytest]markers =? ? 標記1標記2
2.2、標記函數(shù)
Demo:
# 用例前面加載標簽:@pytest.mark.標簽名? @pytest.mark.maindeftest_demo():pass
2.3搭幻、標記類
Demo:
# 方式一:直接類上面打標記@pytest.mark.mainclassTestClass(object):deftest_demo1(self):assert10>20# 方式二:通過類屬性pytestmark,可以同時添加多個標記classTestClass(object):pytestmark = [pytest.mark.main, pytest.mark.main]deftest_demo1(self):assert10>20
三檀蹋、通過標記篩選用例執(zhí)行
Demo:現(xiàn)有用例如下:
importpytest@pytest.mark.yuze@pytest.mark.musendeftest_01():print("用例一")deftest_02():print("用例二")@pytest.mark.musendeftest_03():print("用例三")@pytest.mark.musendeftest_04():print("用例四")@pytest.mark.yuzedeftest_05():print("用例五")@pytest.mark.yuzedeftest_06():print("用例六")
上面 Demo 中有 6 條測試用例俯逾,分別通過 pytest.mark.yuze 和 pytest.mark.musen 進行標記了贸桶,接下來我們一起來看看如何通過標記選擇用例執(zhí)行。
3.1桌肴、通過單個標記篩選
語法:pytest -m '標簽名'
Demo: pytest -m musen
執(zhí)行結果如下:
==========================testsessionstarts==========================platformwin32--Python3.7.3,pytest-5.4.2,py-1.8.0,pluggy-0.13.0rootdir:C:\project\,inifile:pytest.iniplugins:allure-pytest-2.8.15,Faker-8.11.0,metadata-1.9.0,parallel-0.0.8,repeat-0.8.0,rerunfailures-9.0,testreport-1.1.2collected6items/3deselected/3selectedtest_mode.py...[100%]==========================3passed,3deselectedin0.29s==========================
可以看到執(zhí)行結果執(zhí)行了 3 條用例皇筛,3 條未選中。
3.2识脆、同時選中多個標記
語法:pytest -m "標記 1 or 標記 2"
命令:pytest -m "musen ro yuze"
執(zhí)行通過 musen 或者 yuze 標記的的用例设联。執(zhí)行結果如下:
==========================testsessionstarts==========================platformwin32--Python3.7.3,pytest-5.4.2,py-1.8.0,pluggy-0.13.0rootdir:C:\project\,inifile:pytest.iniplugins:allure-pytest-2.8.15,Faker-8.11.0,metadata-1.9.0,parallel-0.0.8,repeat-0.8.0,rerunfailures-9.0,testreport-1.1.2collected6items/1deselected/5selectedtest_mode.py.....[100%]==========================5passed,1deselectedin0.29s==========================
從上述結果可以看到,只要加了 musen 或 yuze 這兩個標記中的任意一個
語法:pytest -m "標記 1 and 標記 2"
命令:pytest -m "musen and yuze"
執(zhí)行通過 musen 和 yuze 這兩個標記同時標記的用例灼捂。執(zhí)行結果如下
==========================testsessionstarts==========================platformwin32--Python3.7.3,pytest-5.4.2,py-1.8.0,pluggy-0.13.0rootdir:C:\project\,inifile:pytest.iniplugins:allure-pytest-2.8.15,Faker-8.11.0,metadata-1.9.0,parallel-0.0.8,repeat-0.8.0,rerunfailures-9.0,testreport-1.1.2collected6items/5deselected/1selectedtest_mode.py.[100%]==========================1passed,5deselectedin0.29s===================