首页 > 解决方案 > 如何仅将 conftest.py 中的夹具应用到内部文件夹

问题描述

我有一个位于 conftest.py 中的夹具。

@pytest.fixture(scope='module', autouse=True) 
def my_fixture():
    """
    Some useful code
    """

结构如下:

tests
 |
 |--first_folder
 |   |--__init__.py
 |   |--test_first_1.py
 |   |--test_first_2.py
 |   
 |--second_folder
 |   |--__init__.py
 |   |--test_second_1.py
 |
 |--__init__.py   
 |--conftest.py
 |--test_common_1.py

我希望该夹具仅在内部文件夹测试脚本中自动使用:在test_first_1.pytest_first_2.pytest_second_1.py中,但不在 test_common_1.py中。

我可以在每个内部文件夹中使用该夹具创建 conftest,但我不想复制代码

有什么方法可以将 conftest 中的夹具应用到内部文件夹中的测试脚本并在公共文件夹测试脚本中忽略它?

标签: pythonpytestconftest

解决方案


一种可能的解决方案是,您不想更改文件夹的结构,即使用request夹具中的对象来检查测试中使用的标记,因此如果设置了特定标记,则可以执行任何操作:

@pytest.fixture(scope='module', autouse=True) 
def my_fixture(request):
    """
    Some useful code
    """
    if 'noautofixt' in request.keywords:
        return
    # more code

然后将您的测试标记如下:

@pytest.mark.noautofixt
def test_no_running_my_fixture():
    pass

推荐阅读