只懂黑盒测试也能学会的代码覆盖率及精准化测试

news2024/11/16 11:42:40

测试覆盖率是对测试完成程度的度量。它通常依据某种覆盖准则来对测试用例执行情况进行衡量,以判断测试执行得是否充分

——出自《
计算机科学技术名词 》第三版

今天文章中我们给大家介绍覆盖率统计及覆盖率分析。在10月13日20:00,资深测试开发架构师思寒将光临直播间手把手教大家如何搞定精准化测试!

温馨提示:你以为代码覆盖率与精准化测试知识与黑盒测试无缘?不,你只是没遇到思寒讲的这节课。

常见覆盖率统计工具

  • emma
  • cobertura
  • jacoco

emma 与 cobertura 是为单元测试而设计的覆盖率统计,jacoco 与 emma 同属于一家公司,但是是为了更广泛的覆盖率统计而设计的工具。

Jacoco

jacoco 的文档中有个 mission 章节,里面对 jacoco 的定位描述的很好。原文的大意是说其他的工具没有得到积极有效的维护,而且其他的工具都是为了单一任务而设计,他们不是为了 “集成” 而生。从这一点上我们就可以看出 jacoco 的设计理念。

得益于 jacoco 的设计理念,以及良好的 api 设计,它可以轻松的与已有的工具集成,甚至进行平台化。它也可以同时用于单元测试与集成测试,所以是一款非常优秀的覆盖率统计工具,很多公司的精准化测试,就是重度依赖了 jacoco。

覆盖率分析原理

要了解代码覆盖率的统计原理,我们就需要去深入了解 jvm 的机制。这方面的知识是 java 领域的高端进阶知识,限于篇幅,我们只讲解下大概的原理,完整内容请参考 VM 虚拟机系列的书籍,以及 newrelic 早年发布的若干代码插桩的资料。

简单说下原理,java 源代码会被 javac 编译为 class 文件,class 文件保存了 class 的基本信息与 jvm 的指令集。java 的底层 runtime,也就是 jvm 在解析 class 的时候,会把文件格式的 class 读取到内存并运行。android 也是借鉴了这一整套的设计理念,android 上的 runtime 其实是 dalvik 与 art。

当我们要统计代码覆盖率的时候,就需要在代码的执行路径上加入探针分析。通常是在读取类的时候,在关键的指令块的出口与入口增加标记。当指令块被执行后,就会命中探针并完成记录。


要修改最底层的 jvm 字节码往往是比较麻烦的,需要精通 jvm 的各种指令以及 java class 结构。这方面的处理目前已有有非常成熟的开源项目可以做大了,如下就是一些知名的字节码修改工具。

  • ASM
  • JavaAssist
  • ByteBuddy、BTrace、JVM-Sandbox
    其中 ASM 是所有字节码操作的底层基础,是最底层的字节码修改工具。其他工具是它之上的一些高级封装。借助于这些工具与 JVM 自身的一些调试特性,我们就可以对 jvm 代码或者进程进行便捷的操纵了。

插桩方式

1080×487 94.4 KB


插桩方式有很多种,常见的方式如下

  • 源代码插桩:offline 插桩,支持 android
  • 字节码插桩:offline 插桩,支持 android
  • javaagent 模式:脱离代码在运行时插桩,on the fly 模式
    jacoco 支持字节码插桩与 javaagent 这两种插桩方式。也就是就算没有源代码也可以统计到覆盖率数据,但是最后分析的时候,还是要结合源代码才能获得更多的覆盖率细节数据。毕竟覆盖率的统计,并不是只是简单的覆盖率数据本身的指标高低。

jacoco的工作方式

jacoco 支持四种工作模式

  • file:进程结束的时候在本地生成文件
  • tcpserver:开启端口等待客户端获取覆盖率
  • tcpclient:主动把覆盖率数据发送出去
  • none:不生成覆盖率
    很多人都会使用 file 模式,但是 tcp server 模式才是最易用的。因为不需要申请服务器的文件访问权限就可控制覆盖率数据。你可以根据自己公司的部署情况选择合适的工作模式。

