pytest - 如何在每个项目执行前收集fixtures和设置方法
我需要帮助来检测测试执行前的所有条件。我的意思是,有很多pytest_*事件,但我没有找到能满足我需求的东西。以下是几行代码:
class TestCreate:
@classmethod
def setup_class(cls):
print('setup_class')
def setup_method(self, method):
print('setup_method')
def test_method0(self, usefull_fixture):
assert usefull_fixture.x == 1
test_method0有一个在conftest中定义的有用的fixture,还有两个直接在类里面的设置方法。我想要的是在测试执行之前,收集所有的特性和设置函数,并准备好这些信息以便后续发送或处理。目前我只能得到fixture的名称,但无法检测到它们的顺序或设置方法。也许有什么秘密的钩子,或者我需要重写某些行为。最好的选择是捕捉每个前提条件执行时的事件。
*更新:我需要创建一个插件,可以检查收集到的测试并检测每个测试将要执行的前提条件。例如,我有事件pytest_pyfunc_call(),但它只显示测试方法,而不显示设置/清理方法。其他事件也是如此。如何在运行时检测特定测试的设置/清理方法?
1 个回答
1
我觉得这个可以解决你的问题:xunit风格的设置
你可以在模块、类和测试级别定义设置和拆卸的方法:
def setup_module(module):
""" setup any state specific to the execution of the given module."""
def teardown_module(module):
""" teardown any state that was previously setup with a setup_module
method.
"""
补充一下:你有没有看过http://pytest.org/latest/plugins.html#pytest-hook-reference? 使用这些钩子,你几乎可以自定义pytest的所有行为。我不知道你想要实现什么,但我觉得你可以通过使用pytest_runtest_protocol
来精确控制测试的执行方式。