代码覆盖率工具-jacoco环境搭建分享

简介: 本文介绍 代码覆盖率工具-jacoco环境搭建分享

1. Jacoco+docker+ant环境搭建

背景: Web多个服务在docker中启动,服务之间存在依赖关系,启动端口号以及依赖的镜像关系都配置在docker-compse.yml文件中。需要借助代码覆盖率工具,对后端Java代码进行覆盖率统计。

环境搭建理想目标是,开启覆盖率统计工具后,进行API、Web GUI、手工测试和单元测试,都可以统计到覆盖率,且生成直观的报告,可随时查看代码覆盖率进度,清晰解析每行代码覆盖情况。

调研各代码覆盖率工具后,最终选定Jacoco进行代码覆盖率统计,理由如下:

1.Jacoco功能满足上述代码覆盖率环境的终极目标;

2.可与jenkins集成;

3.新版本的Jacoco也支持kotlin的代码统计;

4.目前工具在持续更新中。

1.1 Jacoco环境搭建血泪史

与其他覆盖率工具相比,Jacoco环境搭建较复杂,且依赖源码。网络查询jacoco工具大多与tomcat结合在一起,并且在tomcat中启动javaagent, 因此最先选择的也是Jacoco+tomcat的方式,发现流程可通,但覆盖率始终为0,此后先后尝试了如下三种方案。

image.png

1.2 搭建步骤

1.2.1 工具安装

首先服务器需要安装jacoco+ant工具,ant用来生成覆盖率报告,ant有远程的功能,因想与jenkins集成,本文选择jacoco、ant、jenkins、docker都配置在同一台服务器上。

工具安装具体步骤见如下链接:

1.下载Jacoco到服务器:https://www.eclemma.org/jacoco/index.html

2.linux上安装ant:https://www.cnblogs.com/sell/archive/2013/07/24/3210198.html

注:若是环境中使用tomcat容器,Jacoco安装和与tomcat集成可参见:https://www.jianshu.com/p/16a8ce689d60

1.2.2 修改docker配置

​ 网络查询到的docker修改大多需要修改docker镜像,此处只需要在docker配置文件docker-compse.yml中添加启动javaagent,以某一服务为例,新增点如下:

image.png
图-1

将jacocoagent.jar拷贝到指定地点,且java启动Javaagent和服务,Javaagent端口号随意,没有被占用即可,其他服务修改同上,但是端口号不能相同。

Docker中重启修改的服务:1. docker-compose stop 具体服务2. docker-compose up –d 具体服务,使用docker-compose ps查看服务状态为UP,且带有javaagent的进程,具体见图2。

image.png
图-2

注意:

  1. 执行启动服务指令需要小心,一定要加up –d 具体服务,docker-compose up会重启所有服务,而有些服务是不可重启的,或者说启动比较复杂。

2.重启服务时,依次各重启,不要为了省事,全部down掉,服务间存在依赖,或导致某些服务启动报错。

1.2.3 与jenkins集成

与Jenkins集成的详细步骤见如下链接:https://www.jianshu.com/p/e7fc806ea0e0

Jenkins中带有jacoco分析的插件,可配置后直接生成直观的覆盖率报告,适用于统计单个项目覆盖率,但是Web存在多个服务场景,如何生成覆盖率报告,此处有两种方案:

image.png

1.2.4 本地生成覆盖率报告

本文选择的是本地生成覆盖率报告的方式,需要修改配置文件,修改build.xml文件地方如下:
image.png
图-3

  1. 指定Jaococant.jar的路径。
  2. 指定覆盖率生成的.exec文件和生成统计报告的路径,路径随意,新建文件夹指定路径即可。
  3. Ant支持远程生成报告,此处是本地生成,填写127.0.0.1,若是远程添加远程服务器的地址。
  4. 配置javaagent的端口,此处端口与1.2.2步骤中docker-compse.yml的javaagent端口号一致。

image.png
图-4

5.指定源代码的路径,源码必须与生成.jar包的源码完全一致。

6.指定class文件的路径。

image.png
图-5

  1. dump指令配置,此处注意append参数的配置说明,目前选择是true。

merge代码是合并所有项目的.exec文件,生成总的代码覆盖率报告。

image.png
图-6

  1. 生成覆盖率报告代码部分,添加所有项目的信息,具体图-6中test1项目。

进入build_jacoco.xml文件所在目录,执行ant –f build_jacoco.xml,显示BUILD SUCCESFUL后,进入生成报告路径查看生成的报告,打开index.html有统计信息即成功。
image.png
图-7

  1. 进入具体项目链接,即可观察每行代码的覆盖情况,分析未覆盖的代码增加相应的测试case。

2. 可能遇见的问题

