测试人的福音:开源流量回放工具快速上手实践

笔者前段时间在参加测开大会时了解到了一款开源的自动化回归测试工具 AREX。主要是通过复制线上真实流量到测试环境进行回归测试,同时还做到了接口返回值的比对和写接口的验证,回放不会产生真实的数据或者调用,都是基于 Mock 数据的,也不用担心会产生脏数据,很大程度节约了测试用例编写和测试环境搭建的成本,感觉很有意思。本文主要参考 [AREX 官网文档](arextest.com/zh-Hans/doc… Installation),记录分享一下在 Mac 本地部署 AREX 以及流量回放功能的试用过程。

前置准备

  • 配置:下面是我的配置,适用于所有 Intel 芯片的 Mac,m 系列芯片暂未测试。
iMac2019款 5K
CPU3 GHz 六核 Intel Core i5
内存16 GB 2667 MHz DDR4
操作系统macOS Monterey 12.4
  • Docker,Docker Compose
  • Java 1.8,apache-maven-3.8.3
  • Chrome v115
  • Git
  • 网络:一个稳定的网络环境(科学上网)可以解决 95% 以上的报错问题

步骤一:部署 AREX

AREX 由 UI(前端)、Schedule Service(调度服务)、Storage Service(存储服务)、Report Service(报告分析服务)及 Mongodb、Redis 数据存储等多模块组成,官方目前提供了多种部署方式,本文使用最简单的 docker- compose 部署方案进行快速体验。

1.通过 git clone 命令拉取 AREX 仓库代码

  1. git clone --depth 1 https://github.com/arextest/deployments.git

  2. cd deployments

2. 通过 docker-compose 启动 AREX

docker-compose up -d

首次安装需要下载相关镜像资源文件,可能要等待一段时间,具体时间取决于你的网络状况,当出现下图中的提示说明已经安装成功。

image.png

启动成功后可以使用 docker-compose ps 命令输出所有服务的名称、运行状况和端口等信息,使用 docker-compose logs 命令输出所有服务的日志。如果觉得终端命令比较麻烦的话,也可以使用 Docker Desktop 等图形化客户端进行管理,这里推荐一个 Mac 平台好用的 Docker 容器客户端 OrbStrack,号称比 Docker Desktop 更加快速、轻便且简单,亲测好用。

image.png

通过 OrbStrack 可以看到当前的容器中正在运行的 AREX 相关服务,官网文档对其各个功能及其原理做了详细的介绍,这里简单罗列出各个服务的基本功能。

服务名称功能介绍
arex-uiAREX 前端是 AREX 工具的前端操作界面
arex-report-service报告分析服务,负责在执行回放测试时收集测试结果及展示问题
arex-schedule-service调度服务,负责向被测试服务发送用例回放请求,并在服务响应后触发结果比对及依赖比对
arex-storage-service存储服务负责接收由 Agent 捕获的请求、应答及依赖的真实数据的存储,同时负责在回放期间,按照 Agent 要求返回已存储的数据
MongodbAREX 默认配置的数据库,负责存储录制的数据和回放结果
Redis负责在回放过程中缓存数据

步骤二:运行 AREX Agent

在 AREX 部署完成后,就可以通过容器中前端服务对外暴露的端口访问 AREX 前端站点了,这里我访问的是 http://localhost:8088/。

登录之后开始直接使用 AREX 常规接口测试的功能,这一部分基本上和 Postman 没什么区别,需要注意的是,由于是在浏览器里进行接口请求,因此想要成功发送 API 请求,还需要安装 Chrome 插件,安装成功后刷新页面,如果界面右下角插件状态变成绿色的✅,则说明插件已经成功安装,可以进行接口请求。

当然我更感兴趣的是 AREX 的特色功能录制回放测试,目前在 Replay 菜单页面中的应用项目列表为空,这是因为还没有应用接入。要想接入应用进行录制,需要用到 AREX Agent

image.png

AREX Agent 是实现服务录制回放的核心组件,主要原理是通过对入口调用和各个依赖调用的代码进行字节码增强,当代码被执行到时拦截调用过程,将调用的入参、返回值和异常录制下来,发送到存储服务。

