推荐一款流量录制回放工具:JVM-sandbox-repeater!

在软件开发和测试过程中,我们经常会遇到需要对网络请求进行录制和回放的需求,以便进行调试、测试和分析。为了模拟真实的用户请求,我们通常会使用各种流量录制回放工具来记录并重放网络请求。

其中,jvm-sandbox-repeater 是一款功能强大的流量录制回放工具,可以帮助我们轻松实现对网络请求的录制和回放。

1、介绍

jvm-sandbox-repeater 是一个基于 JVM-Sandbox 采用Java来实现的流量录制回放工具,或者可以理解为它是一个基于Java虚拟机的插件,可以直接运行中JVM中,无需对目标应用程序进行任何修改。

它可以在运行时自动拦截和记录 Java 应用程序的网络请求和响应。它是利用JVM Sandbox的字节码增强技术,对Java应用进行无侵入式的流量录制和回放。这意味着通过使用jvm-sandbox-repeater,我们可以在不修改源代码的情况下,即可轻松实现流量的录制和回放功能。

2、功能特性

jvm-sandbox-repeater 的主要功能特性包括有:

  • 无侵入式录制:jvm-sandbox-repeater 通过 JVM-Sandbox字节码增强技术,在运行时对Java应用进行录制,在运行时自动拦截和记录网络请求,无需对源代码进行任何修改。

  • 支持多种协议:jvm-sandbox-repeater 支持多种网络协议,包括HTTP/HTTPS、gRPC、Dubbo、TCP 等多种协议的拦截和记录。

  • 灵活的配置:jvm-sandbox-repeater 提供了丰富的配置选项,可以根据需要对录制和回放的行为进行定制。

  • 高性能:jvm-sandbox-repeater 基于 JVM-Sandbox 技术,具有较低的性能损耗,对应用程序的影响较小。

  • 高精度录制:该工具能够精确记录请求和响应的详细信息,包括请求头、请求体、响应状态码、响应体等,确保回放的准确性。

  • 灵活的回放策略:支持多种回放策略,如按照时间顺序回放、并发回放等,满足不同的测试需求。

  • 可视化界面:提供易于使用的可视化界面,方便用户进行流量的录制、管理和回放操作,降低使用门槛。

  • 高扩展性:基于JVM Sandbox平台,易于与其他工具进行集成和扩展。

3、应用场景

在工作中使用jvm-sandbox-repeater工具,主要就是借用其中的三类基本能力:

  • 流量录制:jvm-sandbox-repeater 可以实时捕获目标应用程序的网络请求,并将其记录下来。通过录制功能,获取目标应用程序的实际网络请求数据,用于后续的分析和调试。

  • 流量回放:jvm-sandbox-repeater 支持对录制的网络请求进行回放。通过回放功能,模拟目标应用程序的网络请求,以验证其正确性和稳定性。

  • 请求修改:jvm-sandbox-repeater 允许开发人员对录制的网络请求进行修改。通过修改功能,调整网络请求的参数和头部信息,以模拟不同的场景和测试用例。

借助上述这三类基本能力,在测试开发工作中,常用于如下场景应用:

  • 接口测试:通过录制生产环境的真实接口流量,在测试环境中进行回放,可以模拟各种复杂场景,验证接口的稳定性和性能。

  • 性能测试:利用录制的流量数据进行性能测试,能够更真实地反映系统的性能表现,帮助发现和解决性能瓶颈。

  • 兼容性测试:通过在不同版本的Java应用或不同环境下回放录制的流量,可以验证系统的兼容性。

4、原理一:JVM-Sandbox技术是如何工作的?

jvm-sandbox-repeater 是一个基于 JVM-Sandbox 实现的流量回放工具,但估计很多读者,对于JVM-Sandbox是什么,以及它是如何工作的还不太清楚,这里扩展一下。

JVM-Sandbox简单来说,它是一款Java应用沙箱,旨在为Java应用程序提供一个隔离、安全的运行环境。沙箱(Sandbox)技术的主要目的是保护系统安全和稳定性,同时提供更好的应用程序开发和测试环境。通过隔离程序运行的环境,沙箱技术可以防止程序访问到不应访问的资源和数据,从而降低安全风险。

JVM-Sandbox的工作原理可以概括为以下几个关键步骤:

1、类加载:在JVM沙箱中,所有的类都由Java虚拟机的类加载器加载。类加载器负责从文件系统、网络或其他来源加载Java类,并将其转换为可执行代码。