1.若Web服务为集群环境,需要将其他服务down掉,使所有请求都发往部署jacoco的服务器上。

2.启动服务后,开始统计覆盖率,过程中,各个服务最好不要再重启。

3.若是生成报告失败很大可能是端口号连不上,可尝试修改端口号,build.xml文件中端口号与docker-compose.yml文件中javaagent的端口号一致即可。

4.build指定的源码和class路径下文件需要与生成jar包的源码文件完全一致,否则生成覆盖率报告会报错。

  1. 引用资料:
    [1]jacoco下载路径:https://www.eclemma.org/jacoco/index.html

[2] Linux环境安装ant:https://www.cnblogs.com/sell/archive/2013/07/24/3210198.html

[3] jacoco与tomcat集成:https://www.jianshu.com/p/16a8ce689d60

[4] jacoco与jenkins集成:https://www.jianshu.com/p/e7fc806ea0e0

文章来源:芯片开放社区
文章链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flWxVN5&id=658632213725708288

相关文章
|
运维 网络协议 网络架构
网络技术基础(6)——IP路由基础
【2月更文挑战第10天】网络基础笔记(加班了几天,中途耽搁了,预计推迟6天)
|
NoSQL Java Redis
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理(一)
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理
2854 0
|
jenkins Java 应用服务中间件
代码覆盖率工具-jacoco环境搭建分享
Web多个服务在docker中启动,服务之间存在依赖关系,启动端口号以及依赖的镜像关系都配置在docker-compse.yml文件中。需要借助代码覆盖率工具,对后端Java代码进行覆盖率统计。
代码覆盖率工具-jacoco环境搭建分享
|
9月前
|
自然语言处理 算法 数据挖掘
知识图谱的可验证性:断言图谱的设计原理
本文剖析大语言模型在知识图谱构建中的根本局限:生成式架构与结构化提取存在本质错位,导致实体消歧难、幻觉频发、上下文割裂。提出以判别式模型构建可验证的“断言知识图谱”为基石,再按需融合分类学扩展、规则推理、链接预测等增强策略,实现高质、可信、可解释的生产级知识图谱。
279 10
知识图谱的可验证性:断言图谱的设计原理
|
7月前
|
人工智能 自然语言处理 测试技术
AI都能生成测试用例了会取代测试工程师吗?
2026年大模型普及下,生成测试用例已成基础能力。真正分水岭在于:是被动使用AI输出,还是构建工程化生成体系——涵盖需求结构化、状态建模、提示词设计与自动校验。测试工程师的核心价值正从“写用例”跃升为“设计生成系统”。
|
8月前
|
人工智能 前端开发 测试技术
从手工点点到AI自动生成用例,测试人的这个春天不太一样
本文讲述一位北京测试工程师在三月借助AI革新工作方式的真实经历:从用AI高效生成测试点、用例,到应对复杂业务逻辑,再到反思人机协作本质。他发现AI并未取代测试,而是将工程师从重复劳动中解放,转向更需判断力的设计与风险分析——这个春天,因工具变聪明而不同。
|
存储 安全 数据处理
【HarmonyOS Next之旅】HarmonyOS开发基础知识(三)
随着移动终端及其相关业务(如移动支付、终端云等)的普及,用户隐私保护的重要性愈发突出。应用开发者在产品设计阶段就需要考虑用户隐私的保护,提高应用的安全性。HarmonyOS应用开发需要遵从隐私保护规则,在应用上架应用市场时,应用市场会根据规则进行校验,如不满足条件则无法上架。应用采集个人数据时,应清晰、明确地告知用户,并确保告知用户的个人信息将被如何使用。对个人数据处理必须要征得用户的同意或遵守适用的法律法规,用户对其个人数据要有充分的控制权。应用个人数据收集应与数据处理目的相关,且是适当、必要的。开发者应
477 7
【HarmonyOS Next之旅】HarmonyOS开发基础知识(三)
|
XML 监控 负载均衡
Jacoco的覆盖率原理
JaCoCo(Java Code Coverage)是一种广泛使用的代码覆盖率工具,通过在字节码中插入探针(Probe)来收集覆盖率信息。
1928 5
Jacoco的覆盖率原理
|
Java 测试技术
利用JaCoCo统计接口测试中代码覆盖率
做接口测试,很多时候都会听到,你接口测试的覆盖率是多少?很多人会回答80%,你怎么统计的,他说覆盖了80%的需求。这个回答没有错误,但是片面,我们不能只考虑需求的覆盖率,还有业务的覆盖率,场景的覆盖率,接口的覆盖率,代码的覆盖率等,本文介绍接口测试的代码覆盖率。那么我们来看看如何是实现的。
利用JaCoCo统计接口测试中代码覆盖率
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
2554 2