1. 程式人生 > 實用技巧 >Pytest 系列(六)mark 標記

Pytest 系列(六)mark 標記

一、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