如何仅将 conftest.py 中的夹具应用到内部文件夹
How to apply fixture from conftest.py to inner folders only
我有一个固定装置位于 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.py、test_first_2.py, test_second_1.py, 但不在 test_common_1.py.
我可以在每个内部文件夹中使用该夹具创建 conftest,但我不想复制代码
有没有什么方法可以将 conftest 中的 fixture 应用于内部文件夹中的测试脚本,并在公共文件夹测试脚本中忽略它?
您可以通过将文件夹 'first folder' 和 'second folder' 移动到新文件夹并在该新文件夹中有一个 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
一个可能的解决方案,如果你不想改变你的文件夹的结构,你可以在你的夹具中使用 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
@lmiguelvargasf (+1) 指出了正确的方向并使用 request
我解决了如下问题:
@pytest.fixture(scope='module', autouse=True)
def my_fixture(request):
if request.config.invocation_dir.basename != 'tests':
"""
Some useful code
"""
由于 调用文件夹名称不等于 'tests'
,因此此固定装置将仅应用于内部文件夹中的测试脚本
我有一个固定装置位于 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.py、test_first_2.py, test_second_1.py, 但不在 test_common_1.py.
我可以在每个内部文件夹中使用该夹具创建 conftest,但我不想复制代码
有没有什么方法可以将 conftest 中的 fixture 应用于内部文件夹中的测试脚本,并在公共文件夹测试脚本中忽略它?
您可以通过将文件夹 'first folder' 和 'second folder' 移动到新文件夹并在该新文件夹中有一个 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
一个可能的解决方案,如果你不想改变你的文件夹的结构,你可以在你的夹具中使用 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
@lmiguelvargasf request
我解决了如下问题:
@pytest.fixture(scope='module', autouse=True)
def my_fixture(request):
if request.config.invocation_dir.basename != 'tests':
"""
Some useful code
"""
由于 调用文件夹名称不等于 'tests'
,因此此固定装置将仅应用于内部文件夹中的测试脚本