Java代码覆盖率工具之Jacoco

JaCoCo(Java Code Coverage)是一款面向Java语言的开源代码覆盖率工具,以其小型化和轻量化著称。它能够提供代码在测试过程中的覆盖率信息,帮助开发人员和测试人员识别未测试的代码部分,从而提高代码质量和测试的完整性。JaCoCo可以嵌入到AntMaven等构建工具中,也可以作为Eclipse插件使用,或者通过JavaAgent技术监控Java程序

一、工作原理

JaCoCo通过对Java字节码进行插桩来收集覆盖率信息。插桩有两种主要方式:离线(offline)在线(on-the-fly)

  • 离线模式:在编译时对代码进行插桩,生成插过桩的class或jar包。在测试这些插过桩的文件后,生成动态覆盖信息文件,最后统一处理这些覆盖信息并生成报告。
  • 在线模式:在应用启动时加入JaCoCo agent进行插桩,实时地进行代码覆盖率分析。这种方式适用于开发和测试人员在使用应用期间进行覆盖率监测。

JaCoCo在执行测试用例时收集程序执行轨迹信息,并通过数据处理器结合程序执行轨迹信息和代码结构信息生成代码覆盖率报告。这些报告可以以html、xml等格式展示,便于开发人员和测试人员查看和分析。

二、在线模式

下载Jacoco:首先,您需要从官网下载Jacoco的最新版本。

可以从Jacoco的官方网站下载最新版本的Jacoco安装程序。

首先,解压缩已下载的JaCoCo安装程序:

unzip jacoco-0.8.12.zip

接下来,使用以下命令来启动应用程序并插桩:

java -javaagent:/opt/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,port=6333,address=localhost,append=true -jar /opt/IAM_JAVA/IAM/src/MyApp.jar

命令说明:

  • /opt/jacoco/lib/jacocoagent.jar:JaCoCo代理JAR文件的安装目录。
  • output=tcpserver:表示以TCP服务器模式启动应用程序并进行插桩。
  • port=6333:JaCoCo TCP服务器的端口号(注意:原文中端口号为6333,但此处已更正为6300,以保持与命令中的端口号一致)。
  • address=localhost:TCP服务器的访问地址,可以配置为127.0.0.1或实际访问的IP地址。
  • /opt/IAM_JAVA/IAM/src/MyApp.jar:要运行的应用程序JAR文件。

在应用程序运行期间,使用以下命令生成覆盖率文件:

java -jar /opt/jacoco/lib/jacococli.jar dump --address localhost --port 6333 --destfile /opt/IAM_JAVA/IAM/jacoco.exec

最后,使用以下命令生成HTML格式的覆盖率报告:

java -jar /opt/jacoco/lib/jacococli.jar report /opt/IAM_JAVA/IAM/jacoco.exec --classfiles /opt/IAM_JAVA/IAM/src/bin --sourcefiles /opt/IAM_JAVA/IAM/src --html /opt/IAM_JAVA/IAM/report01

命令说明:

  • /opt/IAM_JAVA/IAM/jacoco.exec:覆盖率文件。
  • /opt/IAM_JAVA/IAM/src/bin:包含编译后的类文件的目录。
  • /opt/IAM_JAVA/IAM/src:包含Java源文件的目录。
  • /opt/IAM_JAVA/IAM/report01:生成的HTML报告的输出路径。

完成上述步骤后,您可以访问生成的index.html文件来查看覆盖率报告。报告将展示应用程序的代码覆盖率情况,如图所示。







