模块级夹具不是 运行
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 固定装置,这是最常用的选项。
对于生成在测试中访问的对象(例如,只能分配一次的扩展资源)的装置,这没有意义,因为必须将装置传递给测试才能访问.此外,并非所有测试都需要它。
我想为其中一个测试模块安装一个特定的 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 固定装置,这是最常用的选项。
对于生成在测试中访问的对象(例如,只能分配一次的扩展资源)的装置,这没有意义,因为必须将装置传递给测试才能访问.此外,并非所有测试都需要它。