返回顶部
首页 > 资讯 > 精选 >pytest解读fixtures中yield与addfinalizer区别是什么
  • 890
分享到

pytest解读fixtures中yield与addfinalizer区别是什么

2023-06-30 18:06:52 890人浏览 安东尼
摘要

本文小编为大家详细介绍“pytest解读fixtures中yield与addfinalizer区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“pytest解读fixtures中yield与addfinalizer区别是什么”文章能

本文小编为大家详细介绍“pytest解读fixtures中yield与addfinalizer区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“pytest解读fixtures中yield与addfinalizer区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、问题回顾

其实说到底还是我理解的不对,可能当时自己处在疑问中难免就会陷入进死循环,后来在GitHub上经过别人提点方才醒悟。先来看下当时我尝试演示出上述结果的代码,也就是:setup代码中进行抛错,终结器的代码却并没有执行。

代码分为2部分,一个是fixture函数代码,另一个则是测试用例。代码是不能直接copy出来运行的,是我在项目的用例中进行改造的,在这里仅仅帮助说明意思。

# content of conftest.py@pytest.fixture()def init_data_allot_task(request):    query_sql = """    SELECT id FROM `sm_purchase_allot` WHERE `status`!=5    """    db = DB()    data = db.fetch_one(query_sql)    db.close()    def demo_finalizer():        print("running finalizer code...")    request.addfinalizer(demo_finalizer)    return data
# content of testcase...def test_allot_detail(init_data_allot_task):    """    """    payload = {          "allotId": init_data_allot_task[0]        }    r = requests.post(QA_URL + api_URL, JSON=payload, headers=HEADER)    result = r.json()    assert result["result"] == "ok"    assert result["errmsg"] == "success"    assert len(result["row"]["taskListOfPage"]["resultData"]) > 0

最开始我想做的是,在fixture函数中,让代码db = DB()抛出一个mysql连接超时的错误,然后就能在控制台中看到"running finalizer code..."的输出。

但是我执行后,并没有看到预期的输出,说明setup代码抛错后,addfinalizer代码并没有执行。

最后经过github上朋友指点后,发现还是我自己理解错了。

二、问题解决

还是来看下官方的原文:

We have to be careful though, because pytest will run that finalizer once it’s been added, even if that fixture raises an exception after adding the finalizer. 

这句话意思其实是说,当finalizer 一旦添加成功后,pytest就会去执行它。就算是fixture函数在添加了finalizer之后抛出了异常。

按照这样理解的话,那我在fixture函数中的代码就有问题了。因为db = DB()代码在request.addfinalizer(demo_finalizer)之前就抛错了,那么实际上并没有执行到添加终结器的这行代码,所以终结器都还没添加成功,又怎么会去执行呢?

终于我明白过来了,于是调整了代码顺序,把request.addfinalizer(demo_finalizer)放到前面去,然后再接上fixture的代码:

# content of conftest.py@pytest.fixture()def init_data_allot_task(request):    query_sql = """    SELECT id FROM `sm_purchase_allot` WHERE `status`!=5     """    def demo_finalizer():        print("running finalizer code...")    request.addfinalizer(demo_finalizer)    print("running setup code...")    db = DB()    data = db.fetch_one(query_sql)    db.close()    return data

如此来看,我们会先看到"running setup code..."的输出,然后看到Mysql抛错,最后仍然可以看到"running setup code..."的输出。

运行代码验证一下:

pytest解读fixtures中yield与addfinalizer区别是什么

读到这里,这篇“pytest解读fixtures中yield与addfinalizer区别是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: pytest解读fixtures中yield与addfinalizer区别是什么

