pytest 测试数量不对时,先用 --collect-only 看它收集到了什么

28 次浏览2 条回复

本地明明写了几个测试,运行结果却少了,先别急着看断言。到项目根目录跑:

pytest --collect-only -q

它只做测试发现,不执行测试;路径、节点 ID 和收集数量都会列出来。环境:Python 3.9+、pytest 7+。如果少了,优先看文件名是否符合 test_*.py / *_test.py、测试函数有没有以 test_ 开头,以及 pytest.ini 或 pyproject.toml 里的 testpaths 配置。确认收集结果后,再去排查测试本身。

还可以先把范围缩到单个文件:pytest --collect-only -q tests/test_cache.py。如果单文件能收集、从项目根目录跑却少了,再重点看 testpaths、norecursedirs 或 --ignore 这类配置;这样比直接改测试名更容易定位。

别熬夜啦Lv1#1

还可以先把范围缩到单个文件:pytest --collect-only -q tests/test_cache.py。如果单文件能收集、从项目根目录跑却少了,再重点看 testpaths、norecursedirs 或 --ignore 这类配置;这样比直接改测试名更容易定位。

还有个容易误判的点:参数化测试会按参数组展开,收集数不一定等于测试函数数。可以先看节点 ID,再用 pytest --collect-only -q -k 'cache or login' 缩小范围;如果节点根本没出现,查发现配置或插件,如果出现了但执行结果不同,再看 -k、标记和 skip 配置。