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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275338.html
標籤:其他
上一篇:python 怎么樣