Java代码覆盖率工具之Jacoco的更多相关文章

  1. JAVA代码覆盖率工具JaCoCo-原理篇

    JAVA代码覆盖率工具JaCoCo-原理篇 1.2 JAVA覆盖率工具介绍 1.3.3 Apache Maven方式 1.3.4 Eclipse EclDmma Plugin方式 JAVA代码覆盖率工 ...

  2. Java开发工具IntelliJ IDEA单元测试和代码覆盖率图解

    原文 http://www.cnblogs.com/xiongmaopanda/p/3314660.html Java开发工具IntelliJ IDEA使用教程:单元测试和代码覆盖率 本文将展示如何使 ...

  3. 【转】高效Java编程工具集锦

    原文地址:http://geek.csdn.net/news/detail/57469 Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松.目前,市面上涌现出越来越多的高 ...

  4. Java开发工具安装步骤内容如下

    Java开发工具安装步骤内容如下 安装 开发工具 STS 链接下载网址 eclipse 链接下载网址 JDK安装 jdk链接下载地址 Marven环境 marven链接下载地址 Tomcat tomc ...

  5. C++开源代码覆盖率工具OpenCppCoverage介绍(Windows)

    关于代码覆盖率统计工具,Linux平台下,gcc内置支持gcov,通过编译时加参数选项,进行代码插桩,从而实现代码覆盖率.在Windows平台下,早在几年前,我还没找到特别好用又开源的覆盖率工具,所以 ...

  6. JAVA开发工具eclipse中@author怎么改

    1:JAVA开发工具eclipse中@author怎么改,开发的时候为了注明版权信息. 用eclipse开发工具默认的是系统用户,那么怎么修改呢 示例如图所示 首先打开Eclipse--->然后 ...

  7. Java Properties工具类详解

    1.Java Properties工具类位于java.util.Properties,该工具类的使用极其简单方便.首先该类是继承自 Hashtable<Object,Object> 这就奠 ...

  8. Java测试工具

    1.   开源测试工具: http://www.open-open.com/43.htm 2.   10款常用的JAVA测试工具 :http://developer.51cto.com/art/200 ...

  9. Java json工具类,jackson工具类,ObjectMapper工具类

    Java json工具类,jackson工具类,ObjectMapper工具类 >>>>>>>>>>>>>>> ...

  10. 学习java随笔第二篇:java开发工具——Eclipse

    java开发工具有很多这里我使用的是Eclipse. 首先我在官网上下载了Eclipse的软件包,下载地址:http://www.eclipse.org/downloads/,然后有在网上找了一个汉化 ...

随机推荐

  1. 读书笔记-C#8.0本质论-02

    10. 接口 10.1 显式与隐式接口实现的比较 10.1.1 隐式接口 namespace ConsoleApp1; internal static class Program { internal ...

  2. Golang框架之gin

    gin是目前golang的主要web框架之一,之所以选择这个框架是因为其拥有高效的路由性能,并且有人长期维护,目前github上的star数已经破3W. [安装] go get -u github.c ...

  3. Jx.Cms开发笔记(三)-Views主题动态切换

    效果展示 我们可以在后台动态切换主题 目前Jx.Cms有两个主题,其中一个是默认主题,另一个是仿的Blogs主题. 我们可以通过点击启用按钮来动态切换两个主题. 实现方法 首先写一个实现IViewLo ...

  4. Refact.ai Match 1 (Codeforces Round 985, Div. 1 + Div. 2)

    Contest Link A Easy math problem. Submission B 大胆贪心猜结论,容易想到一个套路化的 stack 做法. Submission C 容易想到是个二分题,二 ...

  5. H5扫码

    1.前言 H5可以获取视频流,并通过video元素进行播放 可以canvas对视频进行定时截图,然后使用插件对图片进行二维码解析 也可以直接对视频进行二维码解析(推荐) 解析二维码的插件为qr-sca ...

  6. Echarts 提示组件

    1.开启指示器 默认情况下,指示器是关闭状态,如果需要开启,直接配置tooltip字段即可 var option = { tooltip:{}, } 2.指示器的触发类型 触发类型的字段为trigge ...

  7. 鸿蒙UI开发快速入门 —— part03: 组件的生命周期

    1. 什么是组件的生命周期 组件的生命周期是我们开发一个组件必须要关注的内容,组件的生命周期,指的是组件的创建.渲染.销毁等过程.因为这个过程就类似于人从出生到离世的过程,从而称为:组件的生命周期. ...

  8. Arrays Basics

    `#include ; using namespace std; int main() { int A[5];//数组的声明 int B[5] = { 2,4,6,8,10 };//数组的声明和初始化 ...

  9. 埃尼阿克ENIAC与计算机发展,及信息技术发展史

    一.埃尼阿克ENIAC 第二次世界大战期间,国军方为了研发新型的大炮和导弹,设立了"弹道研究实验室".实验室为了计算炮弹弹道,用了200多人加班加点进行计算,速度依感无法达到军方要 ...

  10. Dapr-6: Dapr 状态管理构建块

    第 6 章 Dapr 状态管理构建块 The Dapr state management building block | Microsoft Docs 分布式应用程序由一组独立的服务构成.尽管每个服 ...