单元测试增量代码覆盖率统计方案

作者|陈俊华、刘琳琳

背景

转转增量代码扫描数据作为上线准入的重要依据,目前所有测试环境执行的测试均有覆盖率统计,但是部分需求或服务更加适合使用单测进行验证,也有部分RD有单测的好习惯。单测覆盖率的缺失无法通过覆盖率分析补充case也对上线准入评估造成了一定的困扰。因此,我们将单测的增量代码覆盖率融合至测试环境覆盖率中,解决以上问题。

整体方案

用例平台

1、持续集成平台将工程名称,分支名称,git地址信息传给单测平台,平台根据这些信息下载源码

2、更改源码里的pom.xml 文件。引用插件maven-surefire-report-plugin

插件的特点:

  • 能把生成的xml报告转换成html

  • 能指定哪些测试类需要被执行,哪些测试类不被执行

  • 能兼容JUnit 3、JUnit 4以及TestNG

  • 在默认情况下,我们无法在在某一个生命周期去调用它,因为并不是所有的用户每次构建软件的时候都会需要html格式

结果:

打开surefire-report.htm  可以查看执行case数量,执行通过率,执行失败的具体方法以及失败原因。

3、用jacoco生成单元测试覆盖率

在执行mvn命令时,加上“org.jacoco:jacoco-maven-plugin:prepare-agent”参数即可。

其中,jacoco-maven-plugin后面跟的是jacoco的版本;【-Dmaven.test.failure.ignore=true】建议加上,否则如果单元测试失败,就会直接中断,不会产生.exec文件。

执行以上命令后,会在当前目录下的target目录产生一个jacoco.exec文件,该文件就是覆盖率的文件:

4、生成的jacoco.exec文件传给覆盖率统计系统。

覆盖率平台

1、增加覆盖率统计任务

用例平台收到执行单测任务时,会调用覆盖率平台创建覆盖率任务接口,将源码地址,jar包的ftp地址, 以及代码分支等数据传递给覆盖率平台,覆盖率平台建立覆盖率任务并做一些提前准备工作:下载源 码、jar包以及进行codediff,并将diff结果存到数据库。 

2、统计覆盖率

回顾一下之前 on-the-fly方式的差异代码覆盖率方案,代码执行轨迹是当测试人员点击覆盖率按钮时,实时从测试服务器上获取的。 

从图中可以看到,如果我们把测试服务器的部分任务由用例平台来完成,就可以在基本上不变动代码的情况下完成单测增量代码覆盖率的统计。

主要逻辑:

  • 将编译id作为虚拟ip

  • 获取代码执行轨迹时,判断如果是单测则从用例管理平台获取,不是则从测试机上获取

至此,整个流程结束。各位读者大佬,如果有好的解决方案和建议欢迎留言讨论。

end


原文地址:https://www.cnblogs.com/finer/p/14939776.html