詳解pytest實現mark標記功能詳細介紹
mark標記
在實際工作中,我們要寫的自動化用例會比較多,也不會都放在一個py文件中,如果有幾十個py文件,上百個方法,而我們隻想運行當中部分的用例時怎麼辦?
pytest提供瞭一個非常好用的mark功能,可以給測試用例打上各種各樣的標簽,運行用例時可以指定運行某個標簽。mark功能作用就是靈活的管理和運行測試用例。
標簽既可以打到方法上,也可以打到類上,標記的兩種方式:
- 直接標記類或方法或函數:
@pytest.mark.標簽名
- 類屬性:
pytestmark = [pytest.mark.標簽名, pytest.mark.標簽名]
,需要註意的是屬性名稱是固定的
import pytest @pytest.mark.beta # 可以給類打標簽 class TestLogin: # 標記類 @pytest.mark.qc @pytest.mark.beta # 也可以多個標簽 def test_login(self): # 標記方法 pass @pytest.mark.smoke # 單個標簽 def test_register(): # 標記函數 pass class TestClass: # 加一個 pytestmark的類屬性 pytestmark = [pytest.mark.qc, pytest.mark.beta] # 標簽存放在一個列表 pytest.main()
註冊標簽名
我們要想運行已經打好標記的函數,還需要對標簽名進行註冊,告訴pytest有哪些標簽,如果不進行註冊運行時(pytest的高級版本)可能會報警告讓你進行註冊。
我們隻需要在項目根目錄下創建一個pytest.ini文件,註意文件名是不可修改的,否則pytest會找不到。內容格式如下:
# pytest.ini # 隻能修改=右邊的值 [pytest] python_files = demo_*.py # 模塊名以demo_開頭 python_functions = demo_* # 方法名以demo_開頭 python_classes = Demo* # 類名名以Demo開頭 # 註冊標簽 markers = qc beta smoke
運行指定的標簽
通過命令行執行
單個標簽:pytest -m "標簽名"
(-m意思是執行標簽mark),不想執行某個標簽可以用not來取反,即pytest -m "not 標簽名"
多個標簽:可以加上判斷,pytest -m "qc and beta"
或者 pytest -m "qc or beta"
效果是一樣的
註意:標簽名一定要加雙引號,單引號是會報錯的。
通過代碼執行
這裡普及一下,main()方法是可以接收不定長參數的,因此可以把要執行的命令放在一個列表中
if __name__ == '__main__': pytest.main(['-m qc and beta', '-s']) # 標簽名不需要加引號
關於pytest的指令,可以通過控制臺執行pytest --help
查看,上面舉例中-s
命令是指打印更加詳細的信息,如果程序運行過程當中的print()
信息打印不出來,可以加上-s
可選參數,它是– capture=no的縮寫。
skip跳過標記
在維護測試用例的過程中,可能在一個階段某些用例已經不需要瞭,或者在指定條件下是不需要運行的,那麼我們就可以通過mark.skip
跳過這些函數或者類,兩種跳過方式:
- 直接跳過:
@pytest.mark.skip(reason = “原因”)
,這裡原因是可選參數 - 條件跳過,即滿足某個條件才跳過:
@pytest.mark.skipif(a == 1, reason = “原因”)
db_host = 'localhost' @pytest.mark.skip("和現在的需求不符合") # 不滿足當下瞭,或別人編寫的暫時不能刪的 def test_yuz(self): pass @pytest.mark.skipif(db_host == 'localhost', reason='隻測試線上環境,不測試本地環境') def test_develop_env(self): pass
到此這篇關於詳解pytest實現mark標記功能詳細介紹的文章就介紹到這瞭,更多相關pytest mark標記 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- None Found