Pytest 系列(六)mark 標記
阿新 • • 發佈:2020-08-27
一、mark 標記
標記測試用例marks 標記只對測試用例有效,對 fixture 方法無效。
二、跳過測試用例
2.1 skip
若測試用例未完成或不想執行該測試用例,可以使用 @pytest.mark.skip 跳過該條測試。
import pytest # 使用 skip 裝飾器跳過測試用例 @pytest.mark.skip(reason="NA") def test_01(): pass # 呼叫 pytest.skip() 函式在測試執行時強制跳過 def test_01(): if True: # 可以設定當條件成立時跳過測試 pytest.skip("unsupported configuration") 2.2 skipif ----- * @pytest.mark.skipif:滿足條件則跳過該測試用例
@pytest.mark.skipif(condition, reason)
def test_function():
pass
- @pytest.mark.xfail:將測試用例標記為失敗
三、引數化資料驅動
@pytest.mark.parametrize:引數化資料驅動
# 引數化一個引數 @pytest.mark.parametrize(argnames="data", argvalues=["1", "2", "3"]) def test_01(data): print("傳入的引數為:" + data) assert 1
import pytest # 引數化多個引數 -- 元組 @pytest.mark.parametrize(argnames="mobile, code", argvalues=[("15509879874", "867480"), ("16789536473", "094756"), ("13576932356", "097542")]) def test_01(mobile, code): print("手機號為:%s,驗證碼為:%s" % (mobile, code)) # 執行三次 assert 1 # 引數化多個引數 -- 字典 @pytest.mark.parametrize("logininfo", [{"mobile": "15366584856", "code": "123456"}, {"mobile": "16895846820", "code": "365846"}]) def test_01(logininfo): print("手機號為:%s,驗證碼為:%s" % (logininfo["mobile"], logininfo["code"])) assert 1
一個函式或一個類可以裝飾多個 @pytest.mark.paramtrize,最終生成的用例是 n*m
import pytest
@pytest.mark.parametrize(argnames="mobile", argvalues=["15509879874", "16789536473",])
@pytest.mark.parametrize(argnames="code", argvalues=["000000", "012584", "859847"])
def test_01(mobile, code):
print("手機號為:%s,驗證碼為:%s" % (mobile, code))
# 執行6次
assert 1
四、自定義標記
可以將 mark 賦值給一個標記變數,不同模組之間共享
# 如:將 skipif 以標記為模組共享,標記後可在其它模組重複使用
minversion = pytest.mark.skipif(condition, reason)
@minversion
def test_function():
pass