2、字节码验证:加载过程中,JVM会对字节码进行验证,以确保其符合Java语言规范。这一步骤的目的是检测潜在的安全漏洞,如类型转换错误、数组越界访问等。

3、安全检查:经过字节码验证后,JVM会进一步进行安全检查,限制应用程序的行为,防止对系统造成危害。这包括对应用程序的访问权限和资源使用进行限制,例如文件系统访问、网络访问、系统调用等。

4、沙箱执行:一旦通过了字节码验证和安全检查,JVM会将应用程序放入一个受控的沙箱环境中执行。这个沙箱环境限制了应用程序对系统资源的访问,确保它只能在限定的范围内执行。

此外,JVM-Sandbox还利用虚拟化技术创建隔离环境,并通过字节码增强将被mock(模拟)的方法添加到隔离环境中。当这些方法被调用时,JVM-Sandbox通过反射机制查找它们,并使用代理对象将其转发给沙箱中的虚拟机执行。执行完毕后,结果会返回给主程序。

5、原理二:字节码增强技术又是啥?

字节码增强技术是一种对Java字节码进行修改以增强其功能的技术。它主要是在Java字节码生成之后,通过读取和修改字节码文件,实现对类、方法、字段等元素进行增强。这种技术相当于对应用程序的二进制文件进行修改,主要目的是减少冗余代码,提高性能等。

字节码增强的主要步骤包括:

  • 修改字节码:在内存中获取到原来的字节码,然后通过一些工具(如ASM、Javassist)来修改它的byte[]数组,得到一个新的byte数组。

  • 使修改后的字节码生效:这可以通过两种方法实现:一是自定义ClassLoader来加载修改后的字节码;二是在JVM加载用户的Class时,拦截并返回修改后的字节码,或者在运行时,使用Instrumentation.redefineClasses方法来替换掉原来的字节码。

字节码增强技术的应用非常广泛,例如可以用于APM(应用性能管理)工具,监控和管理应用软件性能和可用性,保证软件应用程序的正常运行;还可以用于Java问题定位工具,如BTrace

6、安装、使用

1. 下载或引入依赖

首先,你需要从 jvm-sandbox-repeater 的官方网站或 GitHub 仓库下载最新版本的插件 jar 文件。

或者直接在项目的 pom.xml 文件中添加 jvm-sandbox-repeater 的依赖:


<dependency><groupId>com.github.jvm-sandbox-repeater</groupId><artifactId>jvm-sandbox-repeater</artifactId><version>最新版本</version></dependency>

2. 配置 Sandbox

将 jvm-sandbox-repeater 插件添加到 JVM 中,将下载的 jvm-sandbox-repeater 插件 jar 文件添加到目标应用程序的类路径中,或者通过 Javaagent 参数将其添加到 JVM 中。

在项目的启动参数中添加以下配置,启用 JVM-Sandbox 和 jvm-sandbox-repeater:

java -javaagent:path/to/jvm-sandbox-repeater.jar=config.yaml -jar your-application.jar

其中,config.yaml 是 jvm-sandbox-repeater 的配置文件,配置 jvm-sandbox-repeater 的相关参数,比如录制文件保存路径、回放速度等可以根据实际情况进行修改。

3. 编写配置文件

创建一个名为 config.yaml 的文件,用于配置 jvm-sandbox-repeater。以下是一个简单的示例:


repeater:enabled: truerecordDir: /path/to/record/dirreplayDir: /path/to/replay/dirfilter:classes:- com.example.service.*methods:- com.example.service.UserService.getUserInfo

在这个示例中,我们启用了 jvm-sandbox-repeater,并指定了录制和回放的目录。同时,我们还定义了一个过滤器,只对 com.example.service 包下的 UserService 类的 getUserInfo 方法进行录制和回放。

4. 录制和回放

在目标应用程序运行时,jvm-sandbox-repeater 会实时捕获网络请求,并将其记录到指定的录制文件夹中。当需要回放请求时,可以使用 jvm-sandbox-repeater 提供的命令行工具或 API 进行操作。


# 录制请求java -jar jvm-sandbox-repeater.jar record -c config.yaml# 回放请求java -jar jvm-sandbox-repeater.jar replay -c config.yaml

或者,你也可以在代码中使用 jvm-sandbox-repeater 提供的 API 进行录制和回放。以下是一个简单的示例:

 

