第2.3节 Android生成全量和增量报告

覆盖率报告(Coverage Report)是一种软件测试工具生成的报告,用于评估测试用例对代码的覆盖程度。它通过统计代码中哪些部分已经被测试用例执行过,哪些部分还没有被执行,来衡量测试的充分性。覆盖率报告通常包括以下几种类型的覆盖率指标:
1.行覆盖率(Line Coverage):
     - 衡量代码中每一行是否被至少执行过一次。

2.分支覆盖率(Branch Coverage):
    - 衡量代码中每个条件分支(如if语句、switch语句等)是否都被执行过。

3.函数覆盖率(Function Coverage)
    - 衡量代码中每个函数是否都被调用过。

4.语句覆盖率(Statement Coverage):
    - 衡量代码中每个语句是否都被执行过。

5.路径覆盖率(Path Coverage)
    - 衡量代码中所有可能的执行路径是否都被覆盖到。

覆盖率报告的作用:

1.评估测试质量:
- 通过覆盖率报告,开发人员和测试人员可以了解当前测试用例对代码的覆盖情况,从而评估测试的质量和充分性。

2.发现未测试的代码:
- 覆盖率报告可以帮助识别那些从未被执行过的代码段,这些代码段可能存在潜在的缺陷或逻辑错误。

3.优化测试用例:
- 根据覆盖率报告,可以针对性地增加或修改测试用例,以提高代码的覆盖率,确保更多的代码逻辑得到测试。

4.提高代码质量:
- 通过提高代码覆盖率,可以减少代码中的潜在缺陷,提高软件的整体质量和可靠性。

5.支持持续集成:
- 在持续集成(CI)流程中,覆盖率报告可以作为一个重要的指标,帮助团队监控和维护代码质量。如果覆盖率低于某个阈值,可以触发警报或阻止代码合并。

6.辅助代码审查:
- 覆盖率报告可以作为代码审查的一部分,帮助审查人员更好地理解代码的测试情况,从而提出更有针对性的改进建议。

7.风险管理:
- 通过覆盖率报告,项目管理者可以更好地评估项目的测试风险,制定相应的风险管理策略。

2.3.1 Android生成全量报告

Jacoco插件有完整的一套覆盖率相关功能,所以当采集了覆盖率数据文件后,就可以生成覆盖率报告。这样没有指定变化的内容,直接对整个项目生成的报告是全量报告,目前有两种生成覆盖率报告的方法,我们将逐一介绍。

一,Gradle任务生成报告

1,添加gradle任务
在采集了覆盖率数据文件,要生成覆盖率任务的项目中,找到app的gradle文件,添加如下任务:
task jacocoTestReport(type: JacocoReport) {reports {xml.enabled = truehtml.enabled = true}def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*']def debugTree = fileTree(dir: "$buildDir/intermediates/javac/debug", excludes: fileFilter)def mainSrc = "$project.projectDir/src/main/java"sourceDirectories.from = files([mainSrc])classDirectories.from = files([debugTree])executionData.from = files("$buildDir/outputs/code_coverage/debugAndroidTest/connected/coverage.ec")
}
注意:
  • sourceDirectories:项目的源码文件,要指到java层,否则报告中无法渲染代码覆盖情况。
  • classDirectories:项目构建的类文件,注意是插桩后构建的文件,但在javac文件夹下。
  • executionData:覆盖率数据文件路径,如果没有这个路径,请创建这个目录,并把上节下载的覆盖率数据文件放到这个目录中,重新命名。
2,生成覆盖率报告
添加任务后同步项目,可以看到gradle文件中对应任务的左侧有一个执行标示,单击选择"Run Android....."
Android Studio输出如下,生成覆盖率报告。
也可以在命令行下执行 ./gradlew jacocoTestReport,同样能生成报告。报告路径如下:app/build/reports/jacoco/jacocoTestReport/

二,命令行生成报告

Jacoco还可以不使用Android Studio直接使用命令行生成报告,此时需要下载jaoco的包: EclEmma - JaCoCo Java Code Coverage Library,下载指定的包,如我们使用的0.8.7的包。
打开压缩包,找到libs文件夹,就可以看到jacococli.jar包,这个就是要使用的工具。
命令使用方法:
java -jar ${jacococli.jar的路径} report ${exec文件路径} 
--classfiles ${类文件路径} --sourcefiles ${源码文件路径,要到/src/main/java} 
--encoding utf-8 --html ${报告路径}
所以生成上面项目的覆盖率报告,命令行方法可以是:
报告内容和上面完全一样:

2.3.2 Android增量报告(Incremental Report)

增量报告是指在连续的构建或测试过程中,仅显示相对于上一次构建或测试的变化部分的报告。这种报告方式主要用于跟踪和分析代码覆盖率的变化,特别是在持续集成(CI)和持续交付(CD)环境中非常有用。

