@pytest.mark.parametrize,

  @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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: