pytest中的fixture:利用yield实现测试结束后的清理工作

1 setup与teardown

fixture总是在test函数之前执行,为test函数的运行提供必要的支持(包括数据、环境等),可以把这个过程视为用例执行前面的准备工作 即setup

test函数执行完后也有一些收尾工作要做,即teardown,比如前面我们在fixture中实现了一个数据库连接给到test函数,那么,test函数执行完后按照流程也需要关闭数据库连接,其他如文件IO 网络连接也是一样

有时想想,网络世界虽然是虚拟的,但是它的处理逻辑却来源于现实世界的经验。我们在家里做家务也要事前准备劳动工具,事后归类放好这些工具

2 在pytest的fixture中实现清理工作

conftest.py
image

test_fixture.py
image
test_fixture_2.py
image
执行
image

pytest会根据fixture中scope的定义情况,来执行yield后面的代码。这里又和scope选项值得作用范围联系起来了。 简单来说,yield之后的代码会在scope定义范围内的最后一个test函数执行完后再执行,即teardown,当然,yield之前的代码就是如上一篇所说,会在scope定义范围内的第一个test函数运行前执行,即setup

在yield前后遇到异常

遇到异常,异常没有处理好的话,异常之后的代码时不会执行
image

执行
image
如上,我们看到代码都没有进入到test函数就中止了。
因为异常在yield语句之前,这里未捕获的异常一发生就中止了 yield那一行语句都没有执行,即test函数之前的准备工作 setup部分都未执行完毕,teardown部分更加不会执行

test函数中发生的异常不会影响 yield之后的即teardown的代码

多个fixture fixture的执行顺序

conftest.py
image
test_fixture.py
image
执行
image
可以看到,参数中有多个fixture,test函数执行前的准备工作部分(setup)执行的顺序,是按照参数的顺序,从左边的fixture到右边的fixture,而teardown部分,是从右到左

posted @   工作手记  阅读(451)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示