2017-09-21html
1 Jacoco的安装和设置
1.1 什么是Jacoco?
1.2 Jacoco安装
1.3 Tomcat配置
2 在客户端进行功能测试或接口测试
3 Ant安装与配置
3.1 安装
3.2 配置build.xml
4 生成代码覆盖率报告
5 查看结果apache
开发在作单元测试时,经过开发工具的插件很容易获得测试代码覆盖率。当软件部署好以后,咱们经过功能测试或接口测试,可否获得代码覆盖率?Jacoco能够经过JavaAgent技术监控Java程序的到代码覆盖率。tomcat
此文介绍java Agent的'tcpserver' output方法,用此方法时,JavaAgent会监听服务器端设置(Tomcat配置)的TCP port,而后把收集到的信息(jacoco.exec)写入TCP connection。而后经过jacocoant在客户端把收集的信息(jacoco.exec)从TCP connection拉取到客户端,再根据收集到信息(jacoco.exec)和源代码生成覆盖率report。服务器
返回app
Jacoco是一个开源的Java代码覆盖率工具,Jacoco能够嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也能够使用JavaAgent技术监控Java程序。不少第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。maven
官网地址:http://www.eclemma.org/jacoco/ (这里下载了jacoco-0.7.4.201502262128.zip版本)tcp
下载后加压到目录:D:\CodeCoverage\jacocoide
1 关闭Tomcat:双击安装目录下的 D:\tomcat\bin\shutdown.bat (window是bat扩展名、Linux是sh扩展名)工具
2 修改D:\tomcat\bin\catalina.bat,在第一行添加以下脚本:
set JAVA_OPTS=-javaagent:D:\CodeCoverage\jacoco\lib\jacocoagent.jar=includes=*,output=tcpserver,address=172.31.1.32,port=6300,append=true
JVM option 格式:-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]
官方文档:http://www.eclemma.org/jacoco/trunk/doc/agent.html
或者:启动的时候加上javaagent参数
java -javaagent:/opt/quality/lib/jacocoagent.jar=includes=*,output=tcpserver,port=6300,address=*,append=true -jar /app/bin/start.jar
3 启动Tomcat:双击安装目录下的 D:\tomcat\bin\startup.bat
4 验证JAVA_OPTS是否有修改正确
使用WMIC命令
vmic
process where name="java.exe"
若显示一下内容,表示修改为功
java.exe "D:\Java\jdk1.8.0_91\bin\java.exe" -javaagent:D:\CodeCoverage\jacoco\lib\jacocoagent.jar=includes=*,output=tcpserver,address=172.31.1.32,port=6300,append=true
图1 process WMIC
1 测试对象:SpringMVC HelloWorld实例开发及部署
2 功能测试:输入url:http://localhost:8080/HelloSpringMVC/saveResult
说明:在功能测试过程当中javaagent会收集覆盖到的代码信息
1 官方网址: http://ant.apache.org -> download -> binary distribute apache-ant-1.9.9-bin.zip
解压到:D:\CodeCoverage\ant
2 验证安装是否成功
在安装目录D:\CodeCoverage\ant\bin下执行命令:ant -version
<?xml version="1.0" encoding="UTF-8"?> <project name="plate_id_sample_service" xmlns:jacoco="antlib:org.jacoco.ant"> <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"> <classpath path="D:\CodeCoverage\jacoco\lib\jacocoant.jar"/> </taskdef> <target name="dump"> <!-- address和port和catalina.bat设置保持一致,destfile设置jacoco.exec保存地址 --> <jacoco:dump address="172.31.1.32" reset="true" port="6300" destfile="D:\CodeCoverage\jacoco\jacoco.exec"/> </target> <target name="report"> <jacoco:report> <executiondata> <file file="D:\CodeCoverage\jacoco\jacoco.exec"/> </executiondata> <structure name="Example Project"> <!-- 能够按软件功能模块设置多个group,方便在report中查看 --> <group name="SpringMVC"> <classfiles> <!--.class文件路径,能够放在客户端--> <fileset dir="D:\CodeCoverage\project\HelloSpringMVC\classes"/> </classfiles> <sourcefiles encoding="gbk"> <!--源代码路径,能够放在客户端--> <fileset dir="D:\CodeCoverage\project\HelloSpringMVC\java" /> </sourcefiles> </group> </structure> <!-- report文件保存地址 --> <html destdir="D:\CodeCoverage\jacoco\report"/> </jacoco:report> </target> </project>
在ant安装目录运行ant dump命令,把jacoco.exec拉取到build.xml设置的客户端路径
在ant安装目录运行ant report命令,根据build.xml设置jacoco.exec、class和java文件地址生成report
图2 ant命令
若build.xml没有设置源代码java的地址,就看不到代码内容的覆盖状况,最细只能看到方法的覆盖率统计
图3 覆盖率报表