Jacoco介绍

 

Jacoco是一个开源的覆盖率工具。Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。

官网地址:http://www.eclemma.org/jacoco/

 

Java Counters

Jacoco包含了多种尺度的覆盖率计数器,包含指令级(Instructions,C0coverage),分支(Branches,C1coverage)、圈复杂度(CyclomaticComplexity)、行(Lines)、方法(non-abstract methods)、类(classes)。

 

java 覆盖率扫描忽略 java覆盖率工具_html

 

如上图所示,标示绿色的为分支覆盖充分标黄色的为部分分支覆盖标红色的为未执行该分支

 

支持的集成工具

Jacoco团队提供了如下的一些集成工具的支持:

Java API

http://www.eclemma.org/jacoco/trunk/doc/api/index.html

Command Line

       http://www.eclemma.org/jacoco/trunk/doc/agent.html

Apache Ant

       http://www.eclemma.org/jacoco/trunk/doc/ant.html

Apache Maven

       http://www.eclemma.org/jacoco/trunk/doc/maven.html

Eclipse EclDmma Plugin

       http://www.eclemma.org/

 

下面介绍使用ant工具的方法,将使用一个web工程做完示例讲解。

 

Apache Ant的使用

web工程图


 

java 覆盖率扫描忽略 java覆盖率工具_html_02

执行ant  file task:all-report

java 覆盖率扫描忽略 java覆盖率工具_html_03


 

执行ant file后生成报告report目录如图所示:

 

 

java 覆盖率扫描忽略 java覆盖率工具_Apache_04

测试报告

可以单独运行命令:anttest-report生成测试报告;

执行之后会在build/report/html生成测试报告,其中打开index.html如下所示。

java 覆盖率扫描忽略 java覆盖率工具_Java_05


 

 

单击: 

java 覆盖率扫描忽略 java覆盖率工具_Java_06

进入:

java 覆盖率扫描忽略 java覆盖率工具_java 覆盖率扫描忽略_07

展示测试类名称、测试方法名称 、测试状态 success or fail 、类型及执行时间:

 

 

 

测试用例覆盖率

可以单独执行命令:antcoverreport;

执行之后会在build/report/coverage下生成覆盖报告,其中打开index.html如下所示:

 

 

java 覆盖率扫描忽略 java覆盖率工具_html_08

单击包名称一层一层单击进入:

java 覆盖率扫描忽略 java覆盖率工具_Java_09


 

具体颜色定义查看上面的介绍

 

Jacoco与jenkins,sonar集成

Jenkins中构建简单配置

java 覆盖率扫描忽略 java覆盖率工具_Java_10

java 覆盖率扫描忽略 java覆盖率工具_html_11

java 覆盖率扫描忽略 java覆盖率工具_java 覆盖率扫描忽略_12

 



 

图仅供参考。

Jacoco与jenkins集成

首先jenkins安装jacoco插件,如图所示:

java 覆盖率扫描忽略 java覆盖率工具_html_13

 

建议使用jenkins插件管理进行安装;

对应的Jenkins插件见https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin

 

配置jacoco插件

 

在“Addpost-build action”中选择“

java 覆盖率扫描忽略 java覆盖率工具_java 覆盖率扫描忽略_14

”,如图所示:

 

 

java 覆盖率扫描忽略 java覆盖率工具_java 覆盖率扫描忽略_15

 

 

java 覆盖率扫描忽略 java覆盖率工具_Apache_16

配置如下部分:

 

 

java 覆盖率扫描忽略 java覆盖率工具_Java_17

第一个部分:代码覆盖率统计文件位置;

第二个部分:classes文件位置;

第三个部分:源码文件位置;

 

java 覆盖率扫描忽略 java覆盖率工具_java 覆盖率扫描忽略_18

 

根据需要填写百分比;


Jacoco 与sonar集成

在项目跟目录下面新建一个sonar-project.properties,如web图所示。

编辑此文件:

 

 

java 覆盖率扫描忽略 java覆盖率工具_html_19

 

执行sonar,配置jenkins部分

java 覆盖率扫描忽略 java覆盖率工具_Java_20


 

只需要执行sonar-runner即可,前提是将jenkins与sonar-runner集成在一起;

 

运行jenkins,执行构建任务

java 覆盖率扫描忽略 java覆盖率工具_Java_21


 

看到类似结果,表示构建结束。

至此,可以通过jenkins查看代码覆盖率等信息。

 

单击进入测试项目:

 

 

java 覆盖率扫描忽略 java覆盖率工具_Apache_22

java 覆盖率扫描忽略 java覆盖率工具_html_23


 

 

单击“CodeCoverage Trend“部分,进入详细页面:

java 覆盖率扫描忽略 java覆盖率工具_java 覆盖率扫描忽略_24


 

单击进入详细的覆盖率文件:

java 覆盖率扫描忽略 java覆盖率工具_html_25

 

SonarQube展示

进入sonarqube项目:http://172.16.XXX.XXX9000/

单击工程jacoco_test_project:

java 覆盖率扫描忽略 java覆盖率工具_Apache_26

 


 

进入详细页面:

java 覆盖率扫描忽略 java覆盖率工具_html_27

 

 

其中圈中左边为单元测试覆盖率,右边为单元测试统计;


单击

java 覆盖率扫描忽略 java覆盖率工具_java 覆盖率扫描忽略_28

进入

java 覆盖率扫描忽略 java覆盖率工具_java 覆盖率扫描忽略_29


 

通过下拉框选择查看行覆盖情况,未覆盖行情况,分支覆盖情况,未覆盖分支情况;

 

 

java 覆盖率扫描忽略 java覆盖率工具_Apache_30


单击

java 覆盖率扫描忽略 java覆盖率工具_Apache_31

 进入测试情况信息页面:


 

java 覆盖率扫描忽略 java覆盖率工具_java 覆盖率扫描忽略_32

如果存在错误,此部分会展示错误情况。