3

我有一个位于 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 中的夹具应用到内部文件夹中的测试脚本并在公共文件夹测试脚本中忽略它?

4

3 回答 3

3

一种可能的解决方案是,您不想更改文件夹的结构,即使用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
于 2020-07-07T20:46:49.550 回答
2

您可以通过将文件夹“第一个文件夹”和“第二个文件夹”移动到一个新文件夹并在该新文件夹中有一个 conftest.py 文件来实现此目的。像这样 -

tests
 |
 |--new folder
 |  |--first_folder
 |  |  |--__init__.py
 |  |  |--test_first_1.py
 |  |  |--test_first_2.py
 |  |
 |  |--second_folder
 |  |  |--__init__.py
 |  |  |--test_second_1.py
 |  |--conftest.py
 |
 |--__init__.py   
 |--conftest.py
 |--test_common_1.py
于 2020-07-07T17:50:50.073 回答
-1

@lmiuelvargasf回答(+1)为我指明了正确的方向,并使用request我解决了以下问题:

@pytest.fixture(scope='module', autouse=True)
def my_fixture(request):
    if request.config.invocation_dir.basename != 'tests':
        """
        Some useful code
        """

此夹具仅适用于内部文件夹中的测试脚本,因为调用文件夹名称不等于“测试”

于 2020-07-09T08:36:18.850 回答