pytest --cov提示已导入模块未导入 如何统计指定文件覆盖率
pytest覆盖率统计问题解答
现有命令问题说明
你使用的pytest --cov MakeInfo.py命令逻辑符合需求,触发模块未导入告警一般是三类常见原因:
- 命令中给
--cov传参带了.py后缀,部分场景下Coverage.py会无法匹配到对应模块,优先推荐传模块名而非带后缀的文件名 - 执行pytest的工作目录不在MakeInfo.py所在路径,或者MakeInfo.py所在目录未加入PYTHONPATH,导致导入的模块和目标文件不匹配
- 测试用例通过subprocess等方式直接执行MakeInfo.py命令行,而非导入模块调用内部方法,默认配置下覆盖率采集无法追踪到子进程的执行逻辑
仅统计指定文件覆盖率的实现方案
你可以直接通过调整命令或新增配置的方式,完全忽略其他无关文件,仅统计test_MakeInfo.py用例对MakeInfo.py的覆盖率:
方案1:直接调整运行命令(单次运行推荐)
执行以下命令即可:
pytest test_MakeInfo.py --cov=MakeInfo --cov-report=term
- 命令开头指定仅运行
test_MakeInfo.py的测试用例,不会触发其他无关测试 --cov=MakeInfo直接指定模块名,Coverage.py会自动匹配对应源文件,仅统计该文件的覆盖率数据
如果要明确指定文件路径,可以改成--cov=./MakeInfo.py,保证路径和当前工作目录匹配即可。
方案2:新增配置文件固定规则(长期使用推荐)
在项目根目录新建.coveragerc文件,写入以下配置:
[run] source = MakeInfo.py omit = */test_*.py */__init__.py # 若测试用例会通过子进程调用MakeInfo.py,取消下面两行的注释 # parallel = True # concurrency = multiprocessing [report] show_missing = True
之后只需执行pytest test_MakeInfo.py --cov,就会自动按配置规则仅统计MakeInfo.py的覆盖率,自动过滤所有无关文件数据。
注意:如果配置后仍然提示无覆盖率数据,先执行
python -c "import MakeInfo; print(MakeInfo.__file__)"确认导入的模块路径是否和你要统计的MakeInfo.py路径一致。
内容的提问来源于stack exchange,提问作者Greg Dougherty
相关产品推荐
相关产品推荐