本文链接: https://lsjlt.com/news/330855.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • pytest解读fixtures中yield与addfinalizer区别是什么
    本文小编为大家详细介绍“pytest解读fixtures中yield与addfinalizer区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“pytest解读fixtures中yield与addfinalizer区别是什么”文章能...
    99+
    2023-06-30
  • pytest解读fixtures中yield与addfinalizer区别
    目录前言一、问题回顾二、问题解决前言 在上一章中,文末留下了一个坑待填补,疑问是这样的: 目前从官方文档中看到的是 We have to be careful though, bec...
    99+
    2024-04-02
  • pytest解读fixtures之Teardown怎么处理yield和addfinalizer
    本文小编为大家详细介绍“pytest解读fixtures之Teardown怎么处理yield和addfinalizer”,内容详细,步骤清晰,细节处理妥当,希望这篇“pytest解读fixtures之Teardown怎么处理yield和ad...
    99+
    2023-06-30
  • pytest解读fixtures之Teardown处理yield和addfinalizer方案
    目录前言一、yield fixtures(推荐)1, yield 和 return2, yield的执行顺序二、addfinalizer1.request.addfinalizer把...
    99+
    2024-04-02
  • Python3中return和yield的区别是什么
    这篇文章主要讲解了“Python3中return和yield的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python3中return和yield的区别是什么”吧!一、前言ret...
    99+
    2023-07-02
  • Python中Pytest和Unittest的区别是什么
    本文小编为大家详细介绍“Python中Pytest和Unittest的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中Pytest和Unittest的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-05
  • Python中Yield的基本用法及Yield与return的区别解析
    目录一、yield的功能1. 使用next方法迭代生成器2. 使用send()方法与生成器函数通信3. Yield的好处二、总结yield的功能三、yield VS return一、...
    99+
    2024-04-02
  • Java编程语言中sleep()和yield()的区别是什么
    这篇文章主要讲解了“Java编程语言中sleep()和yield()的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java编程语言中sleep()和yield()的区别是什么”吧...
    99+
    2023-06-17
  • php中==与===的区别是什么
    这篇文章主要讲解了“php中==与===的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php中==与===的区别是什么”吧!一、“==”操作符“==”操作符是PHP中的等于操作符...
    99+
    2023-07-05
  • mysql脏读和幻读的区别是什么
    MySQL中的脏读(Dirty Read)是指一个事务在未提交前读取了另一个事务尚未提交的数据。而幻读(Phantom Read)则...
    99+
    2023-08-19
    mysql
  • MySQL中MyISAM与InnoDB区别是什么
    MySQL中MyISAM与InnoDB区别是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!MyISAM和InnoDB的...
    99+
    2024-04-02
  • Python中==与is的区别是什么
    这篇文章主要介绍“Python中==与is的区别是什么”,在日常操作中,相信很多人在Python中==与is的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中==与is的区别是什么”的疑...
    99+
    2023-06-16
  • c#中task与thread区别是什么
    这篇文章主要介绍了c#中task与thread区别是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.什么是thread当我们提及多线程的时候会想到thread和thre...
    99+
    2023-06-29
  • JS中Require与Import区别是什么
    本篇内容主要讲解“JS中Require与Import区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中Require与Import区别是什么”吧!require 和 import对比...
    99+
    2023-07-05
  • oracle中blob与clob区别是什么
    oracle中blob与clob区别是:1、BLOB是用来存储二进制数据的,而CLOB是用来存储文字的;2、BLOB全称为二进制大型对象,可存储的最大大小为4G字节,而CLOB全称为字符大型对象,不支持宽度不等的字符集,可存储的最大大小为4...
    99+
    2023-07-10
  • Java语言中&&与& ||与|的区别是什么
    1、运算符两边的变量为boolean变量时       先列出代码:public class Test { public static void main(String[] args) {...
    99+
    2023-05-31
    java
  • mysql中分表与分区的区别是什么
    这篇文章将为大家详细讲解有关mysql中分表与分区的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一,什么是mysql分表,分区什么是分表,从表面...
    99+
    2024-04-02
  • HTML与JS区别是什么
    HTML与JS的区别是:1、性质不一样,HTML是标记语言;而JS是一种脚本语言;2、HTML需要在浏览器中运行显示,而JS需要JS引擎运行;3、HTML在网页上提供静态内容,而JS则是向静态网页添加动态功能;4、HTML属于W3C和WHA...
    99+
    2024-04-02
  • HTML与JSP区别是什么
    HTML与JSP区别有:1、HTML是在客户端中运行;而JSP是在服务器端中运行;2、HTML主要用于静态数据展示,而JSP则是用于动态网页开发;3、JSP相当于一个特殊的HTML,只是在HTML里面嵌入了Java代码;4、HTML有助于创...
    99+
    2024-04-02
  • SEO与SEC区别是什么
    这篇文章主要为大家展示了“SEO与SEC区别是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SEO与SEC区别是什么”这篇文章吧。我们很多人做seo是舍本求末的,忽略了网站的最根本问题,片面...
    99+
    2023-06-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作