增量报告的特点
1.变化部分:
- 增量报告只关注当前构建与上一次构建之间的差异,而不是整个项目的完整覆盖率。
- 例如,如果某个文件在上一次构建中已经完全覆盖,而在当前构建中没有新的测试用例,增量报告将不会显示该文件的覆盖率信息。


2.效率:
- 通过只显示变化部分,增量报告可以更快地生成和解析,减少资源消耗。
- 在大型项目中,增量报告可以显著提高构建和测试的速度。


3.问题定位:
- 增量报告有助于快速定位新引入的代码或测试用例对覆盖率的影响,便于开发者及时发现和修复问题。


4.持续集成:
- 在持续集成环境中,增量报告可以作为构建过程的一部分,帮助团队实时监控代码质量的变化。
- 例如,如果新提交的代码导致覆盖率下降,增量报告可以立即提醒开发人员进行修正。


增量报告的应用场景:
1.代码审查:
- 在代码审查过程中,增量报告可以帮助审查者快速了解新提交的代码对现有测试用例的覆盖情况,确保新代码的质量。


2.持续集成:
- 在持续集成系统中,增量报告可以作为构建过程的一部分,自动检测每次提交对代码覆盖率的影响,确保代码质量的持续改进。


3.回归测试:
- 在回归测试中,增量报告可以帮助测试人员快速识别新引入的代码是否引入了新的问题,确保回归测试的高效性。

2.3.3 生成增量报告的方案

网上生成增量报告的方案很多,介绍性文档较多,具体使用效果不得而知。主要集中在如下几种:
1,diff-cover
项目地址: GitHub - Bachmann1234/diff_cover: Automatically find diff lines that need test coverage.,通过python处理diff信息以及生成增量覆盖率报告。
缺点:增量信息较多时,处理速度慢。生成报告样式和jacoco完全不同,有一定的学习成本。
2,增量插桩
根据需求的diff信息,在引入jacoco插件时,进行针对性插桩,生成报告的时候只生成插桩的文件,具体方案网上有本处不再展开: https://juejin.cn/post/6920029313316159502。
缺点:生成报告符合要求,但是无法同时采集全量覆盖率数据,在日常测试过程中需要同时生成全量和增量的覆盖率报告,此方案需酌情使用。
3,二次开发jacococli工具
网上的开源项目: jacoco: jacoco二开,支持增量代码覆盖率 可以通过命令行指定diff信息,并根据diff信息生成报告,渲染增量代码,完全符合要求。
缺点:需要有一定的开发能力,对项目重新打包;项目较老,需要做相应的修改。
覆盖率相关功能是精准测试平台的核心,为了更好的开发我们的平台,增量报告采用第三种方案,下节将详细介绍如何使用此方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

奇迹科技:蓝牙网关赋能少儿篮球教育的创新融合案例研究

一、引言 本文研究了福建奇迹运动体育科技有限公司(简称‘奇迹科技’)如何利用其创新产品体系和桂花网蓝牙网关M1500,与少儿篮球教育实现深度融合。重点分析其在提升教学效果、保障训练安全、优化个性化教学等方面的实践与成效,为…

高考志愿填报管理系统基于Spring Boot SSM

目录 摘要 ‌一、系统需求分析‌: 1.1用户主体分析 1.2 功能需求分析 1.3、非功能需求分析 二、‌技术实现‌: ‌三、结论‌: 摘要 该系统主要实现了:学生信息管理、院校信息查询、专业信息展示、志愿填报模拟、智能推荐管…

网络HTTPS协议

Https HTTPS(Hypertext Transfer Protocol Secure)是 HTTP 协议的加密版本,它使用 SSL/TLS 协议来加密客户端和服务器之间的通信。具体来说: • 加密通信:在用户请求访问一个 HTTPS 网站时,客户端&#x…

LintCode第1712题 - 和相同的二元子数组

