在實際工做中,咱們要寫的自動化用例會比較多,也不會都放在一個py文件中,若是有幾十個py文件,上百個方法,而咱們只想運行當中部分的用例時怎麼辦?python
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會找不到。內容格式以下:code
# 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 標籤名"
blog
多個標籤:能夠加上判斷,pytest -m "qc and beta"
或者 pytest -m "qc or beta"
效果是同樣的ip
注意:標籤名必定要加雙引號,單引號是會報錯的。自動化
這裏普及一下,main()方法是能夠接收不定長參數的,所以能夠把要執行的命令放在一個列表中io
if __name__ == '__main__': pytest.main(['-m qc and beta', '-s']) # 標籤名不須要加引號
關於pytest的指令,能夠經過控制檯執行pytest --help
查看,上面舉例中-s
命令是指打印更加詳細的信息,若是程序運行過程中的print()
信息打印不出來,能夠加上-s
可選參數,它是-- capture=no的縮寫。function
在維護測試用例的過程當中,可能在一個階段某些用例已經不須要了,或者在指定條件下是不須要運行的,那麼咱們就能夠經過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