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

笔者前段时间在参加测开大会时了解到了一款开源的自动化回归测试工具 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,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

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

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

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

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

相关文章

5分钟学设计模式:简单工厂与美食街的不期而遇

大家好,我是知微。 写代码好几年,是不是还纠结于这些问题: 面对一堆if-else,代码越写越长,维护起来比攀登珠穆朗玛峰还难每次只敢小心翼翼改个小功能,生怕程序突然“嘭”一声,全炸了想学习大佬…

18.Docker学习

1.Docker应用场景 Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker(模板)将软件运往各个环境(测试环境和生产环境拉取镜像(实例)),相当于是一个模子刻出来的 …

计算机毕业设计springboot+vue高校教师职称评审评定系统605z3

技术栈 前端:vue.jsElementUI 开发工具:IDEA 或者eclipse都支持 编程语言: java 框架: ssm/springboot 数据库: mysql 版本不限 数据库工具:Navicat/SQLyog都可以 详细技术:javaspringbootvueMYSQLMAVEN 本系统采用in…

Google Pixel4手机刷机+Root+逆向环境详细教程

Google Pixel4手机刷机Root逆向环境配置详细教程 刷机工具下载 Windows10、Google Pixel4手机当前安卓10系统、adb工具、要刷的谷歌原生的Android11最新刷机包、安装google usb驱动、美版临时twrp-3.6.0_11-0-flame.img和美版永久twrp-installer-3.6.0_11-0-flame.zip、Magis…

如何使用Shortemall自动扫描URL短链接中的隐藏内容

关于Shortemall Shortemall是一款针对URL地址安全与Web内容安全的强大工具,该工具基于纯Python开发,专为Web安全方向设计,可以帮助广大研究人员以自动化的形式扫描URL短链接中的隐藏内容。 Shortemall的全名为ShortEm All,该工具…

乡村振兴与乡村旅游深度融合:依托乡村自然和文化资源,发展乡村旅游产业,促进农民增收致富,打造特色美丽乡村

目录 一、引言 二、乡村振兴与乡村旅游的内在联系 三、依托乡村自然和文化资源发展乡村旅游产业 (一)挖掘乡村自然资源优势,打造特色旅游品牌 (二)挖掘乡村文化资源内涵,丰富旅游活动内容 四、促进农…

IP SSL怎么签发使用

IP证书的签发首先是需要有一个可供绑定的IP地址,作为常用数字证书之一,IP证书也因为其广泛的应用范围而深得用户的青睐和喜欢。 部署IP证书后,可以实现该IP地址的https访问,过程和域名证书相差不多。 IP证书和域名证书的区别 很…

接收区块链的CCF会议--NDSS 2025 截止7.10 附录用率

会议名称:Network and Distributed System Security Symposium (NDSS) CCF等级:CCF A类学术会议 类别:网络与信息安全 录用率:2024年接收率19.5% Submissions are solicited in, but not limited to, the following areas: Ant…

《系统管理学报》期刊投稿经验与流程分享(一轮退修,历时3月)

双非研二,三作(导师一作,师哥二作),《系统管理学报》期刊录用 投稿网址:https://xtglxb.sjtu.edu.cn/journalx_jgxb/authorLogOn.action 投稿&收稿:2022年12月26日初审:2023年…

强大的开源项目RAG-GPT:5分钟实现LLM大模型应用到你的网站!

强大的开源项目RAG-GPT:5分钟实现LLM大模型应用到你的网站! 引言 随着chatgpt等大型语言模型(LLM)能力越来越强大,如何将这些模型精准地应用于特定垂直领域,让各行业开发者快速利用LLM赋能也成为热点和痛…

WS2811 单线 256 级灰度三通道恒流 LED 驱动器芯片 IC

产品概述 WS2811 是三通道LED驱动控制专用电路,芯片内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和15V高压可编程定电流输出驱动器。同时,为了降低电源纹波,3个通道有一定的延时导通功…

4.1 文本相似度(二)

目录 1 文本相似度评估 2 代码 2.1 load_dataset 方法 2.2 AutoTokenizer、AutoModelForSequenceClassification 1 文本相似度评估 对两个文本拼接起来,然后作为一个样本喂给模型,作为一个二分类的任务; 数据处理的方式以及训练的基本流程…

2024最新版JavaScript逆向爬虫教程-------基础篇之无限debugger的原理与绕过

目录 一、无限debugger的原理与绕过1.1 案例介绍1.2 实现原理1.3 绕过debugger方法1.3.1 禁用所有断点1.3.2 禁用局部断点1.3.3 替换文件1.3.4 函数置空与hook 二、补充2.1 改写JavaScript文件2.2 浏览器开发者工具中出现的VM开头的JS文件是什么? 三、实战 一、无限…

一篇文章掌握所有国债期货的基本交易策略介绍

国债期货是一种基本的利率衍生品,根据交易者交易目的不同,可以将期货交易行为分为三类:套期保值、套利交易和投机交易。套期保值是投资者为了避免现有或将来预期的投资组合价值受市场利率变动的影响,而在国债期货市场上采取抵消性…

2023年30米分辨率土地利用遥感监测数据

改革开放以来,中国经济的快速发展对土地利用模式产生了深刻的影响。同时,中国又具有复杂的自然环境背景和广阔的陆地面积,其土地利用变化不仅对国家发展,也对全球环境变化产生了深刻的影响。为了恢复和重建我国土地利用变化的现代…

六、Redis五种常用数据结构-zset

zset是Redis的有序集合数据类型,但是其和set一样是不能重复的。但是相比于set其又是有序的。set的每个数据都有一个double类型的分数,zset正是根据这个分数来进行数据间的排序从小到大。有序集合中的元素是唯一的,但是分数(score)是可以重复的…

LeetCode416:分割等和子集

题目描述 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 解题思想 [1,5,11,5] 和为22,其中一半为 11。如果能寻找到若干数的和为11则成立可以抽象为一个0-1背包问题:容…

浮点数的由来及运算解析

数学是自然科学的皇后,计算机的设计初衷是科学计算。计算机的最基本功能是需要存储整数、实数,及对整数和实数进行算术四则运算。 但是在计算机从业者的眼中,我们知道的数学相关的基本数据类型通常是整型、浮点型、布尔型。整型又分为int8&a…

给centos机器打个样格式化挂载磁盘(新机器)

文章目录 一、先安装lvm2二、观察磁盘三、磁盘分区四、建PV五、建VG六、创建LV七、在LV上创建文件系统八、挂载到/home(1)临时挂载(2)永久挂载 九、最后reboot一下 一、先安装lvm2 yum install lvm2二、观察磁盘 三、磁盘分区 四…

Springboot整合 Spring Cloud Alibaba Seata

1.事务简介 事务是访问并可能更新数据库中各种数据项的一个程序执行单元。在关系型数据库中,一个事务由一组sql语句组成。事务具有 原子性,一致性,隔离性,持久性四个属性(ACID)。 原子性:事务是一个不可分割的工作单位…