pytest測試用例參數化 - @pytest.fixture 與 @pytest.mark.parametrize 結合使用【用例參數化傳入參數設置:indirect=True】


@pytest.fixture 裝飾器

被 @pytest.fixture 裝飾器裝飾的方法名可以作為一個參數傳入測試方法中

作用:
① 使用此方法可以完成測試之前的數據初始化;【測試還未開始時,先執行fixture函數,完成數據初始化(獲取數據/執行前置動作)】
② 此方法可以返回數據給測試函數;【fixture函數的返回值可以作為測試函數的入參,或者執行測試函數之前的一系列動作】
@pytest.mark.parametrize 裝飾器
pytest 中使用此裝飾器對用例進行參數化

@pytest.fixture 與@pytest.mark.parametrize 結合實現參數化

如果測試數據需要在 fixture 方法中使用,同時也需要在用例中使用,可以讓  parametrize  的  indirect  參數為  True 

 parametrize 源碼:

def parametrize(self, argnames, argvalues, indirect=False, ids=None, scop=None):

當設置indirect = True時,pytest 會把 argnames 當做函數執行,將 argvalues 作為參數傳入到 argnames 函數中


案例:【因為indirect=Ture,所以pytest測試框架將login_r當作函數執行,且將test_user_data列表作為參數傳入到login_r函數中】

test_user_data = ['Tom', 'Jerry']

# 方法名作為參數
@pytest.fixture(scope='module')
def login_r(request):
    # 通過 request.param 獲取參數
    user= request.param
    print(f"/n 登錄用戶: {user}")
    return user

@pytest.mark.parametrize("login_r", test_user_data, indirect=True)
def test_login(login_r):
    a = login_r
    print(f"用例中 login 的返回值; {a}")
    assert a != ""

執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM