@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 != ""
執行結果: