@pytest.mark.parametrize,
本文主要介绍pytest使用parameterize将参数化变量传递给夹具的详细说明。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
00-1010一、说明应用场景二。用@ pytest . mark . parameterize和fixture的调用求解1。/demo _ top/confist . py2 ./demo _ top/demo _ sub/confist . py3 ./demo _ top/demo _ sub/Test _ case . py参数传递fixture调用fixture分享一个关于如何在pytest中将测试用例文件中的变量传递给fixture函数的故事。
目录
目前集团内的项目根目录下有一个conftest.py文件。下面是一个生成api令牌的fixture函数。我们姑且称之为gen_token()。在每个case包下,还会有一个conftest.py,用来存储适用于该模块下测试用例的fixture函数,比如一个叫做setup_before()的函数。因为取token是请求接口的前提,万一,比如有一个test_case(),要传递最顶层的fixture函数,也就是test_case(gen_token)。顶级gen_token()需要三个参数。因为不同的案例可能涉及到生成不同用户的令牌,我们把这个参数放在案例文件中。好了,背景是这样的。
现在有需要的小伙伴。她必须在setup_before()中进行编号。通过请求另一个接口,这个请求也需要使用token。
那么,这个问题可以转化为:
将案例文件中的参数传递给fixture函数。gen_token()中返回的值应该在setup_before()和test_case()中获取。
一、交代应用场景
这里把实际的代码抽象出来,变成简单的代码,便于演示和理解:
#目录结构
- /demo_top
- /demo_sub
__init__。巴拉圭
conftest.py
测试案例. py
__init__。巴拉圭
conftest.py
以下分别是/demo _ top/confist.py、/demo _ top/demo _ sub/confist.py、/demo _ top/demo _ sub/test _ case . py的内容。
二、使用@pytest.mark.parametrize、以及fixture的调用来解决
#/demo _ top/conftest . py的内容
导入pytest
@pytest.fixture()
定义gen_token(请求):
params=request.param
print( n根目录中gen_token()获得的参数:,params)
if params[0] params[1]==5:
返回“api_token”
else:
不返回
这里,模拟生成token的fixture函数。当传递的值之和等于5时,它将返回 api_token ,否则将返回None。
1. /demo_top/conftest.py
#/demo _ top/demo _ sub/conftest . py的内容
导入pytest
@pytest.fixture()
def setup_before(请求,gen_token):
print( execute child setup _ before,并获取参数:,request.param)
print( Execute child setup _ before并获取gen_tok的返回值:,gen _ Tok
en)
if gen_token:
yield "造数完成"
print("测试用例test_case执行完毕,清理测试数据")
else:
pytest.skip("跳过")
这里模拟了给测试用例造数据的fixture函数,如果没拿到token的话,就跳过测试用例。
3. /demo_top/demo_sub/test_case.py
# content of /demo_top/demo_sub/test_case.py
这是测试用例文件了,里面有个测试函数test_case1,因为它需要用到2个fixture函数返回的值,所以gen_token, setup_before都请求。
参数传递
@pytest.mark.parametrize:使用pytest内置的parametrize,来把参数传递给目标fixture函数,你希望把参数传递给哪个fixture函数就加哪个。比如这里的gen_token和setup_before,注意名称与fixture名称一致。
indirect=True:作用是让parametrize中的参数名称,也就是"gen_token"当成函数执行,并且后面的参数值test_param,作为"gen_token"的传参。
request.param:接受传参的fixture函数,使用request.param来获取值。
fixture调用fixture
fixture之间的相互调用,在之前的文章里已经有过详述了。既然这里setup_before依赖gen_token,之间传递调用即可setup_before(request, gen_token)。
在各环节做了些print打印出信息,帮助理解执行过程。
test_case.py [100%]
再看下gen_token不返回token的情况,改下传参test_param = [(2, 4)]。
test_case.py [100%]
测试用例不执行。
以上就是pytest使用parametrize将参数化变量传递到fixture的详细内容,更多关于pytest parametrize变量传递fixture的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。