【发布时间】:2020-04-16 20:23:20
【问题描述】:
我们的 pytest 环境有很多固定装置(主要是 scope='function' 和 scope='module'),它们正在执行以下形式的操作:
@pytest.yield_fixture(scope='function')
def some_fixture():
... some object initialization ...
yield some_object
... teardown ...
我们使用夹具的拆卸阶段(在 yield 之后)删除一些专门为测试创建的资源。
但是,如果测试失败,我不希望执行拆解,因此我们将拥有仍然存在的资源以进行进一步调试。
例如,以下是在我们所有测试框架中重复出现的常见场景:
@pytest.yield_fixture(scope='function')
def obj_fixture():
obj = SomeObj.create()
yield obj
obj.delete()
def test_obj_some_field(obj_fixture):
assert obj_fixture.some_field is True
在这种情况下,如果assert 中的条件是True,我希望obj.delete() 执行。
但是,如果测试失败,我希望 pytest 跳过 obj.delete() 以及 yield 之后的任何其他内容。
谢谢。
编辑 我希望在不更改夹具和测试代码的情况下完成该过程,我更喜欢自动过程而不是在我们的整个测试代码库中进行此重构。
【问题讨论】: