本文主要是介绍Jacoco统计接口覆盖率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我们通常通过接口自动化来进行上线前验证,保障当前迭代的改动不影响原有接口的正常运行,这就需要接口的覆盖率较高,才能起到重要的价值。通过jacoco进行覆盖率统计,可以清晰地统计出接口覆盖率情况,并且能够根据覆盖的代码情况进一步完善接口自动化。话不多说,接下来我们就来看下如何用jacoco进行接口覆盖率统计。
1、首先需要在需要统计的服务对应的机器上安装jacoco和ant
下载jacoco和ant压缩包:
ant直接解压,解压后,会自动生成一个ant的文件夹;
jacoco需要自己先新建一个文件夹,然后把压缩包放进去解压。
然后将ant加入环境变量:
vim ~/.bashrc
然后执行命令:
source ~/.bashrc
即时生效。
然后运行ant -v
表明安装成功。
2、在服务的tomcat启动项上增加如下配置:
-javaagent:/xxxx/jacoco/lib/jacocoagent.jar=includes=com.xxx.*,output=tcpserver,port=8125,address=127.0.0.1
其中,端口可随意指定,只要不跟其他端口冲突即可,如果是本机,ip须是127.0.0.1
然后重启服务,会自动监听本机的port端口
3、在服务器上增加build.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project name="JaCoCo" default="run" xmlns:jacoco="antlib:org.jacoco.ant"><!--Jacoco的安装路径--><property name="jacocoAntPath" value="/home/用户/xxx/tools/jacoco/lib/jacocoant.jar"/><!--最终生成.exec文件的路径,Jacoco就是根据这个文件生成最终的报告的--><property name="jacocoExecPath" value="/home/用户/xxx/codeCoverage/study/jacocoExec"/><!--生成覆盖率报告的路径--><property name="jacocoReportPath" value="/home/用户/xxx/codeCoverage/study/report"/><!--远程tomcat服务的ip地址 xxx.xx.xxx.163(172.16.1.31)--><property name="server_ip" value="127.0.0.1"/><!--前面配置的远程tomcat服务打开的端口,要跟上面配置的一样--><property name="server_port" value="8125"/><!--源代码路径--><property name="srcPath" value="/home/用户/sourceSrc/xxx/src/main/java"/><!--service.class文件路径--><property name="classesPath" value="/home/用户/xxx/instance1/approot/testhf/BOOT-INF/classes"/><!--让ant知道去哪儿找Jacoco--><taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"><classpath path="${jacocoAntPath}"/></taskdef><target name="run"><echo message="start..."/><echo message="dump..."/><antcall target="dump"/><echo message="merge..."/><antcall target="merge"/><echo message="report..."/><antcall target="report"/><echo message="end..."/></target><!--dump任务:根据前面配置的ip地址,和端口号,访问目标tomcat服务,并生成.exec文件。--><target name="dump"><jacoco:dump address="${server_ip}" reset="true" destfile="${jacocoExecPath}/study_jacoco.exec" port="${server_port}" append="false"/></target><target name="merge"><jacoco:merge destfile="${jacocoExecPath}/merged.exec"><fileset dir="${jacocoExecPath}" includes="*.exec"/></jacoco:merge></target><!--jacoco任务:根据前面配置的源代码路径和.class文件路径,根据dump后,生成的.exec文件,生成最终的html覆盖率报告。--><target name="report"><jacoco:report><executiondata><file file="${jacocoExecPath}/merged.exec"/></executiondata><structure name="JaCoCo Report"><group name="xxxx coverage"><sourcefiles encoding="UTF-8"><fileset dir="${srcPath}"/></sourcefiles><classfiles><fileset dir="${classesPath}/com/netease/edu"/></classfiles></group></structure><html destdir="${jacocoReportPath}" encoding="utf-8"/><csv destfile="${jacocoReportPath}/report.csv"/><xml destfile="${jacocoReportPath}/report.xml"/></jacoco:report></target>
</project>
其中,上面的port必须和tomcat启动项中的端口保持一致。
然后执行ant -f build.xml即可生成报告。
4、持续集成
多个服务可能在多台服务器上,在同一个服务器上时,注意端口不要冲突,在多个服务器上,每次都去服务器上执行不方便,可在jenkins持续集成机器上编写脚本,通过remotessh的方式进入各个机器执行脚本并拷贝报告到job机器上,展示覆盖率结果。
此处拷贝report文件夹,需要将目标路径文件夹的权限为777才行,否则会拷贝失败~
5、覆盖率报告如下:
进入代码中可看到哪些语句被覆盖了,哪些还未被覆盖,然后作为依据补充接口自动化用例。
这篇关于Jacoco统计接口覆盖率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!