桔妹导读:Super-Jacoco是基于Jacoco、git二次开发打造的一站式JAVA代码全量/diff覆盖率收集平台,能够低成本、无侵入的收集代码覆盖率数据;Super-Jacoco除了支持JVM运行时间段的覆盖率收集外,还能够和环境无缝对接,收集服务端自定义时间段代码全量/增量覆盖率;并提供可视化的html覆盖率报表,协助覆盖率分析,支撑精准测试落地。
在软件生产交付过程中,我们通过单元测试、接口测试、功能测试等手段来保障软件质量;无论哪种测试手段,case设计是否全面、精简,显得尤为重要。在实际项目测试过程中,case的设计经常会出现以下问题:
1. 开发同学写了大量单测,一直重复执行一段代码逻辑,少数场景或异常代码逻辑并未执行到;
3. 接口自动化测试case作为日常回归手段,无法确定是否覆盖所有代码逻辑,其可靠性无法评估。
那么,如何才能用最精简的case来保障测试的全面性呢?目前业界比较认可的是手段是通过分析变更代码的覆盖率补充相应的case;我们调研了业界开源的java代码覆盖率统计工具jacoco和EMMA,发现jacoco和EMMA都只支持收集全量代码覆盖率,不能满足精准分析增量代码覆盖程度的诉求。因此,我们亟需一款能够收集变更代码覆盖率的工具。
可视化:提供html格式的覆盖率报告,可读性高。
▍5.2. 编译打包
5.2.1 安装JDK1.8、mavan3;
▍5.3. 部署
▍5.4. 覆盖率收集接口
5.4.1 单测覆盖率接口
1)启动覆盖率收集
URL:/cov/triggerUnitCover
调用方法:POST
参数(body方式传入):{"uuid":"uuid","type":1,"gitUrl":"git@git","subModule":"","baseVersion":"master","nowVersion":"feature","envType":"-Ptest"}
返回:{"code":200,"data":true,"msg":"msg"}
备注:
2)获取覆盖率结果
URL:/cov/getUnitCoverResult
调用方法:GET
参数:uuid(String)
返回:
{"code":200,"data":{"coverStatus":1,"errMsg":"msg","lineCoverage":100.0,"branchCoverage":100.0,"logFile":"file content","reportUrl":"http://"},"msg":"msg"}
备注:
5.4.2 环境覆盖率接口
1)启动覆盖率收集
URL:/cov/triggerEnvCov
调用方法:POST
参数(body方式传入):{"uuid":"uuid","type":1,"gitUrl":"git@git","subModule":"","baseVersion":"master","nowVersion":"feature","address":"127.0.0.1","port":"8088"}
返回:{"code":200,"data":true,"msg":"msg"}
备注:IP和port为模块部署服务器的IP和端口,在dump jacoco.exec时使用,需要提前把org.jacoco.agent-0.8.5-runtime.jar包拷贝到服务器:/home/xxx/目录,服务启动时需要添加启动参数:-javaagent:/home/xxx/org.jacoco.agent-0.8.5-runtime.jar=includes=*,output=tcpserver,address=*,port=18513
2)获取覆盖率结果
URL:/cov/getEnvCoverResult
调用方法:GET
参数:uuid(String)
返回:{"code":200,"data":{"coverStatus":1,"errMsg":"msg","lineCoverage":100.0,"branchCoverage":100.0,"logFile":"file content","reportUrl":"http://"},"msg":"msg"}
备注:
https://github.com/didi/super-jacoco
团队成员皆来自滴滴车服技术团队
内容编辑 | Teeo 联系我们 | DiDiTech@didiglobal.com