模块级夹具不是 运行

Module level fixture is not running

我想为其中一个测试模块安装一个特定的 setup/tear 固定装置。显然,我希望它在模块中的所有测试之前 运行 设置代码一次,在所有测试完成后一次。

所以,我想到了这个:

import pytest


@pytest.fixture(scope="module")
def setup_and_teardown():
    print("Start")
    yield
    print("End")


def test_checking():
    print("Checking")
    assert True

不是那样工作。仅当我提供 setup_and_teardown 作为模块中 first 测试的参数时,它才会起作用。

这是它应该的工作方式吗?如果我将它标记为 module 级别灯具,它不应该自动成为 运行 吗?

Module-scoped fixtures 的行为与任何其他范围的 fixtures 相同 - 它们仅在明确通过测试、使用 @pytest.mark.usefixtures 标记或设置 autouse=True 时使用:

@pytest.fixture(scope="module", autouse=True)
def setup_and_teardown():
    print("setup")
    yield
    print("teardown")

对于在您的示例中执行 setup/teardown 的模块和 session-scoped 固定装置,这是最常用的选项。

对于生成在测试中访问的对象(例如,只能分配一次的扩展资源)的装置,这没有意义,因为必须将装置传递给测试才能访问.此外,并非所有测试都需要它。