Jacoco统计接口覆盖率

2023-10-17 14:20
文章标签 接口 统计 覆盖率 jacoco

本文主要是介绍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统计接口覆盖率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/225976

相关文章

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm