一、功能
- jacoco:主要用于手动或自动化测试时,收集jar包代码覆盖率
- CodeCoverage平台: 代码覆盖率展示的平台,方便查看
二、配置步骤
1、 目标机器(测试代码布置机器),创建class/lib(jar包)同步源
登陆目标机器:
sudo vi /etc/rsyncd.conf
rsyncd.conf不存在时,可新建
新增配置:
[codeCoverageSync]
path = /home/q/www/myproject/webapps/ROOT/WEB-INF/classes
ignore errors
read only = yes
hosts allow = *.beta.com
同步class源路径
path = /home/q/www/myproject/webapps/ROOT/WEB-INF/classes
同步jar包源路径 注意将本示例中的myproject修改为对应工程的目录名称
path = /home/q/www/myproject/webapps/ROOT/WEB-INF/lib
检查是否启动
ps -ef|grep rsync
服务器要确认已经安装rsync服务,若未启动
sudo rsync --daemon /etc/rsyncd.conf
2、 修改目标机器startenv
在export JAVA_OPTS中加入:
-javaagent:/tmp/jacocoagent.jar=includes=*,output=tcpserver,port=10002,address=l-myproject.h.beta.com(替换为目标机器)
//参数说明:
/tmp/jacocoagent.jar jar文件路径,与你存放的jar文件路径保持一致
includes:表示针对指定的class进行覆盖率数据收集
append=true/false:每一次收集的覆盖率数据是追加还是替换,默认为true
output:导出代码覆盖率数据方式,默认有file、tcpserver和tcpclient,导出文件格式为.exec,默认为file导出
address:选项,应用机器ip
更多参数配置可参考:http://www.eclemma.org/jacoco/trunk/doc/agent.html
3、 上传jacoco至目标服务器
jacocoagent.jar
1、下载到本地
2、rz 上传至目标服务器 //存放目录与步骤2指定的jar路径保持一致, /tmp/jacocoagent.jar
三、CodeCoverage平台配置
平台访问地址
http://l-test11.beta.com:8000/
1、新增平台配置
git@gitlab.com:myproject/code_coverage_tools.git
修改serverlist.conf,新增一行引入本次新增配置,以分号分割:
1.应用名(可自己指定,与build.xml保持一致)
2.工程名(与git一致)
3.机器名
4.sync名
例如
myprojectp;h_myproject;l-myproject1.h.beta.com;codeCoverageSync
使用qdr发布
http://qdr.corp.qunar.com/job/unit_hs_qa_code_coverage_tools
2、新增build.xml配置文件
登录test11,新建build_xxx.xml配置文件,xxx必须以数字结尾,如下所示的myprojectauto1
cd /home/q/jacoco/lib
cp build.xml build_myprojectauto1.xml
<project default="rebuild" name="myprojectauto1">
<description>
Example Ant build file that demonstrates how a JaCoCo coverage report
can be itegrated into an existing build in three simple steps.
</description>
<property location="/home/q/www/codecoverage/templates/myprojectauto1report/" name="result.dir" />
<property location="/home/q/www/codecoverage/templates/myprojectauto1report/" name="result.report.dir" />
<property location="/home/q/www/codecoverage/templates/myprojectauto1report/hslistauto1.exec" name="result.exec.file" />
<property location="/home/q/www/codecoverage/source/javasource/myprojectauto1/src/main/java/" name="src.dir" />
<property location="/home/q/www/codecoverage/source/classsource/myprojectauto1/classes/" name="result.classes.dir" />
<taskdef resource="org/jacoco/ant/antlib.xml" uri="antlib:org.jacoco.ant">
<classpath path="/home/q/jacoco/lib/jacocoant.jar" />
</taskdef>
<target name="clean">
<delete dir="${result.dir}" />
</target>
<target name="dump">
<ns0:dump address="l-test11.tc.beta.com" append="true" destfile="${result.exec.file}" port="10002" reset="false" xmlns:ns0="antlib:org.jacoco.ant" />
</target>
<target name="report">
<ns0:report xmlns:ns0="antlib:org.jacoco.ant">
<executiondata>
<file file="${result.exec.file}" />
</executiondata>
<structure name="hslistauto1">
<classfiles>
<fileset dir="/home/q/www/codecoverage/source/classsource/hslistauto1/classes">
<include name="hslist-rank-1.1.85.jar" ></include>
</fileset>
</classfiles>
<sourcefiles>
<fileset dir="/home/q/www/codecoverage/source/javasource/hslistauto1/hslist_rank/src/main/java/" />
</sourcefiles>
</structure>
<html destdir="${result.report.dir}" />
<csv destfile="${result.report.dir}/report.csv" />
<xml destfile="${result.report.dir}/report.xml" />
</ns0:report>
</target>
<target depends="clean,report" name="rebuild" />
</project>
替换上述配置文件中的myprojectauto1为你的待测工程名称,myprojectauto1rank 待测jar包名称,myprojectauto1-rank-1.1.0.jar 待测jar版本
build.xml 测试命令
sudo ant dump -buildfile xxxx.xml
sudo ant dump -buildfile xxxx.xml
cd /home/q/www/codecoverage/source/classsource
mkdir xxxx1
cd /home/q/www/codecoverage/source/javasource
mkdir xxxx1
git clone xxxx.git#待测jar工程代码地址
将上述代码拷贝至/home/q/www/codecoverage/source/javasource/xxxx1/
修改:很简单自己看着
/home/q/www/codecoverage/codecoverage/urls.py
/home/q/www/codecoverage/platformtodel/call_shell.py
/home/q/www/codecoverage/templates/index.html
新建:
/home/q/www/codecoverage/templates/xxx1report 文件夹