Python 如何统计 Python Web 项目在集成测试阶段的增量代码覆盖率

归云乡 · 2020年01月17日 · 最后由 lise 回复于 2023年07月06日 · 4153 次阅读

背景

  • leader 提了个需求,想要在产品功能迭代时,测试通过的时候可以附带一份这个功能的增量代码覆盖率报告,以此来衡量测试是否充分

为什么给我来做

  • 之前是做 Java 的,接触过覆盖率,也尝试过统计集成测试阶段的代码覆盖率
  • 之前的情况是:
    • Java 项目打成 jar 包,在启动时,使用 JaCoCo 的 On-The-Fly 模式,添加代理,比如java -javaagent:/root/jacoco/lib/org.jacoco.agent-0.8.4-runtime.jar=includes=com.hundsun.broker.cic.*,output=tcpserver,port=10004,address=127.0.0.1 –jar /root/test.jar
    • 测试完毕后,dump 出 exec 文件,比如java -jar /root/jacoco/lib/org.jacoco.cli-0.8.4-nodeps.jar dump --address 127.0.0.1 --port 10004 --destfile /root/jacoco.exec
    • 最后生成覆盖率报告文件,比如java -jar org.jacoco.cli-0.8.4-nodeps.jar report jacoco.exec --classfiles /opt/JENKINS_HOME/workspace/TestCenter-UF30-CIC-6-Jacoco/Class/ --sourcefiles /opt/JENKINS_HOME/workspace/TestCenter-UF30-CIC-6-Jacoco/Source/ --html jacoco/html --csv jacoco/jacoco.csv --xml jacoco/jacoco.xml
    • 没有做过增量代码相关的

查找资料

我的疑问

  • 如何获取增量代码,比如开发的分支是从 release 上切出来的,提测的时候怎么能获取到改动的部分,git diff 不知能不能实现
  • 假设获取到了增量代码,上述 coverage.py 能实现这个需求吗,如何在程序运行的时候监控到这部分代码
  • 发此贴主要是想请教一下大家,尤其是做过类似工具的前辈们,能否讲下具体实现的思路和可行性,跪谢 Orz!
共收到 10 条回复 时间 点赞

大概浏览了一遍社区关于代码覆盖率的帖子,90% 都是基于 JaCoCo 做的二次开发,跪了。😭

真的没有大佬做过 Python 项目集成测试阶段增量代码覆盖率相关研究的吗😕

少年 回复

感谢,这个文档我正在看。

coverage + diff_cover 解决不了你的问题?
coverage 生成全量覆盖率报告 xml 文件,

coverage run --source=. manage.py runserver --noreload
coverage xml

然后 diff-cover 是能够生成增量覆盖率

diff-cover coverage.xml --html-report report.html
leaves 回复

感谢,我目前还处于调研阶段,不太确定可行的路径是怎样的,发这个帖子主要是为了咨询一下大家可行的方案,或者做过相关事情的经验等🍻

仅楼主可见

哈喽,请问楼主,这个测试目前您有很好的解决方法吗,现在我这边也在做增量测试,但在使用 coverage 的时候出现了些问题, 1:在 coverage run 项目的时候,无法执行 api 请求,接口不通
2:在启动项目并关闭后,手动执行 report 并生成 html 之后查看执行的行数好像不太对

想请教下具体您这边是怎么解决的这个需求呢

因为目前我这里牵扯到了两个项目,一个是开发的后段项目,一个是 pytest 的自动化用例,本来设计思路是想运行开发项目的时候注入 coverage 参数,然后运行用例,,之后在收集生成 html ,不知道思路是不是正确

我也是通过 coverage run 无法执行 api 请求,请问大佬们有什么解决方法了吗?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册