背景:测试数据既要在fixture方法中使用,同时也在测试用例中使用
使用方法:在使用parametrize的时候添加"indirect=True"参数。pytest可以实现将参数传到fixture方法中,也可以在当前测试用例中使用。
原理:参数indirect=True时,pytest会把argnames当做函数去执行,将argvalues作为参数传入到argnames这个函数里。
实现demo:
通过上面的用例可以看出,当参数indirect=True时,会将name_list作为参数传入login_fixture的方法中并将通过return将结果返回,当调用login_fixture方法时可以获取到login_fixture方法的返回值,并当做test_login测试用例的参数生成多条测试用例
import pytest
name_list = ['jerry', 'Tom', 'Tony']
@pytest.fixture
def login_fixture(request):
# 通过request.param来获取参数值
user_fixture = request.param
print(f'fixture中获取的值为{user_fixture}')
return user_fixture
@pytest.mark.parametrize('login_fixture', name_list, indirect=True)
def test_login(login_fixture):
user_test = login_fixture
print(f'test测试用例中获取到的值为{user_test}')
assert user_test != ''
if __name__ == '__main__':
test_login()
上面的代码也可以这样实现:
import pytest
name_list = ['jerry', 'Tom', 'Tony']
# parametrize的格式为@pytest.mark.parametrize("参数",参数值)
@pytest.mark.parametrize("a_name_list",name_list)
def test_login(a_name_list):
user_test = a_name_list
print(f'test测试用例中获取到的值为{user_test}')
assert user_test != ''
if __name__ == '__main__':
test_login()
注:parametrize的格式可参考: