使用pyproject.toml配置时Pytest无法识别指定子路径的测试用例
pytest无法通过文件名直接运行子目录测试的问题解决
问题原因
pyproject.toml中仅配置了testpaths,该参数仅用于全局运行pytest时的测试发现,但未将这些子目录添加到Python的模块搜索路径(sys.path)中。当你单独指定文件名运行时,pytest无法在默认搜索路径中定位到目标文件,只能依赖绝对路径。- 测试目录包含连字符(如
Google-Calendar),虽然不影响全局测试发现,但Python默认不会将这类带特殊字符的目录视为可导入模块,进一步加剧了直接指定文件名时的路径解析问题。
解决方案
1. 修正pyproject.toml配置
在tool.pytest.ini_options中同时配置testpaths和pythonpath,将测试子目录加入Python搜索路径:
[tool.pytest.ini_options] testpaths = ["tests/Google-Calendar", "tests/Reclaim", "tests/Todoist"] pythonpath = ["tests/Google-Calendar", "tests/Reclaim", "tests/Todoist"]
或者更高效的方式,直接将父目录tests加入搜索路径,覆盖所有子目录:
[tool.pytest.ini_options] testpaths = ["tests/Google-Calendar", "tests/Reclaim", "tests/Todoist"] pythonpath = ["tests"]
2. 使用相对路径运行测试
如果不想修改配置,可直接通过相对路径指定测试文件:
pytest tests/Google-Calendar/test_calendar_api.py
3. 可选:调整目录命名(符合Python规范)
将带连字符的目录改为下划线命名(如Google_Calendar),适配Python模块命名规则,后续还可通过模块方式运行测试:
pytest tests.google_calendar.test_calendar_api
内容的提问来源于stack exchange,提问作者edge selcuk
相关产品推荐
相关产品推荐

