女装市场网站建设费用评估,城市门户网站策划书,搜索关键词的网站,东莞个人网站推广建设默认情况下#xff0c;pytest 使用pytest.Package来收集包含 __init__.py 文件的目录#xff0c;使用 pytest.Dir来收集其他目录。如果你想要自定义目录的收集方式#xff0c;你可以编写自己的pytest.Directory 收集器#xff0c;并使用 pytest_collect_directory钩子来连接…默认情况下pytest 使用pytest.Package来收集包含 __init__.py 文件的目录使用 pytest.Dir来收集其他目录。如果你想要自定义目录的收集方式你可以编写自己的pytest.Directory 收集器并使用 pytest_collect_directory钩子来连接它。
对于目录清单文件的一个基本示例
假设你想要自定义每个目录的收集方式。以下是一个conftest.py插件的示例它允许目录包含一个manifest.json文件该文件定义了该目录的收集方式。在这个示例中仅支持一个简单的文件列表但你可以想象添加其他键如排除项和通配符。
from __future__ import annotations import json import pytest class ManifestDirectory(pytest.Directory): def collect(self): # pytest的标准行为是遍历所有test_*.py文件并对每个文件调用pytest_collect_file。 # 这个收集器改为读取manifest.json文件并且仅对其中定义的文件调用pytest_collect_file。 manifest_path self.path / manifest.json manifest json.loads(manifest_path.read_text(encodingutf-8)) ihook self.ihook for file in manifest[files]: yield from ihook.pytest_collect_file( file_pathself.path / file, parentself ) pytest.hookimpl
def pytest_collect_directory(path, parent): # 对于包含manifest.json文件的目录使用我们的自定义收集器。 if path.joinpath(manifest.json).is_file(): return ManifestDirectory.from_parent(parentparent, pathpath) # 否则回退到标准行为。 return None
你可以创建一个 manifest.json 文件和一些测试文件
{files: [test_first.py,test_second.py]
}
# content of test_first.py
from __future__ import annotationsdef test_1():pass
# content of test_second.py
from __future__ import annotationsdef test_2():pass
# content of test_third.py
from __future__ import annotationsdef test_3():pass
现在你可以执行测试规范了:
customdirectory $ pytesttest session starts
platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y
rootdir: /home/sweet/project/customdirectory
configfile: pytest.ini
collected 2 itemstests/test_first.py . [ 50%]
tests/test_second.py . [100%] 2 passed in 0.12s
请注意test_three.py 没有被执行因为它没有在清单中列出。
你可以验证你的自定义收集器是否出现在收集树中
customdirectory $ pytest --collect-onlytest session starts
platform linux -- Python 3.x.y, pytest-8.x.y, pluggy-1.x.y
rootdir: /home/sweet/project/customdirectory
configfile: pytest.ini
collected 2 itemsDir customdirectoryManifestDirectory testsModule test_first.pyFunction test_1Module test_second.pyFunction test_2 2 tests collected in 0.12s