使用coverage.py统计含subprocess调用的多测试用例合并覆盖率问题
解决方案
- 第一步:先清理历史覆盖率数据,避免旧数据干扰
执行命令:coverage erase - 第二步:修改for循环内的subprocess调用语句,每次执行时添加
--append参数,让新的覆盖率数据追加到同一个数据文件中,不会覆盖之前的统计结果:
把原有调用语句subprocess.call(["coverage", "project.py"])修改为subprocess.call(["coverage", "run", "--append", "project.py"])
注意不要遗漏run子命令,否则会触发语法报错。 - 第三步:8条测试用例全部执行完成后,执行命令生成合并覆盖率报告:
- 如需在控制台直接查看报告:执行
coverage report - 如需生成可视化HTML报告:执行
coverage html,生成后打开项目下的htmlcov/index.html即可查看全用例合并后的完整覆盖率统计。
- 如需在控制台直接查看报告:执行
可选简化配置
如果不想每次调用都加--append参数,可以在项目根目录新建.coveragerc配置文件,写入如下内容:
[run] append = True
后续执行coverage run project.py时会默认开启追加模式,无需额外携带参数。
补充说明
你当前是for循环串行执行测试用例,用上述追加方案即可满足需求。如果后续调整为并行执行多条测试用例,则需要在每次执行coverage run时添加--parallel-mode参数,所有用例执行完成后先执行coverage combine合并多份并行生成的覆盖率数据,再执行报告生成命令即可。
内容的提问来源于stack exchange,提问作者Hamid Sayeed
相关产品推荐
相关产品推荐

