Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用 JaCoCo 生成测试覆盖率报告

使用 JaCoCo 生成测试覆盖率报告

作者头像
头发还在
发布于 2023-10-16 02:59:41
发布于 2023-10-16 02:59:41
1.2K00
代码可运行
举报
文章被收录于专栏:桃花源桃花源
运行总次数:0
代码可运行

0、为什么要生成测试覆盖率报告

在我们实际的工作中,当完成程序的开发后,需要提交给测试人员进行测试,经过测试人员测试后,代码才能上线到生产环境。

有个问题是:怎么能证明程序得到了充分的测试,程序中所有代码都被走到了。当然,代码覆盖率只能作为测试后的一个参照,如果最开始的需求都理解错了,那么再高的代码覆盖率,都失去了意义。

那么这时就需要引入代码覆盖率这个东东了,要统计 C++ 的代码覆盖率有 GCover,统计 Java 的代码覆盖率则有 JaCoCo 可以实现。

JaCoCo 是一个免费的Java代码覆盖率检测工具,可以统计到测试对以下内容的覆盖情况:

  • 指令覆盖率
  • 分支覆盖率
  • 圈复杂度覆盖
  • 行覆盖
  • 方法覆盖
  • 类覆盖

对各种覆盖率的具体含义可以参考官方文档:​​https://www.jacoco.org/jacoco/trunk/doc/counters.html​

使用 JaCoCo 生成覆盖率时,可以使用 on-the-fly 方式,对程序的原代码是无侵入式的,只是在启动 jar 包时,增加一个参数就行,可确保测试人员测试的代码,和上线到生产环境的代码一致。

1、创建测试类并打包成服务

为了简单起见,这里直接基于 springboot 创建被测试的类,使用了 RequestMapping 注解。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.test.JacocoTest.controler;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping
public class Athytics {

    @GetMapping("/+/{a}/{b}")
    public int add(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        int result = 0;

        if(param1 < 0 || param1 > 1000){
            result = b - param1;
        }else{
            result = param1 + b - 1000;
        }
        return result;
    }

    @GetMapping("/-/{a}/{b}")
    public int minus(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return param1 - b;
    }

    @GetMapping("/*/{a}/{b}")
    public int multiply(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return param1 * b;
    }

    @GetMapping("///{a}/{b}")
    public int divide(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return param1 / b;
    }

    @GetMapping("/c/{a}/{b}")
    public String power(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return String.valueOf(Math.round(Math.pow(param1, b)-1));
    }

    @GetMapping("/abs/{a}")
    public String abs(@PathVariable("a") Integer param1){
        return String.valueOf(Math.round(Math.abs(param1)));
    }
}

创建 SpringBoot 的启动类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.test.JacocoTest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JacocoTestApplication {
    public static void main(String[] args) {
        SpringApplication.run(JacocoTestApplication.class, args);

    }
}

代码结构非常简单

2、启动 JaCoCo

2.1 下载 JaCoCo 工具包

可以进入到官方页面下载 ​​https://search.maven.org/search?q=g:org.jacoco​

下载其中需要用到的两个包即可

Jacoco 工具包及被测试包如下

2.2 启动被测服务,并在启动语句中添加 JaCoCo

指定需要检查测试对代码覆盖情况的包名,采集Jacoco覆盖率文件的ip及端口

java -javaagent:jacocoagent.jar=includes=com.test.*,output=tcpserver,port=6301,address=localhost,append=false -jar JacocoTest-1.0-SNAPSHOT.jar

3、执行测试用例

因为是使用的 Springboot 开发框架,可以直接打开浏览器进行测试。

输入如下URL: http://localhost:9999/+/12/25

4、生成 dump,并重置覆盖率统计

指定要从何处获取jacoco统计数据,地址及端口应与 2.2 中的启动参数中一致

java -jar jacococli.jar dump --address localhost --port 6301 --destfile jacoco.exec --reset

参数说明:

--reset 生成覆盖率数据后,重置之前的统计,想要重新获取统计数据,需要删除之前生成的exec文件

--address 运行jacocoagent.jar的主机IP

--port 运行jacocoagent.jar的主机监控端口

执行后,将在目录下生成指令中指定的 exec 文件 jacoco.exec

5、生成覆盖率报告

想要生成报告,需要同时指定源文件及编译后的字节码文件。

指定类文件及源代码路径,并生成格式为 html 的报告样式。

