代码覆盖率平台小结

1、平台架构

覆盖率平台架构设计

2、流程

服务插桩及部署

Go为编译时插桩,采用goc的开源方案https://github.com/qiniu/goc,goc底层是基于go原生工具go tool cover来实现插桩,在此基础上封装了agent服务,运行在单独的协程中,实现不停服采集覆盖率数据,同时还有一套注册中心服务管理多个agent,适合于分布式服务场景下的测试覆盖率采集。

Go插桩原理说明

Java 为启动时插桩,采用原生的jacoco方案https://zhuanlan.zhihu.com/p/410955562,修改class字节码达到插桩目的,jacocoagent采集上报,注意依赖的jacocoagent.jar包需要提前打包到所部署的服务器中。


Java插桩原理

2. 覆盖率数据采集与报告生成

Go和Java分别通过goc和jacoco工具指令来采集覆盖率,并通过辅助工具将采集到的覆盖率数据转换为便于分析的xml格式。java生成report的时候,除源码外还需要提供编译产物的classfile。

3. 覆盖率数据合并与报告生成

每次采集数据生成原始报告后,会依据代码仓库的commitid来存储报告数据,同一个commid的数据会做合并。最终根据用户界面上指定的报告配置,合并多个commid的数据生成summary报告

增量覆盖率是依据git diff的结果找出增量行,基线版本由用户指定,然后结合已计算出的全量覆盖率报告数据,就可以得到增量覆盖率。

增量覆盖率计算逻辑示意图

4. 后记

基于代码版本覆盖率数据合并的方法,在与标准流水线打通后,还可实现功能测试和自动化覆盖率报告的分别生成,具体方法和流程下回分析。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容