mark標(biāo)記
在實際工作中,我們要寫的自動化用例會比較多,也不會都放在一個py文件中,如果有幾十個py文件,上百個方法,而我們只想運行當(dāng)中部分的用例時怎么辦?
pytest提供了一個非常好用的mark功能,可以給測試用例打上各種各樣的標(biāo)簽,運行用例時可以指定運行某個標(biāo)簽。mark功能作用就是靈活的管理和運行測試用例。
標(biāo)簽既可以打到方法上,也可以打到類上,標(biāo)記的兩種方式:
- 直接標(biāo)記類或方法或函數(shù):
@pytest.mark.標(biāo)簽名
- 類屬性:
pytestmark = [pytest.mark.標(biāo)簽名, pytest.mark.標(biāo)簽名]
,需要注意的是屬性名稱是固定的
import pytest
@pytest.mark.beta # 可以給類打標(biāo)簽
class TestLogin: # 標(biāo)記類
@pytest.mark.qc
@pytest.mark.beta # 也可以多個標(biāo)簽
def test_login(self): # 標(biāo)記方法
pass
@pytest.mark.smoke # 單個標(biāo)簽
def test_register(): # 標(biāo)記函數(shù)
pass
class TestClass:
# 加一個 pytestmark的類屬性
pytestmark = [pytest.mark.qc, pytest.mark.beta] # 標(biāo)簽存放在一個列表
pytest.main()
注冊標(biāo)簽名
我們要想運行已經(jīng)打好標(biāo)記的函數(shù),還需要對標(biāo)簽名進行注冊,告訴pytest有哪些標(biāo)簽,如果不進行注冊運行時(pytest的高級版本)可能會報警告讓你進行注冊。
我們只需要在項目根目錄下創(chuàng)建一個pytest.ini文件,注意文件名是不可修改的,否則pytest會找不到。內(nèi)容格式如下:
# pytest.ini
# 只能修改=右邊的值
[pytest]
python_files = demo_*.py # 模塊名以demo_開頭
python_functions = demo_* # 方法名以demo_開頭
python_classes = Demo* # 類名名以Demo開頭
# 注冊標(biāo)簽
markers =
qc
beta
smoke
運行指定的標(biāo)簽
通過命令行執(zhí)行
單個標(biāo)簽:pytest -m "標(biāo)簽名"
(-m意思是執(zhí)行標(biāo)簽mark),不想執(zhí)行某個標(biāo)簽可以用not來取反,即pytest -m "not 標(biāo)簽名"
多個標(biāo)簽:可以加上判斷,pytest -m "qc and beta"
或者 pytest -m "qc or beta"
效果是一樣的
注意:標(biāo)簽名一定要加雙引號,單引號是會報錯的。
![](http://img.jbzj.com/file_images/article/202104/2021416114103682.png?2021316114123)
通過代碼執(zhí)行
這里普及一下,main()方法是可以接收不定長參數(shù)的,因此可以把要執(zhí)行的命令放在一個列表中
if __name__ == '__main__':
pytest.main(['-m qc and beta', '-s']) # 標(biāo)簽名不需要加引號
關(guān)于pytest的指令,可以通過控制臺執(zhí)行pytest --help
查看,上面舉例中-s
命令是指打印更加詳細(xì)的信息,如果程序運行過程當(dāng)中的print()
信息打印不出來,可以加上-s
可選參數(shù),它是-- capture=no的縮寫。
skip跳過標(biāo)記
在維護測試用例的過程中,可能在一個階段某些用例已經(jīng)不需要了,或者在指定條件下是不需要運行的,那么我們就可以通過mark.skip
跳過這些函數(shù)或者類,兩種跳過方式:
- 直接跳過:
@pytest.mark.skip(reason = “原因”)
,這里原因是可選參數(shù)
- 條件跳過,即滿足某個條件才跳過:
@pytest.mark.skipif(a == 1, reason = “原因”)
db_host = 'localhost'
@pytest.mark.skip("和現(xiàn)在的需求不符合") # 不滿足當(dāng)下了,或別人編寫的暫時不能刪的
def test_yuz(self):
pass
@pytest.mark.skipif(db_host == 'localhost', reason='只測試線上環(huán)境,不測試本地環(huán)境')
def test_develop_env(self):
pass
到此這篇關(guān)于詳解pytest實現(xiàn)mark標(biāo)記功能詳細(xì)介紹的文章就介紹到這了,更多相關(guān)pytest mark標(biāo)記 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python的pytest框架之命令行參數(shù)詳解(上)
- 詳解用Pytest+Allure生成漂亮的HTML圖形化測試報告
- python pytest進階之conftest.py詳解
- python pytest進階之fixture詳解
- Pytest測試框架基本使用方法詳解
- Python 測試框架unittest和pytest的優(yōu)劣
- Pytest參數(shù)化parametrize使用代碼實例
- pytest中文文檔之編寫斷言
- 在pycharm中文件取消用 pytest模式打開的操作