如何在给定的test子目录中定义所有测试使用的pytest固定装置?

时间:2020-06-01 15:02:52

标签: python testing pytest fixtures

给出一个目录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)装饰,因此请确保在每个测试之前,都必须运行特定的夹具。特殊的自定义标记也是可行的选择。

1 个答案:

答案 0 :(得分:1)

将您的自动使用夹具放在conftest.py内的subdirYY文件中。

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

如果在conftest.py文件中定义了自动使用的固定装置,则其目录下所有测试模块中的所有测试都将调用固定装置。