描述 在由若干 0 和 1 组成的数组 A 中,有多少个和为 S 的非空子数组 样例 1: 输入:A [1,0,1,0,1], S 2 输出:4 解释: 如下面黑体所示,有 4 个满足题目要求的子数组: [1,0,1] [1,0,1] [1,0,1,0] [0,1,…

【MySQL笔记】库操作与表操作

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:MySQL 🌹往期回顾🌹:【MySQL】认识MySQL 🔖流水不争,争的是滔滔不 一、库操作1.1 显示数据库1.2 创建数据库…

SpringBoot3实战(SpringBoot3+Vue3基本增删改查、前后端通信交互、配置后端跨域请求、数据批量删除(超详细))(3)

目录 一、从0快速搭建SpringBoot3工程、SpringBoot3集成MyBatis、PageHelper分页查询的详细教程。(博客链接) 二、实现前端与后端通信对接数据。(axios工具) &#xff08;1&#xff09;安装axios。(vue工程目录) &#xff08;2&#xff09;封装请求工具类。(request.js) <1&…

单播、广播、组播和任播

文章目录 一、单播二、广播三、组播四、任播代码示例&#xff1a; 五、各种播的比较 一、单播 单播&#xff08;Unicast&#xff09;是一种网络通信方式&#xff0c;它指的是在网络中从一个源节点到一个单一目标节点对的传输模式。单播传输时&#xff0c;数据包从发送端直接发…

【实战】deepseek数据分类用户评论数据

在平时的工作中&#xff0c;我们会遇到数据分类的情况&#xff0c;比如将一些文本划分为各个标签。如果人工分类这块的工作量将是非常大&#xff0c;而且分类数据的准确性也不高。我们需要用到一些工具来实现。提高效率的同时也提高准确率。 1.示例数据 用户ID 时间戳 评论场…

技术视角解读:游戏出海如何借助AWS全球架构突破性能与合规瓶颈

【场景痛点】 某二次元卡牌手游团队在东南亚市场遭遇联机延迟投诉率高达37%&#xff0c;日本地区因数据合规问题面临下架风险。在传统IDC架构下&#xff0c;运维团队需要同时管理3个区域的物理服务器&#xff0c;版本更新耗时长达6小时。 【技术架构升级】 通过AWS Local Zones…

【JavaEE】网络编程socket

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

第16届蓝桥杯单片机4T模拟赛三

本次模拟赛涉及的模块&#xff1a;基础三件套&#xff08;Led&Relay&#xff0c;按键、数码管&#xff09; 进阶单件套&#xff08;pcf8591的AD模块&#xff09; 附件&#xff1a; 各模块底层代码在文章的结尾 一、数码管部分 1.页面1 页面1要显示的格式是&#xff1a; …

网络华为HCIA+HCIP IPv6

目录 IPv4现状 IPv6基本报头 IPv6扩展报头 IPv6地址 IPv6地址缩写规范 ​编辑 IPv6地址分配 IPv6单播地址分配 IPv6单播地址接口标识 IPv6常见单播地址 - GUA &#xff08;2 / 3 开头&#xff09; IPv6常见单播地址 - ULA IPv6常见单播地址 - LLA IPv6组播地…

基于YOLOv8深度学习的智能小麦害虫检测识别系统

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

Mac:Maven 下载+安装+环境配置(详细讲解)

&#x1f4cc; 下载 Maven 下载地址&#xff1a;https://maven.apache.org/download.cgi &#x1f4cc; 无需安装 Apache官网下载 Maven 压缩包&#xff0c;无需安装&#xff0c;下载解压后放到自己指定目录下即可。 按我自己的习惯&#xff0c;我会在用户 jane 目录下新建…

XSS-labs(反射型XSS) 靶场 1-13关 通关

目录 前言 XSS漏洞概述 XSS漏洞分类 通关日记 level1 分析 解题 ​level2 分析 解题 方法一&#xff1a;闭合标签 方法二&#xff1a;闭合双引号 level3 分析 解题 level4 分析 解题 level5 分析 解题 level6 分析 解题 level7 分析 解体 level8 …

GPT-5 将免费向所有用户开放?

GPT-5 将免费向所有用户开放&#xff1f; 硅谷知名分析师 Ben Thompson 最近与 OpenAI CEO Sam Altman 进行了一场深度对谈&#xff0c;其中Sam Altman透漏GPT-5将免费向大家发放。 OpenAI 这波操作可不是一时冲动&#xff0c;而是被逼出来的。DeepSeek 这个新秀横空出世&am…

【杂记二】git, github, vscode等

一、前言 暂时空着... 二、git 2.1 可能的疑问 1. VSCode 项目名和 GitHub 仓库名是否需要一致&#xff1f; 不需要一致。 VSCode 项目名&#xff08;也就是你本地的文件夹名字&#xff09;和 GitHub 仓库名可以不一样。 Git 是一个分布式版本控制系统&#xff0c;它主要关…

数学爱好者写的编程系列文章

作为一个数学爱好者&#xff0c;我大学读的专业却不是数学专业&#xff0c;而是跟计算机有关的专业。原本我对编程一窍不通&#xff0c;平时上课也是在看数学文献&#xff0c;作业基本靠同学&#xff0c;考试及格就行。不过后来因为毕业的压力&#xff0c;我还是拥抱编程了&…

FPGA 以太网通信(四)网络视频传输系统

一、网络视频传输系统 网络视频传输系统使用ov5640摄像头采集数据&#xff0c;通过组件UDP帧将视频数据实时传输给上位机。 ov5640视频传输带宽 像素分辨率设为640x480&#xff0c;帧率设为60帧&#xff0c;像素格式为RGB565&#xff0c;传输带宽为 640 x 480 x 16bit x 60 fps…

[leetcode]1631. 最小体力消耗路径(bool类型dfs+二分答案/记忆化剪枝/并查集Kruskal思想)

题目链接 题意 给定 n m n\times m nm地图 要从(1,1) 走到 (n,m) 定义高度绝对差为四联通意义下相邻的两个点高度的绝对值之差 定义路径的体力值为整条路径上 所有高度绝对差的max 求所有路径中 最小的路径体力值是多少 方法1 这是我一开始自己写的记忆化剪枝 比较暴力 时…