on the fly 插桩模式是使用最多的。首先需要在你的被测 java 程序启动的时候,加入 jvm 的一些 javaagent 参数。

-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]
destfile
output:file、tcpserver、tcpclient、none
address
port

你可以自己设置适合的工作模式。
离线插桩模式,适合 android 的覆盖率统计,需要借助于 maven、gradle 等构建工具的 instrument 指令。

jacoco-cli 是 jacoco 的一个组件,可以在不依赖 maven、gradle 构建工具的情况下完成对代码的分析。主要用于 tcpserver 工作模式下。
用法如下

java -jar jacococli.jar dump [--address <address>] --destfile <path> [--help] \
[--port <port>] [--quiet] [--reset] [--retry <count>]

这是学院里的一个动手演练的小场景,统计 jmeter 工具的启动覆盖率

project_root=/Users/seveniruby/temp/java_2/jacoco/apache-jmeter-5.2.1
jacoco_cli_jar=org.jacoco.cli-0.8.6-20200329.124045-45-nodeps.jar

java -javaagent:org.jacoco.agent-0.8.6-20200329.124039-45-runtime.jar \
  -jar $project_root/bin/ApacheJMeter.jar

#退出jmeter

#生成覆盖率报告
java -jar $jacoco_cli_jar report jacoco.exec \
--classfiles "$project_root/bin/ApacheJMeter.jar" \
--classfiles $project_root/lib/ext/ApacheJMeter_http.jar \
--html jmeter_coverage/

#生成带有源代码的覆盖率报告
 java -jar $jacoco_cli_jar report  jacoco.exec  \
 --classfiles "$project_root/bin/ApacheJMeter.jar" \
 --classfiles $project_root/lib/ext/ApacheJMeter_http.jar \
 --html jmeter_coverage/ --sourcefiles ~/projects/jmeter/src/

#生成xml报告
java -jar $jacoco_cli_jar report jacoco_tcpserver2.exec  \
--classfiles "$project_root/bin/ApacheJMeter.jar" \
--classfiles $project_root/lib/ext/ApacheJMeter_http.jar \
--xml  jmeter_coverage_tcpserver2/jacoco.xml

完整代码请参考学员论坛中的课程帖中的源代码。

sonarqube 可以分析 jacoco 的 exec 文件与 xml 文件,并自动导入覆盖率。exec 文件的分析后续会放弃支持,主支持 xml 文件的分析。

 sonar-scanner   \
  -Dsonar.host.url=http://sonarqube.testing-studio.com:9000   \
  -Dsonar.login=$SONARQUBE_TOKEN   \
  -Dsonar.projectKey=jmeter   \
  -Dsonar.projectVersion=1.0  \
  -Dsonar.coverage.jacoco.xmlReportPaths=$PWD/jmeter_coverage_tcpserver2/jacoco.xml \
  -Dsonar.projectBaseDir=/Users/seveniruby/projects/jmeter/ \
  -Dsonar.java.binaries=/Users/seveniruby/projects/jmeter/

导入覆盖率

850×394 94.1 KB


可以通过如下参数限定要分析代码的范围,通常是指明要覆盖的 package 范围

  • sonar.sources
  • sonar.inclusions

导入覆盖率

sonarqube 可以智能分析新老版本之间的新增代码的覆盖率,这点非常不错,以前一些分析代码 diff 的工作就节省了。他的代码分析也比较智能,简单的换行并不会干扰代码 diff 的分析范围。

850×557 45.8 KB

通过覆盖率数据

sonarqube 支持两种通用的测试数据导入

  • 通用覆盖率数据:sonar.coverageReportPaths
  • 通用测试执行数据:sonar.testExecutionReportPaths
    这样方便与各种框架进行集成,也方便测试工程师二次定制。
    通用测试数据模板。

1080×673 227 KB

通用覆盖率数据模板

1080×293 84.4 KB


