pytest未找到测试用例的根本原因是命名和路径问题:文件名须为test_.py或_test.py,函数名须以test_开头,且需清除缓存、确保__init__.py存在。

collected 0 items 不是报错,而是 pytest 根本没找到任何可执行的测试用例。它只说明发现流程失败,问题几乎全出在“命名”和“路径”这两个地方。
test_*.py 文件名不合规
pytest 默认只扫描 test_*.py 或 *_test.py 这两类文件。如果你的文件叫 test.py、main.py、demo.py 或 TestCalc.py,它直接跳过,连内容都不看。
- ✅ 正确命名:
test_calculator.py、api_test.py - ❌ 错误命名:
test.py(和 pytest 自身模块名冲突)、calculator.py、TestCalculator.py - ⚠️ 特别注意:
test.py是高频雷区——PyCharm 新建 Python 文件时默认名就是它,一保存就踩坑
测试函数或方法没加 test_ 前缀
即使文件名对了,函数/方法名也必须以 test_ 开头,且不能带额外修饰(比如 _test_add、test_add_v2 可以,但 add_test、check_add、TEST_ADD 都不行)。
- ✅ 有效函数:
def test_add():、def test_parse_json(): - ❌ 无效函数:
def add_test():、def run_test():、def TestAdd(): - ⚠️ 类里方法同理:类名必须是
TestXxx,方法名仍要test_开头;class CalculatorTest:不被识别(缺Test开头)
文件移动或重命名后 pytest 缓存未更新
PyCharm 或 pytest 本地缓存(如 .pytest_cache、__pycache__)有时会记住旧文件路径或元数据。你把 old_test.py 改成 test_math.py 后,pytest 可能还在找旧名字。
- 删掉项目根目录下的
.pytest_cache和所有__pycache__目录 - 重启 PyCharm(尤其当你在 IDE 里右键 Run 'pytest' 时)
- 最稳妥做法:新建一个
test_xxx.py,把代码复制进去,删掉旧文件
子目录里缺 __init__.py 或 pytest.ini 配置覆盖默认规则
如果你把测试放在 tests/unit/ 这类子目录下,而该目录没有 __init__.py,pytest 可能因路径解析失败而跳过整个目录。
- 确保每个含测试文件的目录都有空的
__init__.py(哪怕只是个空文件) - 检查项目根目录是否有
pytest.ini,里面若写了python_files = *.py,就会禁用默认的test_*.py规则——这是人为关掉了发现开关 - 临时验证:运行
pytest --collect-only,它会列出所有被发现的测试项,一眼看出哪层漏了
test.py 就跑。这两处动手前多看一眼,比查半天文档快得多。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