import com.github.jvm.sandbox.repeater.Repeater;import com.github.jvm.sandbox.repeater.Recorder;import com.github.jvm.sandbox.repeater.Replayer;public class MyApp {public static void main(String[] args) {// 初始化 RepeaterRepeater repeater = new Repeater();repeater.init();// 开始录制请求Recorder recorder = repeater.startRecording();recorder.record("http://example.com/api/user", "GET");// 停止录制请求recorder.stopRecording();// 开始回放请求Replayer replayer = repeater.startReplaying();replayer.replay("http://example.com/api/user", "GET");// 停止回放请求replayer.stopReplaying();}}

通过以上步骤,你可以使用 jvm-sandbox-repeater 对 Java 应用程序进行流量录制和回放。

5. 查看与分析结果

在回放过程中或回放结束后,可以通过jvm-sandbox-repeater提供的可视化界面查看回放的状态、结果以及性能数据等,进行结果分析。

7、总结

总的来说,jvm-sandbox-repeater 是一款功能强大、易于使用的流量录制回放工具,可以帮助开发人员或测试人员轻松地实现对网络请求的录制和回放。通过 jvm-sandbox-repeater,我们可以更加高效地进行调试、测试和分析,提高软件开发测试的效率和质量。如果你正在寻找一款优秀的流量录制回放工具,不妨试试 jvm-sandbox-repeater,相信它会给你带来意想不到的惊喜!

jvm-sandbox-repeater的项目源码:

git clone https://github.com/alibaba/jvm-sandbox-repeater.git

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群:731789136,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,下方这份完整的软件测试教程已经整理上传完成,需要的朋友们可以文末自行领取:【保证100%免费】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

电子电气架构 --- 智能网联汽车未来是什么样子?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

基于SpringBoot+Vue+uniapp微信小程序的婚庆摄影小程序的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

GO语言指针有那些限制

GO语言指针有那些限制 GO 语言的指针 一个指针变量本身存会计的只是一个内存地址 一个内存地邗在32位系统上占4个字节&#xff0c;在64位系统上占8个字节 内存地址一般用整数的16进制来表示 当一个变量声明的时候&#xff0c;GO运行时将此变量开辟一段内存&#xff0c;此内存…

遥感技术助力生态系统碳储量、碳收支、碳循环等多领域监测与模拟:森林碳储量,城市扩张,夜间灯光数据,陆地生态系统,大气温室气体监测等

目录 专题一 双碳视角下遥感技术的研究方向 专题二 生态系统碳库的遥感估算—以森林碳储量为例 专题三 生态系统碳收支的遥感模拟—以京津冀地区为例 专题四 土地利用变化碳排放效应的遥感监测—以城市扩张为例 专题五 区域能源消耗碳排放空间格局模拟—基于夜间灯光数据 …

为什么你总碰到渣男?伯克森悖论

内容预告 为什么有些女生总觉得自己总是遇到渣男&#xff1f;难道是我具备了“吸引渣男的体质”?&#xff0c;还是“好男人都绝了吗?"。今天&#xff0c;我们通过因果推断中的伯克森悖论&#xff0c;结合心理学中的认知偏差和选择偏差&#xff0c;来解析这个令人困惑的…

【word】页眉横线无法取消

小伙伴们日常想在页眉里加横线&#xff0c;直接双击页眉&#xff0c;然后在页眉横线里选择自己喜欢的横线样式就可以了。 但今天我遇到的这个比较奇特&#xff0c;有些页有这个横线&#xff0c;有些页没有&#xff0c;就很奇怪。 最后排查完&#xff0c;发现是只有标题2的页…

15分钟学Go 第4天:Go的基本语法

第4天&#xff1a;基本语法 在这一部分&#xff0c;将讨论Go语言的基本语法&#xff0c;了解其程序结构和基础语句。这将为我们后续的学习打下坚实的基础。 1. Go语言程序结构 Go语言程序的结构相对简单&#xff0c;主要包括&#xff1a; 包声明导入语句函数语句 1.1 包声…

5、JavaScript(三)

20.this对象 对于要绑定的多个对象的事件内容相同时可以使用循环来绑定&#xff0c;注意这时要使用this对象拿到当前调用函数的对象的属性和方法&#xff0c;不能直接使用循环变量作为角标。 1 this 对象基础内容 <!-- 大坑坑坑坑&#xff01;&#xff01;&#xff01;&am…

arm架构ceph pacific部署

背景 合作伙伴实验室的华为私有云原来使用单点的nfs做为存储设备&#xff0c;现有两方面考量&#xff0c;业务需要使用oss了&#xff0c;k8s集群及其他机器也需要一套可扩展的分布式文件系统 部署ceph 初始机器配置规划 IP配置主机名Role10.17.3.144c8g1T数据盘ceph-node01…

录屏不再难!四款免费电脑桌面录屏工具测评报告

作为一个办公室文员&#xff0c;我经常需要录制一些操作演示视频或者会议记录。最近&#xff0c;我尝试了四款免费的电脑桌面录屏工具&#xff1a;福昕录屏大师、转转大师录屏、爱拍录屏和Screen Studio。今天就来跟大家分享一下我的使用体验&#xff0c;希望能帮到和我有同样需…

vue综合指南(六)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vuet篇专栏内容:vue综合指南 目录 101、Vue 框架怎么实现对象和数组的监听&#xff1f; 102、Proxy 与 Object.d…

AntV X6自定义连接线样式(Vue3+TypeScript)

效果图如下&#xff1a;&#xff08;连接线是有动画的&#xff0c;模拟数据传输特效&#xff09; 核心代码&#xff1a; 在创建画布的时候即可设置连接线样式&#xff0c;通过createEdge属性即可实现&#xff0c;代码如下&#xff1a; connecting: {snap: {radius: 50, //自动吸…

工业相机详解及选型

工业相机相对于传统的民用相机而言&#xff0c;具有搞图像稳定性,传输能力和高抗干扰能力等&#xff0c;目前市面上的工业相机大多数是基于CCD&#xff08;Charge Coupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。 一&#xff0c;工业相机的分类 …

Vivado HLS学习

视频链接: 6课&#xff1a;数据类型的转换_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1bt41187RW?spm_id_from333.788.videopod.episodes&vd_sourcea75d5585c5297210add71187236ec90b&p6 目录 1.数据类型的转换 2.自动类型转换 2.1隐式数据转换 2.2…

Windows安装Minio服务器端

Windows安装Minio服务器端 Windows安装Minio服务器端启动minio server将minio封装成系统服务默认账号密码常用参数 常见问题Minio为客户提供NFS调整minio文件分享时长设置“桶”为公开&#xff0c;如图设置即可 使用minio命令行客户端配置mcmc命令行常用方法创建bucket查看buck…

离散数学-逻辑与证明基础1.4(谓词和量词)

谓词 1.4.2 谓词 涉及变量的语句&#xff0c;例如&#xff1a; “ x > 3 x > 3 x>3”&#xff0c;“ x y 3 x y 3 xy3”&#xff0c;“ x y z x y z xyz” 以及 \quad “Computer x x x is under attack by an intruder” \quad “Computer x x x is f…

安装CentOS 8镜像和创建CentOS 8虚拟机教程

一、安装虚拟机 网上查找教程&#xff0c;我用的是VMware 17 二、下载CentOS 8镜像 1.阿里云下载CentOS 8镜像 centos安装包下载_开源镜像站-阿里云 (aliyun.com) 选择需要下载的版本&#xff0c;(建议)下载dvd1版本的iso&#xff08;也有下载boot版本的iso&#xff0c;创…

【进阶OpenCV】 (18)-- Dlib库 --人脸关键点定位

文章目录 人脸关键点定位一、作用二、原理三、代码实现1. 构造人脸检测器2. 载入模型&#xff08;加载预测器&#xff09;3. 获取关键点4. 显示图像5. 完整代码 总结 人脸关键点定位 在dlib库中&#xff0c;有shape_predictor_68_face_landmarks.dat预测器&#xff0c;这是一个…

【汇编语言】寄存器(内存访问)(二)—— DS和[address]

前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深入理解计算机底层工作原理&#xff0c;提升代码效率&#xff0c;尤其在嵌入式系统和性能优…

day46|72. 编辑距离647. 回文子串516.最长回文子序列 5 最长回文子串

文章目录 前言72. 编辑距离思路方法一647. 回文子串思路方法一方法二516.最长回文子序列思路方法一5 最长回文子串总结前言 72. 编辑距离 思路 总体思路:dp定义直接为操作数,递推公式分情况讨论,如果两个元素相等,那操作数不变;如果不相等,那么操作数就会改变–三种情况…