Jacoco自动化代码覆盖率

介绍

JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant、Maven中;可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序等等。官网(Jacoco)[https://www.eclemma.org/jacoco/]

覆盖率计数器

1. 行覆盖
2. 类覆盖
3. 方法覆盖
4. 分支覆盖
5. 指令覆盖
6. 圈复杂度

原理

Jacoco使用插桩的方式来记录覆盖率数据。
插桩模式有两种:

1. on-the-fly模式

JVM通过 -javaagent参数指定jar文件启动代理程序,代理程序在ClassLoader装载一个class前判断是否修改class文件,并将探针插入class文件,探针不改变原有方法的行为,只是记录是否已经执行。

2. offline模式

在测试之前先对文件进行插桩,生成插过桩的class或jar包,测试插过桩的class和jar包,生成覆盖率信息到文件,最后统一处理,生成报告。

集成Maven

下载配置JDK,Maven,Jacoco

Manven配置(Maven Plug-in)[https://www.eclemma.org/jacoco/trunk/doc/maven.html]

用下载的Jacoco的example里的例子演示

1
2
3
4
5
6
7
8
9
C:\Test\Jacoco>mvn install
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------< org.jacoco:org.jacoco.examples.maven >----------------
[INFO] Building JaCoCo Maven plug-in example 0.8.6
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- jacoco-maven-plugin:0.8.6:prepare-agent (default-prepare-agent) @ org.jacoco.examples.maven ---
[INFO] argLine set to -

Maven构建成功之后,生成代码覆盖报告(\target\site\jacoco)

集成Git和Jenkins

  1. 把example上传到Github上

  2. 配置Jenkins,回传报告

  3. 配置Jacoco Coverage Report

  4. Coverage Trend

唐胡璐 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
分享创造价值,您的支持将鼓励我继续前行!