在 sonarqube 的 scanner 分析中,加入对应的配置参数即可导入通用测试数据。
通用测试数据导入的常见用途

  • 将各种测试工具的测试报告转换为 sonarqube 支持的格式从而导入平台
  • 将各种覆盖率工具的覆盖率报告转换为标准格式导入平台
  • 根据需求对差异 diff 覆盖率进行定制,比如除了对新增代码做覆盖,还要对使用了新增代码的依赖代码也做分析

代码的 diff 分析是一个比较大的话题,diff 只是对代码的最简单的一个分析策略,要想深入的理解代码,我们还需要更进一步的分析代码的调用链。我们先看最简单的代码 diff 分析工具。
代码 diff 分析工具

  • JGit:git 分析工具
  • JavaParser:语法分析
  • ASM:读取字节码
  • javap:jdk 自带字节码分析工具

精准化测试一直是 BAT 名企大厂必用技能。但黑盒测试苦于代码功底薄弱,无法消化理解并掌握。

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

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

相关文章

Vue_cli中config文件配置详细注解

我在scr同级目录下创建了config文件夹&#xff0c;里边包含三个文件 它们3个有引用关系 dev引用prod prod.env.js文件 /* * process.argv.splice(2)[0]返回的是node.js的绝对路径 * /usr/local/bin/node */ let HOST process.argv.splice(2)[0] || prod module.exports {NO…

项目实战之旅游网(十)前台用户注册

目录 一.网站首页 二.编写注册界面 三.生成验证码 四.注册流程 五.编写注册方法 六.发送邮件配置 一.网站首页 static/frontdesk下存放前台静态资源&#xff0c;而templates/frontdesk是前台页面 二.编写注册界面 在上个界面点击注册就可以跳转到注册界面 在这里遇到一…

2022 年上海市大学生程序设计竞赛 M. My University Is Better Than Yours

大家总喜欢搞些什么排行榜。有一说一&#xff0c;排行榜通常不重要&#xff0c;除非——比如你老板要你做一下年终总 结。 为了实现建设世界一流大学和建设世界一流学科的目标&#xff0c;不少大学都用各种方式提升排名&#xff1a;发表论文、 申请基金、提升多样性. . . 不过…

Linux操作系统实验4——内存映射

实验要求&#xff1a; 1.在源码中查看file_operations和vm_operations_struct结构定义及其操作对象的方法&#xff0c;重点查看mmap方法fault方法的参选类型。 2.设备模块代码的编写和调试&#xff0c;重新编写file_operations结构中的mmap方法&#xff0c;和vm_operations_str…

美团一面:能不能通俗的解释下为什么要有意向锁这个东西?

面试真题&#xff0c;用通俗的例子解释清楚 MySQL 为什么有了表锁和行锁之后&#xff0c;还要引入意向锁 众所周知&#xff0c;InnoDB 中既有读锁也有写锁&#xff0c;也称为共享锁和排他锁&#xff0c;这两种锁既可以加在整张表上&#xff0c;也可以加在行上。 MySQL 自身就提…

【Apifox】设置apiFox自动获取token

文章目录问题描述解决方案注意事项参考文章问题描述 接口测试时&#xff0c;每次都需要手动登录获取token&#xff0c;先登录系统&#xff0c;从浏览器中复制token&#xff0c;再到apifox的接口上把token帖上去&#xff0c;然后才能去测试具体的接口&#xff1b;更麻烦的是&am…

【实时数仓】热度关键词接口、项目整体部署流程

文章目录一 热度关键词接口1 Sugar配置&#xff08;1&#xff09;图表配置&#xff08;2&#xff09;接口地址&#xff08;3&#xff09;数据格式&#xff08;4&#xff09;执行SQL2 数据接口实现&#xff08;1&#xff09;创建关键词统计实体类&#xff08;2&#xff09;Mappe…

小黑hbase终于勉强跑到了自己的m1 Macbook上啦,虽然终端用不了,但是能从happybase访问的日常积累:happybase简单使用

1.happybase连接 # 连接操作 import happybase# 建立连接 con happybase.Connection(localhost, 9090) con.open() # 输出所有表名称 print(con.tables()) # 关闭传输 con.close() con.open()2.创建表格 # 创建表格 con happybase.Connection(localhost, 9090) # 默认9090…

