一、插件模式( Eclipse EclDmma Plugin方式)
使用Jacoco+maven+Junit+eclipse为例子,个人感觉适用于单元测试,测试单个模块的覆盖率。此模式需要装一个插件,叫做:EclEmma。安装很简单,可自行百度,装好之后eclipse会有这个图标
步骤如下:
1、新建一个maven项目,设置好pom.xml文件(如图)。然后添加一个单元测试类。这里的pom.xml文件需要引入好几个依赖,主要的是以下这些。有兴趣可以大致看下maven pom文件怎么配置。
2、然后点击EclEmma插件,如下
3、运行之后,如果下面这些文件就说明成功了
二、server模式
什么叫做server模式,按照官网的解释(http://www.jacoco.org/jacoco/trunk/doc/agent.html)其实大致就是说客户端去监听服务器(以外部工具的形式连接JVM,通过socket获取执行数据)。。这个翻译过来有点怪,原文是这样的:tcpserver: The agent listens for incoming connections on the TCP port specified by the address and port attribute. Execution data is written to this TCP connection.
以下是详细步骤:
2.1 这个其实就是通过output参数去设置。下面是两种设置和配置,露珠用了第二种。
第一:通过在tomcat下增加一些参数启动的方式,(Linux下:新增文件名为setenv.sh),Windows下为:setenv.bat。这里的setenv是改变或增加环境变量,据说只能这样命名。
第二:直接在jar包启动的时候,增加你需要的参数。
第一第二种方式都一样的,记住我这是直接在服务器上jar包启动的时候,直接加的参数。增加的参数如下:java -javaagent:D:\webhunter\org.jacoco.agent-0.7.9-runtime.jar=includes=com.*,output=tcpserver,port=8082,address=* -jar webhunter-extract-1.0.0.jar
参数详解如下:
第一个jar包是jacoco官网可以下载的,然后8082这个端口一定不能被占用,Windows下看端口是否被占用的命令是:netstat -aon | findstr “8082”
2.2 在eclipse中新建一个maven项目。然后将下面这3个java文件copy进去。(官网有demo)
这时候,你的还需要配置你的pom.xml文件,引入一些依赖。具体可以看上图配置,需要去学习下pom文件相关知识。当你以这种方式启动你项目的jar包之后,jacoco就会通过java agent动态插桩,来监听文件执行的覆盖率,jacoco代理可以收集执行信息,并且在jvm退出的时候,输出覆盖率文件。详细一点大概就是,JVM 通过java agent参数指定特定的jar文件启动instrumentation的代理程序,代理程序通过class loader装载一个class前判断是否转换修改class文件,将统计代码插入class,测试覆盖率可以在JVM执行测试代码的过程中完成(即On-the-fly插桩)这时候你的jar包启动好,而且没有报错之后,你就可以试试执行几个用例了。
用例执行完了之后,接下来就是dump出exec文件了,只需要右键执行这个文件执行完之后,在项目目录下就有这个文件了,说明成功了一部分
然后再依次执行ExecDump.java和ReportGenerator.java文件,作用依次是,解析jacoco-client.exec文件以及使报告能以HTML方式展示。这里加入这三个java文件时,需要用到这这3个jar包,需要导入一下的(我这边是直接写在pom文件中,依赖一下就好,保存pom文件之后,就会自动下载这几个包了)。
生成exec文件以及dump出覆盖率这里有个地方需要注意一下,你必须得在本地新建个文件夹,里面包含这3个文件夹以及你的exec文件:
然后bin文件夹里面需要放源码的class文件,只要传递class所在的目录就可以(或者用编译过的jar包也可以),不传递会报错,用来统计覆盖率的。为了简单我就放了个jar包。然后src下可以把你项目src目录copy进来,可以为null,但是这样就只能看到具体覆盖的方法,看不了具体方法下的行。这个文件夹必须得事先新建好,才能执行这3个java文件。上面所展示的覆盖率就是,从coveragereport这个目录下可以点进去看到的。这一段解释在代码里面有相应的变量:
三、client模式
跟server模式差不多,只不过是参数的设置不一样。java -javaagent:D:\webhunter\org.jacoco.agent-0.7.9-runtime.jar=includes=com.*,output=clientserver,port=8082,address=* -jar webhunter-extract-1.0.0.jar其他就参照上面server模式即可