我试图将三个不同的灯具传递给我的pytest.mark.parameterize装饰器,如下所示:
@pytest.mark.parametrize("credentials, return_code", [
(user1, 200),
#(user2, 200),
#(user3, 401)
])
def test_login():
assert True
# Actual test uses response.return_code == return_code
Run Code Online (Sandbox Code Playgroud)
但是,我收到的错误是:
NameError: name 'user1' is not defined
Run Code Online (Sandbox Code Playgroud)
这不正确,我已将其定义为conftest.py:
user1_info = [('user1', 'password')]
@pytest.fixture(params=user1_info)
def user1(request):
return request.param
Run Code Online (Sandbox Code Playgroud)
如果我将测试更改为如下,则夹具可以工作:
def test_login(user1):
assert True
# Actual test uses response.return_code == return_code
Run Code Online (Sandbox Code Playgroud)
问题是,如果我这样做,我必须编写三个单独的测试,每个测试一个,每个status_code检查.如果我可以使用parameterize,我可以使用一个函数并检查用户/预期的返回代码.
如何利用我的灯具是pytest.mark.parameterize装饰者的一部分?
要将fixture作为参数化参数传递,请将它们作为字符串引用并使用关键字参数indirect=True.
然后使用参数名称credentials和return_code测试函数的参数.
@pytest.mark.parametrize('credentials, return_code', [
('user1', 200),
('user2', 200),
('user3', 401),
], indirect=True)
def test_login(credentials, return_code):
return True
Run Code Online (Sandbox Code Playgroud)