AREX 是一款开源的测试工具,提供测试用例管理和无代码侵入的流量回放功能。
本文带来关于 AREX 的实践分享,主要集中在流量回放功能,被测应用是在官方提供的 community-test
应用上进行了一定的功能扩充,实现了一个简单的书店生成订单功能,为特定用户生成某本书的订单,过程中会根据营销政策计算书本价格,也会调用扣库存服务扣除对应书本的库存。
该服务提供两个接口:order
(生成订单)和 updateInventory
(扣库存),其中 order
执行过程中会调用 updateInventory
。
文档比较长,先给出试用结论:
AREX 支持两种使用模式,下面分别进行介绍。
Standalone 模式指的是 AREX 在本地环境中独立运行,也可以称之为命令行模式,使用非常简单。从:https://github.com/arextest/arex-standalone/releases 下载 arex-standalon-all.zip
文件后直接运行 arex-cli.bat(sh)
即可,启动后会列出当前机器上正在运行中的 Java 服务,选择对应的服务,工具会自动将 Agent attach 到目标服务上,如下:
有以下几个主要命令:
点击 Detai 按钮会显示对应用例的执行结果,也能看到运行过程中采集的所有数据,以扣库存接口为例,流程中相关的数据都进行了采集。
接口的响应:
访问 DB 更新库存:
访问 DB 获取书本的详细数据:
如果执行失败又不能简单判断失败原因,可以点击 Debug 按钮,直接进行代码的 Debug,这个功能可以理解成把采集到的请求发送给本地服务,从而可以在 IDE 中进行代码 Debug。在请求执行时,应用本身依赖的服务、DB 等也不会产生真正的访问,而是用采集的数据进行 Mock。
Standalone 模式使用很简单,但不单独支持一些比较复杂的功能,例如 Mock 本地缓存、时间等功能。 因此这个模式更适合给开发在提测前进行一次快速本地验证或发现问题后的本地 Debug 排查。
完整模式提供 UI 界面,需要安装一些附属的服务,参照官网提供的安装文档安装即可,安装完后登陆界面如下:
如要使用流量回放功能,则需要提前在被测服务上加载 Agent。
执行下面命令把 Agent 的代码 clone 下来并打包,也可以从 https://github.com/arextest/arex-agent-java/releases 直接下载
git clone https://github.com/arextest/arex-agent-java.git
mvn clean package
在 arex-agent-jar
下会生成对应的 jar 包文件,把这个文件夹拷贝到 D 盘根目录,然后本地执行以下命令启动本地 demo 应用,其中 x.x.x.x
是前面安装的 Docker 的 IP:
java -javaagent:D:\arex-agent-jar\arex-agent-0.1.0.jar
-Darex.service.name=commit-test002
-Darex.storage.service.host=x.x.x.x:8093
-jar MyArexDemoService.jar
也可以直接从 https://github.com/arextest/arex-standalone/releases 下载,里面包含了对应的 jar 文件。
启动完成后,该应用会自动出现在 AREX 的回放应用列表中:
加载了 AREX Agent 的应用发布后会自动根据设置的录制频率来采集用户的真实请求并保存下来,这些保存下来的数据就是后续回放的测试用例,用来验证新改动的代码是否存在预期外的结果。
应用设置里可以对目标应用进行一系列的设置,这次只用到了录制相关的,界面如下:
这里可以设置录制的时间和频率。
下面还有个高级菜单,这里支持一些功能增强的配置:
除此之外,AREX 还提供忽略节点和乱序数组比对等配置,这些配置都是为了提升测试用例的稳定性,具体使用方式可以参考官方文档。
在回放菜单执行回放后(目标回放环境设置为待测试应用发布的 IP 地址和端口号),会看到如下执行记录:
点击记录会看到一个测试结果的汇总信息,显示执行成功的比例,下面是一个被测试接口的列表,
本次演示中所有的 CASE 都执行失败了,点击 DiffScenes 可以看到失败的细节:
从这里看这 26 个 CASE 都是因为服务返回的处理时间不同导致的,所以这里只有一个错误卡片页,点击卡片页会看到一个图形化的界面展示用例执行步骤,失败的步骤会用红点标注,解决这个失败需要在配置里打开时间 Mock 功能,或者把这个时间节点在配置里设置为除外。数据库的查询和更新操作都是通过的。 点击任何一个标签都能看到录制和回放时对应步骤的详细数据。
在回放记录页面,DiffScenes 按钮旁边还有个全量 Case 的按钮,点击会弹出一个抽屉页,列出记录下来的所有测试用例:
录制详情按钮可以看到录制下来的用例的数据详情,保存按钮可以把这个用例固化下来保存在请求集合菜单里。
在这里可以对保存的 Mock 数据根据需求进行编辑,也可以添加脚本进行更丰富的验证。
对于⼀些业务⽐较复杂的应⽤线上出现问题时,在开发本地往往不能复现(依赖的服务不稳定、环境数据不⼀致等等原因),靠⽇志排查⽐较看脸,也费时间。对开发来说,如果能够在本地进行复现,直接 Debug 就最好了。
AREX 中提供了这个功能,在集合菜单中,新建⼀个快速请求,在请求头中点击下图按钮添加特定请求头,随后发送该请求,生产上就会对这个请求进行录制操作:
请求完成后点击上⽅的保存按钮后就会将录制的结果⾃动保存下来,录制到的数据可以完美复现⽣产运⾏环境,复现线上问题。把请求地址改为 localhost
发送请求即可实现在本地的 Debug。
AREX 文档:http://arextest.com/zh-Hans/docs/intro/
AREX 官网:http://arextest.com/
AREX GitHub:https://github.com/arextest
AREX 官方 QQ 交流群:656108079