本文小编为大家详细介绍“pytest解读fixtures之Teardown怎么处理yield和addfinalizer”,内容详细,步骤清晰,细节处理妥当,希望这篇“pytest解读fixtures之Teardown怎么处理yield和addfinalizer”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。当我们运行测试函数时,我们希望确保测试函数在运行结束后,可以自己清理掉对环境的影响。这样的话,它们就不会干扰任何其他的测试函数,更不会日积月累的留下越来越多的测试数据。用过unittest的朋友相信都知道teardown这个函数,做的是一样的事情,那么下面姑且就把这种“善后”工作的代码叫做teardown代码吧。而pytest中的fixture,也提供了这样一个非常有用的系统,我们可以在里面定义teardown代码。这里可以使用2种方式来实现,分别是yield
和addfinalizer
在有yield
的fixtures函数中,关键字yield
可以代替return
,可以把fixture里的一些对象传递给调用它们的fixture函数或者测试函数。就像其他普通的fixture函数一样。区别仅仅是:yield
替换掉了return
teardown代码放置在yield
之后pytest在执行fixture函数时,会根据fixture函数之间的线性关系顺序调用的。但是,当测试函数运行结束的时候,pytest又会按照之前的顺序反方向来执行fixture中yield之后的代码。结合示例看下,这里没免费云主机域名有引用官方示例了,手写一个直观些的:代码中,fixture中调用多个fixture,测试函数中调用多个fixture,通过前面几章的接触,相信大家这时候已经可以梳理出前后调用顺序了:test_demo 测试函数,先去调用fixture函数 fixture_two,然后调用 fixture_adding。在fixture函数 fixture_two中,又会去调用另一个fixture函数 fixture_one。在fixture函数 fixture_adding中,调用了 fixture_one、fixture_two。所以,fixture函数的先后顺序是:fixture_one
、fixture_two
、fixture_adding
。那么,可以得知测试结束后的teardown代码执行顺序:fixture_adding
、fixture_two
。运行一下代码,验证下结果是否符合我们的梳理:结果与我们刚才梳理的一致。但是,值得注意的是,就算是teardown的代码是按照正确的顺序执行,也不能保证代码能正常执行的。比如说teardown里的某些代码执行异常了,导致别的清理动作也没法执行。这里就涉及到另一个点了:健壮的fixture结构应该是什么样子。这个官方文档另起进行说明,这里同样。在pytest中想要做teardown的处理,除了使用带有yield的fixture函数,还可以直接添加终结器。直接来看示例代码:看下运行结果:运行结果可以看出,效果与yield是一致的。这算是一个固定写法,关于request
文档中也有另外的讲解,届时再分享。上方代码是一个终结函数,如果要注册多个呢?运行结果:这里要注意的是,多个终结器的情况下,执行的顺序是与注册时候相反的。目前从官方文档中看到的是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.一旦添加了终结器,pytest便会执行。但是,当我尝试在setup代码中进行抛错,终结器的代码却并没有执行。读到这里,这篇“pytest解读fixtures之Teardown怎么处理yield和addfinalizer”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。
本篇内容介绍了“Node中如何使用async函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!利用 async 函数,你可以把基于 Promise 的异步代码写…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。