pytest測試用例引數化 - @pytest.fixture 與 @pytest.mark.parametrize 結合使用【用例引數化傳入引數設定:indirect=True】
阿新 • • 發佈:2021-07-22
@pytest.fixture 裝飾器
被 @pytest.fixture 裝飾器裝飾的方法名可以作為一個引數傳入測試方法中
作用:
① 使用此方法可以完成測試之前的資料初始化;【測試還未開始時,先執行fixture函式,完成資料初始化(獲取資料/執行前置動作)】
② 此方法可以返回資料給測試函式;【fixture函式的返回值可以作為測試函式的入參,或者執行測試函式之前的一系列動作】
@pytest.mark.parametrize 裝飾器
pytest 中使用此裝飾器對用例進行引數化
@pytest.fixture 與@pytest.mark.parametrize 結合實現引數化
如果測試資料需要在 fixture 方法中使用,同時也需要在用例中使用,可以讓 parametrize
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 != ""
執行結果:
去期待陌生,去擁抱驚喜。