利用Jacoco怎么获取Java程序代码执行的覆盖率

介绍

这篇文章将为大家详细讲解有关利用Jacoco怎么获取Java程序代码执行的覆盖率,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

Jacoco原理简介

Jacoco通过修改喂给JVM的字节码来达到获取那些代码执行了的目的。修改方式有两种,一种在线(动态),是通过Java代理,在JVM执行字节码之前动态对其进行修改,这种方式更灵活,也是Jcoco的一大特性。另一种是离线(线下)模式,在Java程序字节码文件(。类文件)生成之前进行修改,这样的字节码就不纯了。一般在无法使用动态方式的时候才使用线下方式。

使用Jacoco生成代码执行覆盖率报告

接下来通过一个实验介绍如何使用Jacoco获取一个Java web应用代码的执行率。就拿Tomcat自带的例子应用来做实验,我们在启动Tomcat时带上Jacoco的Java代理,然后在页面上做一些点击操作,触发后台Java代码的执行;再抓取包含执行情况数据,放到.exec的二进制文件中,最后由这些二进制文件生成html格式的报告,验证被覆盖的代码是否和我们点击的内容相关。

下载Jacoco (https://www.jacoco.org),解压缩。

下载Tomcat (https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/ 清华镜),然后解压缩,进入本目录,找到catalina.bat文件(Windows)。

利用Jacoco怎么获取Java程序代码执行的覆盖率

修改如下代码,让Tomcat在启动时带上Javacoco的代理。

set “JAVA_OPTS=% JAVA_OPTS %, % JSSE_OPTS %“

修改为

set “JAVA_OPTS=% JAVA_OPTS %, % JSSE_OPTS %, - javaagent: C: \机器人\程序\ \用户jacoco-0.8.5 \ lib \ jacocoagent.jar=destfile=jacoco.exec,输出=tcpserver"

其中指定了javaagent是C: \机器人\程序\ \用户jacoco-0.8.5 \ lib \ jacocoagent.jar解压Jacoco可以得到;指定了输出是tcpserver,也就是需要通过访问一个地址才能获取到数据。默认地址是本地IP地址,端口号是6300。其它参数说明见:https://www.jacoco.org/jacoco/trunk/doc/agent.html。

利用Jacoco怎么获取Java程序代码执行的覆盖率

设置完成之后,双击Tomcat本目录下的startup.bat,启动Tomcat。控制台可以看见javaagent设置生效。此时Jacoco就可以动态地拦截喂给JVM的字节码,并且监听6300端口号和所以本机地址,等待获取代码执行情况数据(暂且称为。exec文件数据)的请求。

利用Jacoco怎么获取Java程序代码执行的覆盖率

输入地址http://127.0.0.1:8080,,打开Tomcat欢迎页面,做一些点击操作,可以确定它已经执行了一些字节码。

利用Jacoco怎么获取Java程序代码执行的覆盖率

获取执行情况数据,在jacococli.jar所在目录(与jacocoagent。jar目录一致)执行命令:

java  -jar  jacococli.jar  dump ——port  6300年,——destfile 数据/jacoco-it.exec

Jacoco会在当前目录下生/jacoco-it成数据。exec文件,这个文件是一个二进制文件,我们无法直接查看它,需要用它生成html或者其它格式的文件。

利用Jacoco怎么获取Java程序代码执行的覆盖率

执行如下命令生成html报告。——类文件制定应用程序的类文件所在目录,——html指定html报告所在目录。

java  -jar  jacococli.jar  report 数据/jacoco-it.exec ——classfiles  C:/用户/机器人/应用程序/apache-tomcat-9.0.29/webapps/例子/web - inf/classes ——html  html

利用Jacoco怎么获取Java程序代码执行的覆盖率

打开html目录下的指数。html文件就可以看到报告了。

利用Jacoco怎么获取Java程序代码执行的覆盖率

关于利用Jacoco怎么获取Java程序代码执行的覆盖率就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

利用Jacoco怎么获取Java程序代码执行的覆盖率