【问题标题】:How to define a pytest fixture to be used by all tests within a given tests subdirectory?如何定义给定测试子目录中的所有测试都使用的 pytest 夹具?
【发布时间】:2026-01-01 05:05:01
【问题描述】:

给定一个目录tests,其中包含几个子目录,每个子目录都包含测试模块,如何创建一个pytest 固定装置,以便在仅在特定子目录中找到的每个测试之前运行?

tests
├── __init__.py
├── subdirXX
│   ├── test_module1.py
│   ├── test_module2.py
│   ├── __init__.py
├── subdirYY
│   ├── test_module3.py
│   ├── test_module4.py
│   ├── __init__.py

我希望有一个固定装置,它将在每个测试之前运行,仅在 subdirYY 内的模块中找到(在这种情况下,在模块 test_module3.pytest_module4.py 中)。

我目前有一个固定装置定义了两次,一次在subdirYY 内的每个模块内,它有效但多余:

@pytest.fixture(autouse=True)
def clean_directory():
   ...

如果这无法实现,subdirYY 中的每个测试都使用自定义标记 (@pytest.mark.mycustommark) 进行装饰,因此请确保在每个标记有特定自定义标记的测试之前运行某个固定装置也是一个可行的选择。

【问题讨论】:

    标签: python testing pytest fixtures


    【解决方案1】:

    将您的 autouse 固定装置放在 subdirYY 内的 conftest.py 文件中。

    有关更多信息,请参阅有关 sharing fixtures 的 pytest 文档和 autouse fixtures 上特别提到 conftest.py 的文档:

    如果在 conftest.py 文件中定义了 autouse 夹具,则其目录下所有测试模块中的所有测试都将调用该夹具。

    【讨论】: