代码覆盖率实现之路
在频繁快速的迭代过程中,如何有效保证测试覆盖的充分性?是值得思考的问题。
覆盖率是度量完整性的一个手段,目前引入了需求覆盖率,接下来希望可以引进代码覆盖率,通过覆盖率来评估测试是否充分,开发提交的改动是否了解全面,从而更好的进行补充测试,提示上线的信心。
JaCoCo简介
JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant、Maven中
插桩的本质
jacoco介入部署过程的本质,就是插桩。
可以是编译时插桩、也可以是运行时插桩,这就是所谓Offline模式和On-the-fly模式。
两种模式区别
-
On-The-Fly模式优点在于无需修改源代码,可以在系统不停机的情况下,实时收集代码覆盖率信息
-
Offine模式优点在于系统启动不需要额外开启代理,但是只能在系统停机的情况下才能获取代码覆盖率
需要实时收集,所以这里选择On-The-Fly模式。
本质
jacoco的on-the-fly模式的插桩过程,其实就是在测试环境部署的时候,让jacoco的相关工具,介入部署过程,也就是介入class文件的加载,
在加载class的时候,动态改变字节码结构,插入jacoco的探针。
本质:jacoco 以 tcpserver 方式进行插桩的本质,就是如果应用启动过程中,进行了jacoco插桩,且成功了。它会在你当前这个启动服务器中,
在一个端口{$port}上,开启一个tcp服务,这个tcp服务,会一直接收jacoco的执行覆盖率信息并传到这个tcp服务上进行保存。
再通俗将,其实就是介入下面这个命令的启动过程:
java -jar
不同形式的插桩配置
基于公司启动服务的方式,这里只介绍jar包方式启动时的配置
使用jar包方式启动
在 java -jar 启动的时候,加入-