精准测试系列《一》

2022-07-04 20:50:05 浏览数 (1)

这是无量测试之道的第200篇原创

在实际的软件生产交付过程中,我们通过单元测试、接口测试、功能测试、自动化测试等手段来保障软件质量;但是无论使用哪种测试手段,case 设计是否全面、精简,显得尤为重要。在实际的项目测试过程中,case 的设计也会经常出现以下问题:

  1. 开发同学写了大量单元测试,有的公司可能做得很少的单元测试,一直重复执行一段代码逻辑,少数场景或异常代码逻辑并未执行到;
  2. 测试同学在设计的测试用例时经过多方的case 评审仍有可能存在未覆盖到的异常场景,出现漏测情况;
  3. 接口自动化测试case 的实施作为日常回归手段,也无法做到确定是否覆盖所有代码逻辑,其可靠性无法评估。
  4. 那么问题出现了我们就要想办法去解决,今天我们将围绕 SuperJacoco 代码覆盖率这个工具的使用环境上开始入手。
一、什么是 SuperJacoco 工具?

以下这些概念定义大家在网上都很容易搜索得到,此处只是复述出来,为了保证大家有一个整体的理论认识。 说 SuperJacoco 之前,我先来说一下什么是 Jacoco,Jacoco 是一个开源的代码覆盖率工具,可以嵌入到Ant 、Maven 中,并提供了 EclEmma Eclipse 插件,也可以使用JavaAgent 技术监控 Java 程序。很多第三方的工具提供了对 Jacoco 的集成,如 sonar、Jenkins等。

SuperJacoco 是基于 Jacoco、git 二次开发打造的一站式 JAVA 代码全量 diff 覆盖率收集平台,能够低成本、无侵入的收集代码覆盖率数据;Super-Jacoco 除了支持 JVM 运行时间段的覆盖率收集外;还能够和环境无缝对接,收集服务端自定义时间段代码全量/增量覆盖率;并提供可视化的 html 覆盖率报表,协助覆盖率分析,支撑精准测试落地。此工具的代码大家可以在 git 上直接下载。

二、它是否能解决上面的问题?
  1. 我们从 SuperJacoco 的定义上来就可以看得出来它能够解决上面我们提到的哪些问题。如:全量/增量代码覆盖率的统计,我本人主要是通过 SuperJacoco 启动后提供的接口来验证了它的增量代码覆盖率的验证,体验还是非常不错的。
  2. 它提供了可视化的 html 覆盖率报表,这个报表实际上返回的一个 SuperJacoco 服务的一个静态 Html 链接,根据接口调用来获取的。
  3. SuperJacoco 这个工具还实现了一些自动化的功能,例如:如何去获取 jacoco.exec 二进制的探针文件,因为这个文件是用来统计代码执行覆盖率的。在这里再多说一点,这个exec 文件具体包含的内容是针对源码进行了插桩生成的exec 文件,它有三部分组成,classID,class,pro(探针数组)。

总结:

有了增量代码的统计情况,加上二进制 jacoco.exec 的探针文件,再加上获取到的覆盖率报告我们就可以知道增量变更的代码执行覆盖率情况了,这样就可以知道我们的测试是否精准执行,保障了测试 case 的覆盖情况,从而使得我们可以做到精准测试。

备注:目前发现还存在一些未能解决的问题,例如: 1、对于在被测服务器上,被测试应用被重启或其他原因导致失效后,之前统计的覆盖率数据不能够合并到在下次的覆盖率统计范围内。

2、在将上个版本的覆盖率数据 merge 到当前覆盖率数据的版本时,如果两个版本的代码不一致时,这个 exec 文件只会包含有当前版本的覆盖率数据。

end

0 人点赞