Jacoco介绍

转自:wangmuming 的博客

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)。

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

支持的集成工具

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工程图

执行ant  file task:all-report

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

测试报告

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

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

单击: 进入:

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

测试用例覆盖率

可以单独执行命令:antcoverreport;

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

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

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

Jacoco与jenkins,sonar集成

Jenkins中构建简单配置

图仅供参考。

Jacoco与jenkins集成

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

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

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

配置jacoco插件

在“Addpost-build action”中选择“”,如图所示:

配置如下部分:

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

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

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

 

根据需要填写百分比;

 

Jacoco 与sonar集成

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

编辑此文件:

执行sonar,配置jenkins部分

 

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

运行jenkins,执行构建任务

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

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

单击进入测试项目:

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

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

SonarQube展示

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

单击工程jacoco_test_project:

进入详细页面:

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

 

单击进入


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

 

 

单击 进入测试情况信息页面:

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

Jacoco入门的更多相关文章

  1. 使用dropwizard(4)-加入测试-jacoco代码覆盖率

    前言 dropwizard提供了一个简单的测试框架.这里简单集成并加入jacoco测试. Demo source https://github.com/Ryan-Miao/l4dropwizard 本 ...

  2. Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  3. 测试人员学Java入门指南

    目标读者 本指南特别适合有Python基础的同学学习Java入门,对于没有任何编程经验的同学可能会存在困难. 为什么测试人员要学Java 选择Java,应该不错.TesterHome测试论坛知名大佬基 ...

  4. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  5. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  6. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  7. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  8. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  9. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

随机推荐

  1. Compare接口

    1.Comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 .实现此接口的对象列表(和数组)可以通过 ...

  2. tcp 之失败重传机制

    1.回退N步协议: 滑动窗口模式,每次传送一批的数据,接收到一个就再放进去一个,如果前面一个没有收到回复,后面的就算收到了后面的数据也丢掉 2选择性重传 区别是收到后,缓存.

  3. vCenter Server Appliance

    vCenter Server Appliance https://10.0.0.10:5480

  4. openssl evp 对称加密(AES_ecb,ccb)

    openssl evp 对称加密(AES_ecb,ccb) evp.h 封装了openssl常用密码学工具,以下主要说对称加密的接口 1. 如下使用 aes_256_ecb 模式的加密解密测试代码 u ...

  5. 设置git 不提交 修改权限的文件

    vim .git/config  打开文件

  6. visual studio 工具的使用

    1,快捷键 a, ctrl+e ,ctrl+c 快速注释  ctrl+e ,ctrl+u 取消注释 b,ctrl+k,ctrl+d 快速格式化. 2,开发相关 a,在Microsoft Visual ...

  7. mybatis输出SQL

    1.导包 下载一个log4j-1.2.17.jar,放到WEB-INF的lib下,并加入build path 2.创建配置文件 在src下创建log4j.properties,填入以下内容: log4 ...

  8. 游戏外挂四之利用CE和OD查找被选中怪物和怪物列表

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)Q  Q:408365330     E-Mail:egojit@qq.com 这一节我们利 ...

  9. iOS时间问题

    在iOS开发中,经常会遇到各种各样的时间问题,8小时时差,时间戳,求时间间隔,农历等等.解决办法网上比比皆是,但大多零零散散,很多资料并没有说明其中问题.这里集中总结一下,以便于以后查阅和供大家参考. ...

  10. C++内存管理的缩影

    都说C++内存管理是个大坑.实际上也确实是这样. C++有析构函数,每当一个对象过期的时候,C++会执行两个动作 1.执行析构函数. 2.将对象和对象的所有数据删除. 很多人就会问了,既然有把对象删除 ...