布景
转转增量代码扫描数据作为上线准入的重要依据,现在一切测验环境履行的测验均有覆盖率计算,但是部分需求或服务愈加适合使用单测进行验证,也有部分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),更多干货实践,欢迎沟通共享~