pytest-cov生成覆盖率报告无数据、代码覆盖率为0问题排查
问题根因
你的项目采用标准Python src 目录布局,出现0覆盖率、无数据收集警告的核心原因是:Coverage工具追踪的代码路径,和测试运行时实际导入加载的代码路径不匹配,属于包导入路径配置错误,和pytest-cov工具本身逻辑无关。
排查解决步骤
- 先验证导入路径是否正确
在项目根目录(即最外层CorGE文件夹所在路径)启动Python解释器,执行以下代码确认导入来源:
如果输出路径不是你本地项目下import CorGE print(CorGE.__file__)src/CorGE/__init__.py的绝对路径,说明Python加载的不是你当前开发的源码,Coverage自然无法采集执行数据。 - 修复导入路径问题
永久修复方案:在项目根目录执行以下命令,以可编辑模式安装本地包:
该命令会将本地pip install -e .src下的CorGE包链接到当前Python环境的包目录,后续所有import CorGE都会准确加载本地开发的源码,不会出现路径错位。
临时验证方案:如果暂时不想写打包配置文件(pyproject.toml/setup.py),可以在执行测试时手动将src目录加入Python搜索路径:PYTHONPATH=./src pytest tests/ --cov=CorGE - 修正命令参数
你之前执行的命令存在路径参数错误:- 第一条命令
--cov CorGE/指向的是外层项目目录,而非实际的Python包,--cov参数直接传包名CorGE即可,不需要带目录斜杠前缀 - 第二条命令
--source=CorGE/src/CorGE传入的是相对路径,Coverage无法匹配运行时加载的模块绝对路径,同样改为包名即可
导入路径修复后,在项目根目录执行以下命令即可生成正确的覆盖率报告:
pytest tests/ --cov=CorGE - 第一条命令
额外问题提示
你提供的测试代码存在断言逻辑错误:os.listdir().sort()的返回值是None,直接用assertEqual比较两个None会永远通过,无法实际校验文件名列表是否符合预期,需要改为sorted(os.listdir(目标路径))再做比较。
内容的提问来源于stack exchange,提问作者Ulthran
相关产品推荐
相关产品推荐

