如何配置pytest仅收集特定命名格式的Python测试文件?
解决Pytest测试文件收集问题的可行方案
1. 修正pyproject.toml的配置位置
之前配置没生效大概率是没放在正确的区块里,pytest只识别[tool.pytest.ini_options]下的配置项,正确写法如下:
[tool.pytest.ini_options] python_files = ["test_*.py", "*_test.py"]
不要把配置随便放在文件根节点,否则pytest会忽略这些设置。
2. 换用pytest.ini或setup.cfg配置文件
如果pyproject.toml依旧不生效,直接用更稳定的传统配置文件:
- 新建
pytest.ini文件,内容:
[pytest] python_files = test_*.py *_test.py
- 或者创建
setup.cfg文件,内容:
[tool:pytest] python_files = test_*.py *_test.py
这两类文件的识别优先级更高,很少出现配置不生效的情况。
3. 命令行直接指定匹配规则
不想修改配置文件的话,执行命令时直接通过参数指定测试文件规则:
pytest . --python-files="test_*.py" --python-files="*_test.py"
这种方式适合临时验证规则,也可以直接写在CI脚本里。
4. 兜底方案:排除非测试文件
如果以上方法都无效,直接在配置里排除源码文件。比如你的源码文件是src_*.py或特定命名,可这么配置:
- 用
pyproject.toml:
[tool.pytest.ini_options] python_files = ["test_*.py", "*_test.py"] addopts = --ignore=src_*.py --ignore=utils.py
- 用
pytest.ini:
[pytest] python_files = test_*.py *_test.py ignore = src_*.py core.py */__pycache__/
把不需要收集的文件或目录都列在排除规则里即可。
5. 检查测试文件命名是否合规
最后确认测试文件的命名严格符合规则:有没有把test_*.py写成tests_*.py(多了个s),或者后缀不是.py的情况,pytest只会严格匹配你指定的文件名规则。
内容的提问来源于stack exchange,提问作者The Nerdly Gentleman
相关产品推荐
相关产品推荐

