1. 程式人生 > 其它 >pytest測試用例引數化 - @pytest.fixture 與 @pytest.mark.parametrize 結合使用【用例引數化傳入引數設定:indirect=True】

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 != ""

執行結果:

去期待陌生,去擁抱驚喜。