在测试环境回放时会使用生产环境录制的真实数据模拟请求,AREX Agent 通过识别回放标识决定是否需要回放。如果需要回放,则不进行方法的真实调用,去拉取存储服务保存的调用响应数据进行返回。

  1. 拉取 arex-agent-java 项目源码进行编译:
  2. git clone https://github.com/arextest/arex-agent-java.git

  3. cd arex-agent-java

  4. mvn clean install

编译成功后可得到一个包含两个 jar 包的 arex-agent-jar 新文件夹,其中的 apex-agent-0.3.8.jar 即为我们需要的 agent jar 包,需要注意的是该 jar 包依赖另一个 bootstrap jar 包,因此两个文件需要放在相同目录。

image.png

2. 注入 Agent

接着就可以对我们自己的项目注入 agent 启动。这里我用的项目是交流群里提供的一个演示项目 arex-community-test(群号是:656108079,需要文件的朋友可以加群),下载至本地后进行编译,即可在根目录的 target 文件夹中得到最终编译生成的项目 war 包 arex-agent-test-0.0.1-SNAPSHOT.war,再将刚刚生成的两个 agent jar 包拷贝至示例项目根目录,便可以执行 Agent 注入,启动项目。相关命令如下:

  1. cd arex-community-test

  2. mvn package -f pom.xml

  3. java -javaagent:./arex-agent-0.3.8.jar -Darex.service.name=community-test -Darex.storage.service.host=localhost:8093 -jar ./target/arex-agent-test-0.0.1-SNAPSHOT.war

项目启动参数主要由四部分构成:

  • -javaagent 指定了 agent jar 包的文件路径
  • -Darex.service.name 声明了被测试服务应用的名称(用户自定义,最后会显示在 Replay 页面的应用列表中)
  • -Darex.storage.service.host 指定了 storage 存储服务的 host 地址(参考之前 AREX 容器中的 arex-storage-service 服务暴露的端口)
  • -jar 指定了测试服务应用的 jar 包文件路径

除了 Java 参数运行模式外,AREX 官方文档 还详细罗列了其他多种运行模式,感兴趣的同学可以自行参考。

当终端输出了以下日志时,说明项目已经成功注入 Agent 并启动,在日志中可以看到测试服务应用的名称、Agent 运行状况等详细信息。

image.png

现在就可以在 Replay 菜单中看到刚刚注册的应用 community-test 了。

image.png

录制回放功能体验

接下来试一下对该应用进行录制回放操作。根据官方介绍,AREX 的录制不用手动开启,在应用成功注册后,将自动录制所有时间段内的线上真实请求流量。现在我们访问一个应用接口来创建一个真实的线上流量,比如访问 http://localhost:8080/nettyTest/nettyTest,得到响应:

  1. {

  2. "responseStatusType": {

  3. "responseCode": 0,

  4. "responseDesc": "success",

  5. "timestamp": 1691481194807

  6. },

  7. "body": {

  8. "inboundResponse": "Hello World!",

  9. "outboundResponse": "12345"

  10. }

  11. }

请求后再回到前端页面,在列表中点击该应用,可以在应用名称右上角看到一个红色数字上表,这里显示的是当天录制到的用例个数,点击后可以看到录制接口路径即为刚刚访问的 /nettyTest/nettyTest 路径,说明已经录制成功。

image.png

现在再对刚刚的这一次录制创建一个回放测试,点击右上角的 Start replay 按钮,在 Target Host 中根据提示输入你想要进行测试的地址和端口(通常是在生产环境录制,测试环境回放),这里有两点需要注意:

  1. 需要填写传输协议和端口号
  2. IP 需要填写真实的本机 IP 而非 localhost ,因为 Docker 容器的部署模式会影响 localhost 的解析。这一点在官方文档 FAQ 中有详细解释,感兴趣的同学可以了解一下。

image.png

回放创建完成后会自动生成一条回放报告,回放进度和结果会轮询刷新。当记录的 State 进度变更为 done 时即表示回放完成,可以看到本次回放 case (用例)总数为 1,失败数为 1。点击 Failed 数量 1 可以进入回放结果详情页。

image.png

