【问题标题】:Package-scoped fixtures in pytest 2.3pytest 2.3 中的包范围固定装置
【发布时间】:2012-11-06 21:41:21
【问题描述】:

在最新版本的 pytest 中,很容易创建像这样的函数、类、模块或会话范围的固定装置:

@pytest.fixture(scope="module") 
def db():
     return DB()

这会创建一个固定装置,对于使用它的每个 python 模块,该固定装置只会被调用一次。

但是对于每个 python 包都需要调用一次的固定装置呢? (有了nose,可以使用包的__init__.py中的setUp/tearDown方法来完成)

【问题讨论】:

    标签: python pytest


    【解决方案1】:

    对于包或目录级别的固定装置,您可以使用scope='session' 在您需要的目录中的conftest.py 文件中声明固定装置。一旦包/目录中的第一个测试使用它,夹具将被实例化。这是an example 但是,如果fixture 函数注册了一个终结器,您可能会看到它不是在该目录中的最后一个测试之后直接执行的。我认为可以使 pytest 支持更急切的拆卸或在需要时引入“目录”范围。通常,如果拆解执行得稍晚一点,只要它不会执行得太早,这通常不是什么大问题 :) 还要注意显然 Jason intends to drop package-level setup/teardown support for nose

    无论如何,如果您需要更急切/准确的 pytest 拆解,请随时open an issue

    【讨论】:

    • 我认为基于目录的范围界定是个坏主意,因为一个包可能有多个目录。包级别可能更有意义,但即便如此,我也不确定。
    • 现在在 2018 年,我注意到支持的包范围已添加到夹具中。但是正如您所提到的,如果fixture 函数注册了一个终结器,它不会在该目录中的最后一个测试之后直接执行。这不是包级拆解的预期行为。我认为 Robotframework 以更容易理解的方式实现 setup teardown。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多