【问题标题】:Module level fixture is not running模块级夹具未运行
【发布时间】:2020-10-05 18:52:01
【问题描述】:

我想为其中一个测试模块提供特定的设置/拆卸夹具。显然,我希望它在模块中的所有测试之前运行一次设置代码,并在所有测试完成后运行一次。

所以,我想出了这个:

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 级别夹具,它不应该自动运行吗?

【问题讨论】:

  • 如果您希望它自动使用,请将autouse=True 添加到灯具中。
  • @MrBeanBremen 请添加为答案,不接受

标签: python pytest fixtures


【解决方案1】:

模块范围的固定装置的行为与任何其他范围的固定装置相同 - 只有在测试中明确通过、使用 @pytest.mark.usefixtures 标记或设置了 autouse=True 时才会使用它们:

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

对于在您的示例中执行设置/拆卸的模块和会话范围的固定装置,这是最常用的选项。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-07
    • 2013-05-11
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多