Android 图像混合技术

Android 图像混合技术 色彩知识 色彩 光学三原色 光学三原色由&#xff1a;红、绿、蓝组成。 色值分别是&#xff1a; 红&#xff08;red &#xff09;&#xff1a;#FF0000 RGB&#xff08;255&#xff0c;0&#xff0c;0&#xff09;绿&#xff08;green&#xff09;&am…

第十九讲:神州路由器基础知识

路由器简介路由器&#xff08;Router&#xff09;是连接Internet中多个网络或网段的网络设备&#xff0c;它能将不同网络或网段之间的数据信息进行“翻译”&#xff0c;以使它们能够相互“读”懂对方的数据&#xff0c;实现不同网络或网段的互联互通。此外&#xff0c;它会根据…

数据平台建设指南(上)

前言 年底了&#xff0c;整理了下过去做的一些项目&#xff0c;希望能够给大数据行业的同学提供些大数据平台建设的思路。内容大致分五部分&#xff1a;数据采集&#xff0c;数据存储、数据计算、基础平台以及数据治理篇。由于涉及到的内容较多&#xff0c;打算分成两篇文章&am…

PHY驱动注册部分

SOC可以对PHY 进行配置或者读取PHY 相关状态&#xff0c;这个就需要 PHY 内部寄存器去实现了。PHY 芯片寄存器地址空间为 5位&#xff08;支持访问32个寄存器).IEEE 定义了0~15这 16个寄存器的功能。而 16~31这16 个寄存器由厂商自行实现。 就是说不管你用的哪个厂家的 PHY 芯…

SAP ABAP——SAP简介(三)【S/4 HANA开发环境】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

linux常用命令(三)-目录操作

目录创建 - mkdir 我们可以使用mkdir&#xff08;make directory&#xff09;来创建目录。 示例 目录删除 - rm 可以使用rm&#xff08;remove&#xff09;来删除一个目录 语法 rm [-irf] name ...i&#xff1a;删除前逐一询问确认r&#xff1a;将目录及以下之档案亦逐一删…

转转AB平台的设计与实现

导读 在数据驱动时代&#xff0c;不管是在产品功能迭代还是策略决策时都需要数据的支撑。那么&#xff0c;当我们准备上线一个新功能或者策略时&#xff0c;如何评估新老版本优劣&#xff0c;即数据的可量化就成了问题。这个时候就需要引入 A/B Test 了。 一、A/B Test 是什么…

Tomcat基本用法

Tomcat基本用法一、Tomcat 是什么二、下载安装三、目录结构四、启动服务器五、部署静态页面一、Tomcat 是什么 汤姆猫&#xff1f; 事实上&#xff0c;Java 世界中的 “汤姆猫” 完全不是一回事&#xff0c;但是同样大名鼎鼎 ~ Tomcat 是一个 HTTP 服务器。 前面我们已经学…

公司如何做好舆情监控,舆情监控解决方案有哪些?

随着互联网快速发展&#xff0c;企业网络舆情动态成为决策发展的重要依据&#xff0c;所以做好网络舆情监控至关重要&#xff0c;接下来TOOM舆情监测小编带您简单了解公司如何做好舆情监控&#xff0c;舆情监控解决方案有哪些? 一、公司如何做好舆情监控 舆情监控是指通过不…

Spring Boot 使用 SpringDoc 库的 Swagger3.0

Swagger 定义 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法&#xff0c;参数和模型紧密集成到服务器端的代码&#xff0c;允许API来始终保持同步…

房产管理系统平台安全性分析?

房产管理系统是数图互通公司自主研发的FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b;通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。 以下是…

FL Studio21电脑版免费音乐编曲宿主软件下载

编曲主要考验电脑的处理器&#xff08;CPU&#xff09;性能、声卡。所以配置电脑的时候有条件的伙伴可以着重考虑这两方面。现在市面上惠普、戴尔、华为、苹果等品牌的电脑&#xff0c;在四五千这个范围的商务本&#xff0c;就可以胜任编曲工作。但是在一些较为庞大的工程中可能…