单测增量代码覆盖率统计方案
背景
转转增量代码扫描数据作为上线准入的重要依据,目前所有测试环境执行的测试均有覆盖率统计,但是部分需求或服务更加适合使用单测进行验证,也有部分 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
获取代码执行轨迹时,判断如果是单测则从用例管理平台获取,不是则从测试机上获取
至此,整个流程结束。各位读者大佬,如果有好的解决方案和建议欢迎留言讨论。
作者:陈俊华
转转研发中心及业界小伙伴们的技术学习交流平台,定期分享一线的实战经验及业界前沿的技术话题。
关注公众号「转转技术」(综合性)、「大转转 FE」(专注于 FE)、「转转 QA」(专注于 QA),更多干货实践,欢迎交流分享~
版权声明: 本文为 InfoQ 作者【转转技术团队】的原创文章。
原文链接:【http://xie.infoq.cn/article/6d798b07033b525b1cfd4fad4】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论