java -jar jacococli.jar report jacoco.exec --classfiles  D:\Spring\JacocoTest\target\classes --sourcefiles D:\Spring\JacocoTest\src\main\java --html log

点击目录下的 index.html 将打开覆盖率信息

进入到测试类中,可以看到各方法的覆盖情况

进入到方法中,可以看到代码的覆盖情况。

绿色是完全覆盖,红色是未覆盖,黄色是部分覆盖。

想要获取全新覆盖率数据,需要删除步骤3中生成的 exec 文件,否则是累计覆盖率。

6 使用帮助

jacococli.jar 使用帮助

Usage: java -jar jacococli.jar report [] [--encoding ] [--help] [--html ] [--name ] [--quiet] [--sourcefiles ] [--tabwith ] [--xml ] : list of JaCoCo *.exec files to read --classfiles : location of Java class files --csv : output file for the CSV report --encoding : source file encoding (by default platform encoding is used) --help : show help --html --name : name used for this report --quiet : suppress all output on stdout --sourcefiles : location of the source files --tabwith : tab stop width for the source pages (default 4) --xml : output file for the XML report

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Jacoco统计接口测试的代码覆盖率
搜狗商城现有的接口自动化测试框架是使用Python搭建的,共900多条case,每天都会运行一次,从而监控是否有因开发代码变更或者新功能添加而导致的遗漏的bug。但我们只是依照测试用例来转换成自动化脚本、case,实际上并没有度量的指标,也不能保证测试的完整性,所以我们打算引入代码覆盖率这一指标来度量测试完整性。
用户5521279
2019/08/09
3.8K1
Jacoco统计接口测试的代码覆盖率
接口测试代码覆盖率(jacoco)方案分享
在做接口测试过程中,为了达到量化接口测试用例效果的目的,引入了代码覆盖率作为重要指标,在查阅相关文档和资料通过实践之后,大概得到了一个方案。如图:
FunTester
2019/07/27
2.4K0
JaCoCo增量覆盖率的基本实现原理
如图所示,在master分支提交了HelloController,然后从master拉了个新分支test;提交了第1次代码,增加了WorldController;提交了第2次代码,增加了DonController。增量的获取方式有两种:
dongfanger
2022/11/28
3.8K0
JaCoCo增量覆盖率的基本实现原理
jacoco测试覆盖率过滤非业务类
之前在做接口测试代码覆盖率(jacoco)方案的时候,漏了一些东西,这篇文章补一下。做使用jacoco做接口代码覆盖率测试的过程中,遇到一个问题:测试报告里面信息太多,很杂乱没有针对性,很多都是config和bean以及适配器的类,绝大部分没有业务代码,统计出来的覆盖率受影响比较大,不够准确。
FunTester
2020/05/25
3K0
SpringBoot接入JaCoCo实践教程
SpingBoot可以通过2种方式接入JaCoCo:Maven和Agent。Maven方式是静态接入,在编译时计算代码覆盖率。Agent方式是动态接入,服务启起来以后,能实时根据代码命中情况计算代码覆盖率。
dongfanger
2022/05/09
1.1K0
SpringBoot接入JaCoCo实践教程
只懂黑盒测试也能学会的代码覆盖率及精准化测试
测试覆盖率是对测试完成程度的度量。它通常依据某种覆盖准则来对测试用例执行情况进行衡量,以判断测试执行得是否充分 。 ——出自《 计算机科学技术名词 》第三版
霍格沃兹测试开发
2022/05/30
1.2K0
测开技能--测试覆盖率集成到SonarQube平台
在之前的文章,jenkins +sonarqube 对后端代码静态扫描,钉钉群通知执行结果 和ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率 分别讲了sonarqube代码扫描和Jacoco获取代码覆盖率,那么很多人会这么问了,我们进行了代码扫描,代码覆盖率,那么我们是否可以集成到一个平台上面,方便大家都可以查看呢,答案是可以的。本文就来和大家讲解下,如何通过ant 将Jacoco获取的覆盖率同步到sonarqube的平台。
雷子
2021/03/15
9930
测开技能--测试覆盖率集成到SonarQube平台
ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率
1.安装ant 环境,https://ant.apache.org/bindownload.cgi
雷子
2021/03/15
7260
ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率
服务端代码覆盖率统计入门
一直以来的工作重心和工作发展都是在移动端上,服务端的东西虽然不能说不会,但是也达不到精通.所以在闲暇的时候也会学习一下服务端的框架和基本知识.
测试加
2022/03/24
8260
服务端代码覆盖率统计入门
jacoco关于Java代码覆盖率你不得不会的基操!
ant是构建工具,内置任务和可选任务组成的.Ant运行时需要一个XML文件(构建文件)。
JavaEdge
2020/05/27
1.7K0
基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计
对于 JaCoCo,有所了解但又不是很熟悉。 "有所了解"指的是在 CI 实践中已经使用 JaCoCo 对单元测试代码覆盖率统计: 当代码 push 到代码仓库后,用 JaCoCo 进行单元测试代码覆盖率统计,并将相应数据推送到 SonarQube。 "不是很熟"指的是应用场景也仅限于此,并未进行过多研究与实践。
LinuxSuRen
2019/05/23
4.2K0
利用JaCoCo统计接口测试中代码覆盖率
做接口测试,很多时候都会听到,你接口测试的覆盖率是多少?很多人会回答80%,你怎么统计的,他说覆盖了80%的需求。这个回答没有错误,但是片面,我们不能只考虑需求的覆盖率,还有业务的覆盖率,场景的覆盖率,接口的覆盖率,代码的覆盖率等,本文介绍接口测试的代码覆盖率。那么我们来看看如何是实现的。
雷子
2021/03/15
1.3K0
利用JaCoCo统计接口测试中代码覆盖率
测开技能之--如何利用ant jacoco 合并覆盖率报告
在之前的文章,利用JaCoCo统计接口测试中代码覆盖率 和 ant+Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率 文章中介绍了如何获取测试代码的覆盖率,但是我们有时候也会遇到这样的需要。
雷子
2021/03/15
1.4K0
测开技能之--如何利用ant jacoco 合并覆盖率报告
jacoco关于Java代码覆盖率你不得不会的基操!
ant是构建工具,内置任务和可选任务组成的.Ant运行时需要一个XML文件(构建文件)。
JavaEdge
2020/03/17
1K0
如何知道我们的E2E测试覆盖率?
在单元测试中,很容易知道已经覆盖了哪些代码区域。但是我们能及时知道API调用的动态范围吗?我们一直在思考,既然已经编写了许多 E2E 测试用例,但是我们应该继续编写多少剩余测试?
ThoughtWorks
2020/09/25
1.5K0
jacoco不是奶茶,却像奶茶一样美味,不尝一下吗?
距离上篇文章挺久的了,天天的也不知道在干嘛,时间就溜过去了。今天聊聊前段时间整理的jacoco。Jacoco是一个针对java语言开源的代码覆盖率工具。
香菜聊游戏
2021/05/26
5320
jacoco不是奶茶,却像奶茶一样美味,不尝一下吗?
Jacoco代码覆盖率统计
Jacoco是一个开源的覆盖率工具。Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。本文使用的环境是:k8s+jenkins 构建的,其中涉及到了在node 节点机的容器中生成jacoco.exec 文件,然后将其拷贝到节点机,再从节点机将jacoco.exec 文件拷贝到jenkins 的代码库中,用于生成报告 。
Wu_Candy
2022/07/04
1.1K0
Jacoco代码覆盖率统计
mock测试及jacoco覆盖率
单元测试是保证项目代码质量的有力武器,但是有些业务场景,依赖的第三方没有测试环境,这时候该怎么做Unit Test呢,总不能直接生产环境硬来吧?
菩提树下的杨过
2020/09/11
4.5K1
jacoco无法读取build.xml配置中源码路径解决办法
本人在使用jacoco做用例的代码覆盖率的时候遇到一个问题,就是按照文档配置的build.xml中的class文件路径和源码文件路径,但是在第一次尝试成功之后,我为了区分各个项目源码,做文件路径做了修改,就一直不成功了,经过N次的错误尝试,终于发现了文档中缺失的部分,就是class文件路径并没有严格的要求,包括java启动参数里面的include参数也没有严格的要求,但是特么源码路径就必需得配置到com包上一级路径,一般来说也就是main/java这一层,着实尴尬不已。分享一下我到 build.xml配置文件。
FunTester
2019/07/27
1.8K0
jacoco 生成单测覆盖率报告
jacoco 是一个开源的覆盖率工具,它针对的开发语言是 java。其使用方法很灵活,可以嵌入到 ant、maven 中;可以作为 Eclipse 插件;可以作为 javaAgent 探针监控 java 程序等等。
JMCui
2020/05/09
3.4K0
jacoco 生成单测覆盖率报告
推荐阅读
相关推荐
Jacoco统计接口测试的代码覆盖率
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验