推荐一款流量录制回放工具: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: true
recordDir: /path/to/record/dir
replayDir: /path/to/replay/dir
filter:
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) {
// 初始化 Repeater
Repeater 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
推荐一款流量录制回放工具:jvm-sandbox-repeater的更多相关文章
- 流量录制回放工具jvm-sandbox-repeater入门篇——录制和回放
在上一篇文章中,把repeater服务部署介绍清楚了,详细可见:流量录制回放工具jvm-sandbox-repeater入门篇--服务部署 今天在基于上篇内容基础上,再来分享下流量录制和回放的相关内容 ...
- 流量录制回放工具jvm-sandbox-repeater入门篇——服务部署
趋于当前技术不断更新.产品功能多元化之下,流量回放的热度也是越来越高. 在前一段时间,测试团队也提到阿里开源的流量回放工具 jvm-sandbox-repeater 我个人就先尝试一下,期间还是遇到一 ...
- 月光宝盒(vivo流量录制回放平台)正式对外开源
作者:vivo 互联网服务器团队- Liu Yanjiang 月光宝盒是一个基于流量录制回放的自动化测试平台,通过录制回放取代编写脚本进行自动化回归,提升测试效率和覆盖率.因为其解决方案具有很强的通用 ...
- 推荐两款远程管理Linux工具(基于Windows系统)
推荐两款远程管理Linux工具(基于Windows系统) 1.Xshell 百度百科:Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows ...
- 【录教程必备】推荐几款屏幕录制工具(可录制GIF)
我们经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊.刚设计出来网站的动画效果怎么样啊.某某电影里面的一个镜头多么经典啊.打得大快人心的NBA绝杀瞬间是怎么回事 ...
- 推荐几款屏幕录制工具(可录制GIF)
我们经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊.刚设计出来网站的动画效果怎么样啊.某某电影里面的一个镜头多么经典啊.打得大快人心的NBA绝杀瞬间是怎么回事 ...
- 【转】【录教程必备】推荐几款屏幕录制工具(可录制GIF)
我们经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊.刚设计出来网站的动画效果怎么样啊.某某电影里面的一个镜头多么经典啊.打得大快人心的NBA绝杀瞬间是怎么回事 ...
- 推荐一款GIF录制工具
LICEcap 是一款屏幕录制工具,支持导出 GIF 动画图片格式,轻量级.使用简单,录制过程中可以随意改变录屏范围 下载 http://www.cockos.com/licecap/
- 推荐一款编辑SQL的工具:jsqlparser
这个工具真的挺好用的,采用的是观察者模式,Visitor. 虽然我学过这个模式,但是乍一用还是有点懵逼的. 给好一个SQL语句之后,jsqlparser可以把这个sql语句给分解成all kind o ...
- [工具]推荐一款查看dll依赖工具
引言 很久没写一篇像样的博客了,最近一个月一直忙于项目,也没时间去总结了,回到家,也就是看看书,没怎么总结.不过还是挺兴奋的,每天过得还算充实.这里也算是对五月份的一个总结吧. 为什么要查看dll 因 ...
随机推荐
- 微软GraphRAG框架源码解读
两个月前,微软发布了GraphRAG的论文<From Local to Global: A Graph RAG Approach to Query-Focused Summarization&g ...
- node sass
registry=https://registry.npmmirror.com/ sass_binary_site=https://cdn.npmmirror.com/mirrors/node-sas ...
- UE4 WebUI使用指南2-通信
前面一篇WebUI的文章讲述的WebUI插件的下载,开启,在UE中创建,加载网页等. 本文继续讲述通过WebUI,UE和网页实现双向通信的实现思路. 一点说明 由于WebUI 使用的浏览器内核并不是最 ...
- [oeasy]python0029_放入系统路径_PATH_chmod_程序路径_执行原理
放入路径 回忆上次内容 上次总算可以把 sleep.py 直接执行了 sleep.py文件头部要声明好打开方式 #!/usr/bin/python3 用的是 python3 解释 sleep.py ...
- WPF/C#:实现导航功能
前言 在WPF中使用导航功能可以使用Frame控件,这是比较基础的一种方法.前几天分享了wpfui中NavigationView的基本用法,但是如果真正在项目中使用起来,基础的用法是无法满足的.今天通 ...
- 如何安装 Arch Linux 操作系统?
Arch Linux Install 安装 到使用 Arch 说明前面或多或少已经接触过 Debian 系列和 Red Hat 系列相关 Linux 发行版,对于虚拟化软件 VirtualBox 如何 ...
- OpenGL 三角形颜色插值
1.最懒的方法--Nearest Neighbor对于三角形内的点,离三个顶点谁最近,就赋值为那个顶点对应的颜色. 2.最天真的方法--Distance三角形内一点的值应该来自于三个顶点. 计算距离: ...
- 自制基于simplefoc大功率驱动板想法的由来,同时欢迎有相同兴趣的F友一起来玩。。。
前一阵子,偶然在B站上看了一个simplefoc的介绍视频,代码简洁.算法精妙让人佩服,更让人佩服的是:开源!遂!搜索之!不搜不知道一搜吓一跳,发现太OUT了,原来玩这个算法的人这么多,让我这个整天沉 ...
- [SDR] GNU Radio 系列教程 —— GNU Radio TX PDU (发送数据包操作)的基础知识(超全)
目录 1 PDU 概述 2 Demo 详解 2.1 Random PDU Generator 2.2 Async CRC32 2.3 Protocol Formatter (Async) 2.4 将 ...
- jmeter测试udp广播(jmeter发送udp)
jmeter测试udp广播(jmeter发送udp) jmeter测试udp广播(jmeter接收udp) 先下载安装第三方插件 下载链接:https://jmeter-plugins.org/ins ...