点击用例,可以看到导致本次回放失败的原因是 responsestatustype.timestamp 节点的数据出现差异(value diff)。该字段是一个时间戳,在前后两次请求后出现差异属于合理情况。这种噪音字段的比对差异往往没有什么参考意义,还会提高使用者的排查成本,这时候就可以直接在 json 报文中右键点击该字段,选择 Ignore Key,将该节点排除在下次比对之外。

image.png

设置成功后点击 Rerun 按钮重新执行回放测试,等待回放结束后可以发现回放成功,即本次的测试环境回放数据与生产环境的真实数据在忽略配置后视为相同。这样就完成了一次完整的录制和回放链路测试。

image.png

总结

AREX 作为一款基于流量录制回放实现自动化回归测试的工具,很大程度上降低了测试用例编写和测试环境搭建的成本,而且作为一款开源软件,官网文档说明详细,社区活跃(群里大佬回复很及时),对新手非常友好。

本篇文章主要针对 Mac 用户对 AREX 本地快速部署和上手做简要分享,作为抛砖引玉,AREX 还具有其他很多功能例如动态类 Mock 配置、开发自测、固化用例、批量运行测试用例等功能,欢迎感兴趣的朋友们自行探索。

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

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VastGaussian:用于大型场景重建的巨大3D高斯函数

VastGaussian:用于大型场景重建的巨大3D高斯函数 摘要IntroductionRelated WorkPreliminariesMethod VastGaussian: Vast 3D Gaussians for Large Scene Reconstruction. 摘要 现有基于NeRF的大型场景重建方法在视觉效果和渲染速度方面往往存在限制。虽然最近的3D高斯分裂在小…

基于Python的校园舆情管理系统(附源码、文档说明)

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

SpringAMQP-消息转换器

这边发送消息接收消息默认是jdk的序列化方式,发送到服务器是以字节码的形式,我们看不懂也很占内存,所以我们要手动设置一下 我这边设置成json的序列化方式,注意发送方和接收方的序列化方式要保持一致 不然回报错。 引入依赖&#…

微信小程序之转盘抽奖

1. 实现效果 2. 实现过程 话不多说&#xff0c;直接上代码 /**index.wxml */ <view class"title">旋转大转盘</view> <view class"rote-box fcc"><view class"box fcc"><image class"bg" src"/stat…

亚马逊跨境电商,如何制作产品安装视频二维码?

对于海外电商平台的商家来说&#xff0c;售后的客服工作也非常重要。产品破损、物流延误&#xff0c;或者使用体验不好、产品安装太复杂、缺少一个零件、发错颜色……任何一个新增的差评都够商家头疼好久&#xff0c;说服买家修改或者删除差评总要费很大工夫。 所以&#xff0…

【Python贪吃蛇】:编码技巧与游戏设计的完美结合

文章目录 &#x1f525;一、运行效果&#x1f4a5;二、游戏教程✈1. 导入模块❤️2. 初始化游戏元素☔3. 改变蛇移动的方向&#x1f44a;4. 绘制方块&#x1f680;5. 检查蛇头是否在游戏区域内&#x1f308;6. 定义蛇的移动函数&#x1f3ac;7. 绑定键盘事件 ⭐三、完整代码 &a…

探索美国动态IP池:技术赋能下的网络安全新篇章

在数字化飞速发展的今天&#xff0c;网络安全成为了各行各业关注的焦点。特别是在跨国业务中&#xff0c;如何保障数据的安全传输和合规性成为了企业面临的重要挑战。美国动态IP池作为一种新兴的网络技术&#xff0c;正逐渐走进人们的视野&#xff0c;为网络安全提供新的解决方…

LeetCode 0994.腐烂的橘子:广度优先搜索(BFS)

【LetMeFly】994.腐烂的橘子&#xff1a;广度优先搜索(BFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/rotting-oranges/ 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子…

韵搜坊(全栈开发)-- 项目介绍

文章目录 项目介绍技术栈前端后端 业务流程 后端地址&#xff1a; https://github.com/IMZHEYA/zhesou-backend 前端地址&#xff1a; https://github.com/IMZHEYA/zhesou-frontend 图标设计&#xff08;AI生成&#xff09;&#xff1a; 项目介绍 一个聚合搜素平台&#xff…

SaToken框架实现在Rpc上下文的login处理逻辑

