测试覆盖率 Jacoco 收集增量覆盖率过程中, 组件版本更新的问题

MrTuzki · 2019年12月11日 · 最后由 树叶小记 回复于 2020年03月06日 · 3793 次阅读

最近在学习使用 Jacoco 收集增量覆盖率, 主要用于统计一个迭代内手工测试的覆盖率数据;

现在遇到一个问题, 是在收集增量覆盖率过程中, 如果组件版本更新了, 收集的增量覆盖率数据会出问题:

比如:

  1. 在一个迭代内, 开发新增加了 2 个类: class1, class2, 基于该版本的代码打包出了版本 1, 测试基于版本 1开始测试, 此时得到的增量覆盖率数据为 A(class1, class2都有覆盖率数据);

  2. 开发因为某些原因 (修改 BUG), 修改了class1, 基于该版本的代码打包出了版本 2, 发布到测试环境中后, 测试基于版本 2测试, 在测试开始测试前, 使用 Jacoco 生成增量覆盖率报告, 发现class1的覆盖率为 0(相当于 class1 完全未进过测试), 未修改过的class2的覆盖率数据仍然存在;

现在就产生了一个问题: *每次代码变更之后, 整个类的所有功能都必须要重测. *

假如版本 2class1只改动了某一个方法, 且测试已经在版本 1中已经测试覆盖了其它方法的情况下, 基于版本 2生成的覆盖率报告中如果其它方法没有重新测过的话, 覆盖率数据为空;

请教大家:

  1. 能不到该基于版本 2生成增量覆盖率报告数据的时候, 包含版本 1中已经测过的内容?

  2. 在收集增量覆盖率的过程中, 如果因为修改 BUG 等原因组件版本更新的情况, 大家是怎么处理的?

共收到 9 条回复 时间 点赞

多个 exec 可以合并生成报告的

花开 回复

谢谢回答, 再请问下如何操作: 是将多个 exec 先合并再生成报告; 还是先根据各自的 exec 文件出报告, 然后再把报告合并?

MrTuzki 回复

自己会合并的,使用多个 exec 生成报告即可

Java code coverage with Jacoco. Merge exec files collected from different application versions

从网上搜索了一篇文章, 不同版本之间的 exec 文件合并之后, 对于那些修改过的class , 覆盖率就是重新计算的.

如果在一个类中包含多个方法的话, 在只修改了一个方法的情况, 整个类都必须被重新测试, 感觉不是太合理.

我这边的做法是:每次编译部署前都生成一份当前环境的覆盖率报告,需要总覆盖率报告时,以最后版本的覆盖率为基准,合并前面所有覆盖率报告数据,其实就是 html 的解析和样式的合并

独缺 回复

谢谢回答, 请问, 在解析 html 报告时, 是精确到行粒度吗?

以最后一份报告为基准, 检查之前的报告, 在行号且行内容完全一致的情况下, 才能合并是这样吗? 如果有行号有变动的话, 怎么判别两行代码是同一行呢?

MrTuzki 回复

我记得好像是两个 html 文档 diff 了一下,然后根据变化(+-?)来进行合并,是精确到行的

楼主你好,请问你这个问题现在解决了吗,我也遇到了类似的问题,一直在寻到解决方法未果😂

MrTuzki 回复

其实基于这个可以再细化一次, 根据源代码 diff ,计算出需要被重置的 方法。其余保留。所有数据都以方法为维度计算。

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