pytest - 如何在每个项目执行前收集fixtures和设置方法

1 投票
1 回答
3199 浏览
提问于 2025-04-18 07:48

我需要帮助来检测测试执行前的所有条件。我的意思是,有很多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来精确控制测试的执行方式。

撰写回答