最近在工作中遇到一个需求&#xff0c;需要在项目A中实现一个rpc接口供其他项目调用&#xff0c;接口返回登录token&#xff0c;从而实现其他项目的用户能免密登录到项目A。 项目A是用了SaToken来做的鉴权&#xff0c;原本我的打算是直接在rpc中调用StpUtil.login()方法来实现登…

速锐得深入解析吉利几何CAN总线数据通信网络的拓扑层级框架技术

在现代汽车工业中&#xff0c;车辆的电子控制单元&#xff08;ECU&#xff09;之间的通信至关重要。这种通信大多通过控制器局域网络&#xff08;CAN&#xff09;总线实现&#xff0c;它是德国BOSCH公司于20世纪80年代初开发的一种串行数据通信协议。随着技术的不断进步&#x…

【数据结构】之栈的应用——有效的括号

文章目录 有效的括号 有效的括号 原题链接&#xff1a;有效的括号 详解栈的链接 这道题可以利用栈来解决 1.左括号入栈 2.右括号与出栈顶左括号匹配 //创建一个动态的栈 typedef char STDateType; typedef struct Stack {STDateType* a;//储存指定数据类型的数组int top…

Verilog中信号发生器的代码实现

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 描述 题目描述&#xff1a; 请编写一个信号发生器模块&#xff0c;根据波形选择信号wave_choise发出相应的波形&#xff1a;wave_choice0时&#xff0c;发出方波信号&#xff1b;wave_choice1时&#xff0c;发出锯齿…

栈的实现与OJ括号匹配

今日备忘录: "不破不立. " 本文索引 1. 前言2. 顺序表与链表的区别3. 什么是栈4. 栈的实现5. OJ括号匹配6. 总结 1. 前言 人总是在坍塌中重建, 有些东西必须摧毁, 才能迎来新生, 不管是那些消耗你的人, 还是令你感到焦虑的事情, 还是一份你觉得毫无意义并且又不喜欢…

CSS3私有前缀+新增盒模型相关属性+新增背景属性(如果想知道CSS3私有前缀、新增盒模型相关属性的知识点,那么只看这一篇就足够了!)

前言&#xff1a;CSS3 是CSS2 的升级版本&#xff0c;它在CSS2 的基础上&#xff0c;新增了很多强大的新功能&#xff0c;从而解决一些实际面临的问题。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下本篇文章的…

解聘7名教授!高校取消终身教授制度,启动全员“末位淘汰”

如今&#xff0c;高校是越来越卷了&#xff0c;身处其中的每个人似乎都无法避免。 前一段时间&#xff0c;国内某985高校说是要搞职称降级聘任&#xff0c;另一所985高校说要淘汰多少比例的教师&#xff0c;引发学术圈广泛讨论。 国外呢&#xff0c;同样要卷起来了&#xff0…

[代码比较工具下载及使用]你真的需要一个代码比较工具

&#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到资源分享系列 这里有你想要的各种高质量资源 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站 …

STM32-LCD液晶屏(ILI9341)

MCU&#xff1a;STM32F103VET6 开发环境&#xff1a;STM32CubeMXMDK5 目录 STM32液晶屏LCD&#xff08;ILI9341&#xff09; LCD液晶显示 液晶控制原理 ILI9341液晶控制器简介 8080写时序 8080读时序 FSMC模拟8080时序 液晶屏的信号线 STM32CubeMX配置FSMC 测试部分 …

都是免费的SSL证书,有什么区别

国内做SSL证书的服务商还是比较多&#xff0c;但也不是所有服务商都提供免费的SSL证书&#xff0c;一般只有少数几家提供免费SSL证书。那么&#xff0c;同样都是免费的SSL证书&#xff0c;有哪些不一样的地方呢&#xff1f; 1、验证类型&#xff1a;免费SSL证书通常只提供域名…

网络实验新境界,PNETLab模拟器部署指南

在网络工程领域&#xff0c;拥有一个可靠的网络实验平台至关重要。PNETLab模拟器是一款功能强大的网络仿真工具&#xff0c;它支持包括华为、华三、锐捷、思科在内的多种设备&#xff0c;并且以开源免费的形式提供&#xff0c;这使得它在业界备受青睐。 软件介绍 PNETLab&am…