当前位置: 首页> 汽车> 报价 > @pytest.fixture与@pytest.mark.parametrize结合实现参数化

@pytest.fixture与@pytest.mark.parametrize结合实现参数化

时间:2025/8/23 17:28:48来源:https://blog.csdn.net/weixin_40482973/article/details/139621244 浏览次数: 0次

背景:测试数据既要在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 pytestname_list = ['jerry', 'Tom', 'Tony']@pytest.fixture
def login_fixture(request):# 通过request.param来获取参数值user_fixture = request.paramprint(f'fixture中获取的值为{user_fixture}')return user_fixture@pytest.mark.parametrize('login_fixture', name_list, indirect=True)
def test_login(login_fixture):user_test = login_fixtureprint(f'test测试用例中获取到的值为{user_test}')assert user_test != ''if __name__ == '__main__':test_login()

上面的代码也可以这样实现:

import pytestname_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_listprint(f'test测试用例中获取到的值为{user_test}')assert user_test != ''if __name__ == '__main__':test_login()
注:parametrize的格式可参考:
关键字:@pytest.fixture与@pytest.mark.parametrize结合实现参数化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: