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

发布时间 2023-05-06 17:33:17作者: 工作手记

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函数执行完后再执行,当然,yield之前的代码就是如上一篇所说,会在scope定义范围内的第一个test函数运行前执行

在yield前后遇到异常

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

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