pytest fixture是什么,pytest yield

  pytest fixture是什么,pytest yield

  本文主要介绍pytest官方解读fixtures中yield和addfinalizer的区别。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

  00-1010前言一、问题回顾二。问题的解决

  

目录

 

  在最后一章中,文章的结尾留下了一个有待填补的漏洞。问题是这样的:

  目前从官方文件中我们可以看到的是

  但是我们必须小心,因为一旦添加了终结器,pytest就会运行它,即使fixture在添加终结器后引发了异常。

  一旦添加了终结器,pytest将被执行。

  然而,当我试图在安装代码中抛出一个错误时,终止符代码没有执行。暂时尝试搜索外网没有得到任何有效的帮助,只好在GitHub上向pytest提出issue,这是一个以后要解决的坑。

  

前言

 

  其实说到底是我理解的不对。可能我当时就在怀疑,难免会陷入死循环。后来在github上被别人问醒了。我们来看看我当时尝试演示上述结果的代码,也就是在设置代码中抛出了错误,但是没有执行终止符代码。

  代码分为两部分,一部分是fixture功能代码,另一部分是测试用例。副本不能直接复制运行,但是我在项目的用例中修改了。在这里,它只帮助解释意思。

  # conftest . py的内容

  @pytest.fixture()

  定义初始化数据分配任务(请求):

  query_sql=

  从“sm_purchase_allot”中选择id,其中“status ”!=5

  db=DB()

  data=db.fetch_one(query_sql)

  db.close()

  def demo_finalizer():

  打印(运行终结器代码.)

  request . add finalizer(demo _ finalizer)

  返回数据

  #测试案例的内容

  .

  定义测试分配详细信息(初始化数据分配任务):

  有效负载={

  allot id : init _ data _ allot _ task[0]

  }

  r=requests.post(QA_URL API_URL,json=payload,headers=HEADER)

  result=r.json()

  断言结果[result]==ok

  断言结果[errmsg]==成功

  assert len(result[ row ][ taskListOfPage ][ result data ])gt;0

  我最开始想做的是,在fixture函数中,让代码db=DB()抛出一个mysql连接超时错误,然后就可以看到‘正在运行finalizer代码……’的输出了在控制台里。

  但是,在我执行它之后,我没有看到预期的输出,这表明在安装程序代码抛出错误之后,addfinalizer代码没有执行。

  最后在github上被朋友指出后,发现自己也误解了。

  

一、问题回顾

 

  还是看一下官方原文:

  但是我们必须小心,因为一旦添加了终结器,pytest就会运行它,即使fixture在添加终结器后引发了异常。

  这句话实际上的意思是,一旦成功添加了终结器,pytest就会执行它。即使fixture函数在添加终结器后抛出异常。

  按照这种理解,我的fixture函数代码有问题。因为db=DB()代码在请求前抛出错误。add finalizer (demo _ finalizer),这行添加终结器的代码实际上并没有执行,所以没有成功添加终结器。如何执行它们?

  我终于明白了,于是调整了代码顺序,把request . add finalizer(demo _ finalizer)放在前面,然后连接fixture的代码:

  # conftest . py的内容

  @pytest.fixture()

  定义初始化数据分配任务(请求):

  query_sql=

  从“sm_purchase_allot”中选择id,其中“status ”!=5

  def demo_finalizer():

  打印(运行终结器代码.)

  request . add finalizer(demo _ finalizer)

  打印(运行安装代码.)

  db=DB()

  data=db.fetch_one(query_sql)

  db.close()

  返回数据

  这样,我们将首先看到“运行安装代码.”的输出,然后看到mysql抛出的错误,最后还是看到‘运行安装代码.’的输出。

  运行代码进行验证:

  没错。

  这就是pytest对fixtures中yield和addfinalizer区别的解释细节。更多关于yield和addfinalizer的区别,请关注盛行的IT软件开发工作室的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

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