首页 > 编程语言 >jacoco+ant 构建java覆盖率

jacoco+ant 构建java覆盖率

时间:2023-07-19 23:22:35浏览次数:53  
标签:文件 java dump 覆盖率 IP jar ant jacoco

所需工具:

Jacoco Ant

2020.5.26: 踩坑报错Unable to dump coverage data,经过查证修改后发现为tomcat需用tomcat自带startup.bat启动,用eclipse启动仿佛插件无效。

 

Tomcat修改

 set JAVA_OPTS="-javaagent:[yourPath/]jacocoagent.jar=includes=com.companyName.*,output=tcpserver,port=8044,address=100.44.44.144,append=true -Xverify:none"
 修改文件说明:
 1.windows平修改catalina.bat,linux平台修改catalina.sh(去除set)
 2.启动Tomcat,Windows下使用startup.bat,Linux下使用startup.sh
参数说明:
   1. yourPath 是放 jacocoagent.jar 文件的目录路径;那么 `jacocoagent.jar` 这个 `jar` 包的路径就是在准备工作里下载下来的 `zip` 包,解压之后的 `lib` 目录下,如:'/jacoco-0.7.9/lib/jacocoagent.jar'
   2. includes 是指要收集哪些类(注意不要光写包名,最后要写.*),不写的话默认是*,会收集应用服务上所有的类,包括服务器和其他中间件的类,一般要过滤(当然如果你愿意写*也完全没有问题,如:`includes=com.*` or `includes=*`);
   3. output 有 4 个值,分别是 file、tcpserver、tcpclient、mbean,默认是 file。使用 file 的方式只有在停掉应用服务的时候才能产生覆盖率文件,而使用 tcpserver 的方式可以在不停止应用服务的情况下下载覆盖率文件,后面会介绍如何使用 dump 方法来得到覆盖率文件。
   4. address 是 IP 地址,IP 就是 Tomcat 服务器的机器的 IP,至于是写 `服务器本机的 IP` 还是写 `127.0.0.1` 要看情况
       1) 如果是在 Tomcat 服务器上执行 `ant dump` 的话,就直接写 `address=127.0.0.1`
       2) 如果执行 `ant dump` 不是在 Tomcat 服务器上执行的,就得写服务器本机的IP(切记)
   5. port 是端口(端口比较随便,找个能用的端口就行,直接我为什么将端口写成 `8044`,我的想法是 `BUG 死死` 与 `8044` 挺配的,所以就用它作为端口号了)
(`address` 和 `port` 是使用 tcpserver 方式需要的 2 个参数,也是执行 ant dump 方法必须要用到的。)
   6. append 表示覆盖率数据的追加方式,默认为 true。客户端在执行 dump 操作时,如果该 exec 覆盖率文件已存在,那么该轮的覆盖率数据会直接在文本末尾进行追加,因此会导致覆盖率数据文件越来越大。如果改为 false,则客户端执行 dump 操作时会直接清空原覆盖率文件的内容,保证该覆盖率文件只有该轮的覆盖率数据。
   7. `-Xverify:none`:这个参数是防止启动主程序异常才加的(非强制,可以不加)

jacoco启动验证

windows查询方法:
1.Windows下在cmd窗口使用WMIC命令,回车,回显:wmic:root\cli>
2.在>后面输入:process where name="java.exe"  命令
3.查看打印信息

linux查询方法:
1.ps -ef | grep tomcat
2.ps -ef | grep jacocoagent.jar

--------------查询有jacoco进程则配置ant-------------------

Ant覆盖率 build.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project name="Jacoco" xmlns:jacoco="antlib:org.jacoco.ant" default="jacoco">   
    <property name="jacocoantPath" value="[yourPath/]jacocoant.jar"/>
    <property name="integrationJacocoexecPath" value="./jacoco-integration.exec"/>
    
    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
      <classpath path="${jacocoantPath}" />
    </taskdef>
    
    <target name="dump">
        <jacoco:dump address="100.44.44.144" port="8044" reset="true" destfile="${integrationJacocoexecPath}" append="false"/>
    </target>
</project>
参数说明:
`.exec`:二进制文件,Jacoco 就是根据这个文件生成最终的报告
`destfile`:是指生成的覆盖率文件路径

Tip:
build.xml 只需修改三个点,就可以直接拿去用
第一个修改点:补全 `jacocoant.jar` 路径。(那么 `jacocoant.jar` 在哪?对于这个问题,或许会有疑问,当然,如果细心的小伙伴就会很轻易的发现 `jacocoant.jar` 的位置,其实也就在准备工作中所下载的 `zip` 包里面,与 `jacocoagent.jar` 在同级目录 `lib` 文件夹下)
第二个修改点:修改 IP 地址(IP 须与 `catalina.sh` 中添加的一致)
第三个修改点:修改端口号(与IP一样,端口号须与 `catalina.sh` 中添加的一致)

Frequently Asked Questions:
虽然得到了集成测试的覆盖率文件,但是需要应用服务器上的类文件才能产出相应的覆盖率报告,如果类文件是其他 JVM 编译的,产出的报告覆盖率是 0%。
有 2 种方法可以得到覆盖率文件所需的 class 文件:
1. 将应用服务部署的包(ear 或 war 或 jar)包下载下来之后解压,即可得到对应的 class 文件;
2. 在前面做单元测试之后,可以将 class 文件打成一个 zip 包,然后上传到服务器,最后在需要的时候去服务器上取。

修改好了,那么我们来测试一下,终端进入 build.xml 所在的目录,执行:ant dump 或者 ant dump -buildfile [yourPath/]build.xml


参考文档:https://www.cnblogs.com/wozijisun/p/9667849.html https://www.jianshu.com/p/16a8ce689d60

标签:文件,java,dump,覆盖率,IP,jar,ant,jacoco
From: https://www.cnblogs.com/yunjie465/p/17567067.html

相关文章

  • docker+jacoco构建接口测试覆盖率
    代码中需要更改的内容Dockerfile1.在文件中引入jacocoagent.jar,引入后需检查是否引入成功ADD./jacocoagent.jar/jacocoagent.jar2.打开jacocoagent监控端口,不能与其他jacocoagent端口重复,此端口也是docker容器启动的必填项EXPOSE99263.加入jacocoagent启动参数,端口号......
  • 一维资源分配问题(java实现)
    一维资源分配1.问题介绍设有总量为a的某种原料,用于生产n种产品。假设用于生产第k种产品生产的数量为\(x_k\),并获得收益\(\varphi(x_k)\),问应该如何分配n种产品的资源使用量使得总收益最大。2.Solution\(k\):生产第k种产品的决策阶段;\(x_k\):投入到第k种产品生产的资......
  • 用java代码实现部门表,用户表的对应关系,把用户放到对应的部门下面
    实现如下所示: importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;/***@author王立朝*@date2023/7/19*@description:*/publicclassTest2{publicstaticvoidmain(String[]args){//创建......
  • JavaScript学习笔记01(包含ES6语法)
    Js简介什么是Js?Js最初被创建的目的是“使网页更生动”。Js写出来的程序被称为脚本,Js是一门脚本语言。被直接写在网页的HTML中,在页面加载的时候自动执行脚本被以纯文本的形式提供和执行,不需要特殊的准备或编译即可运行(JINcompiler)Js不仅可以在浏览器中执行,也可以......
  • 【Azure Function App】Java Function部署到Azure后出现中文显示乱码问题
    问题描述JavaFunction在Azure上遇见中文显示乱码问题?如何解决呢? 问题解答中文字符显示为乱码,这个情况就是服务实例上设置的编码格式不是统一的UTF-8所导致的。在查看AzureAppService/FunctionApp的官方文档,都没有明确的说明它们使用的默认编码是什么,通过询问ChatGPT-4,也没有得......
  • Java基础语法(一)
    一、基本数据类型和String数据类型之间的运算(==注意:String是一个类,故而为引用数据类型==):1、String类的基本使用如下: Stringname="Wangyz"; System.out.println(name); //定义一个空的字符串 StringnullStr="";注意:String类和基本数据类型之间进行运算时只能进行连......
  • 【Azure Function App】Java Function部署到Azure后出现中文显示乱码问题
    问题描述JavaFunction在Azure上遇见中文显示乱码问题?如何解决呢? 问题解答中文字符显示为乱码,这个情况就是服务实例上设置的编码格式不是统一的UTF-8所导致的。在查看AzureAppService/FunctionApp的官方文档,都没有明确的说明它们使用的默认编码是什么,通过询问ChatGPT-4,也......
  • 根据表格生成java实体
    根据表格生成Java实体类在Java编程中,我们经常会遇到需要将表格中的数据映射到实体类的情况。这里我们来介绍一种常用的方法,即根据表格生成Java实体类。在开始之前,我们先来看一下表格的结构示例:字段名类型描述idint主键IDnameString姓名ageint年龄gende......
  • 根据url下载文件java后端
    根据URL下载文件的Java后端在开发Web应用程序时,经常需要从URL下载文件。Java后端使用URL连接和输入流可以轻松地实现文件下载功能。本文将介绍如何使用Java后端根据URL下载文件,并提供相应的代码示例。1.使用URL连接获取文件输入流使用Java的java.net包提供的URL类可以方便地与U......
  • 服务器上java项目数据库配置文件
    在服务器上配置Java项目数据库配置文件的流程概述在服务器上配置Java项目的数据库配置文件是非常重要的一步,它决定了项目与数据库的连接方式和相关配置信息。下面我将介绍整个配置流程,并附上相应的代码和注释,以便你能够顺利进行配置。配置步骤步骤操作1进入服务器......