2年前 (2023-05-08)  相关技术 |   抢沙发  239 
文章评分 1 次,平均分 5.0

在软件开发过程中,线上问题的复现和定位是开发日常的一个活动。然而令开发人员头疼的是,由于线上环境与本地环境的配置和数据存在差异(如数据库中的数据、缓存中的数据等),线上的问题往往无法快速在本地测试环境中进行复现,排查困难度大大增加。

面对这种问题,可以利用 AREX 这款自动化回归测试工具来进行快速复现。AREX 的基本原理是在生产环境中录制流量和数据,在测试环境回放并自动比对接口服务内的外部请求差异,接口返回报文的差异,并结合精准测试工具找到代码更改和结果差异的关联,完成完整的自动化验证测试。借助 AREX 强大的 Mock 机制,录制过程中 AREX 将自动对该条真实请求所有的外部依赖进行 Mock,在本地完美还原线上生产数据环境,这样就可以顺利完成在本地环境的复现,快速排查问题。

具体步骤如下:

1. 往生产环境发送带有 force-record=true 标志的请求,AREX 录制生产数据,并记录应答报文头中的 RecordID (AREX-Detail-ID)

2. 往 Local 开发环境,准备好对应的代码及 AREX Agent 的配置,开启 Debug 模式

3. 用 AREX 往 Local 环境发送 RecordID 为 AREX-Detail-ID 的请求报文,Local 服务收到报文进入 Debug 状态

4. Local 的应用挂载了AREX Agent,依赖数据会从 AREX 数据库获取并加载

5. 开发可以开始随心所欲的复现生产问题,快速复现定位

如下是实战演示:

一. 部署 AREX 服务

git clone https://github.com/arextest/deployments.git
cd deployments
docker-compose up

二. 为被测应用配置 AREX Agent 后启动

AREX Agent 是实现流量录制的核心组件,因此在使用录制功能前,需要先为被测应用配置 AREX Agent。
首先,编译 AREX Agent:

git clone git@github.com:arextest/arex-agent-java.git
mvn clean install

编译成功后可在 arex-agent-java 文件夹得到一个名为 arex-agent-jar 的新文件夹,其中包含两个 jar 包。
在被测的 Java 应用启动中加入 Java Agent 配置:

如何利用 AREX 在本地快速复现线上问题

其中环境变量完整配置如下:

JAVA_TOOL_OPTIONS='-javaagent:E:/github-arex/arex-agent-java/arex-agent-jar/arex-agent-0.1.0.jar'

程序参数完整配置:

-Darex.service.name=arex-community-test6 
-Darex.storage.service.host=10.*.*.*:8093 
-Darex.enable.debug=true  
-Dspring.datasource.url=jdbc:mysql://10.*.*.*:13306/community?useUnicode=true&characterEncoding=utf-8 
-Dspring.datasource.username=arex_admin 
-Dspring.datasource.password=*
-Dspring.redis.host=10.*.*.* 
-Dspring.redis.port=16379

启动时可以观察输出或者查看日志:

如何利用 AREX 在本地快速复现线上问题

可以看到打印信息中有 ArexJavaAgent installed ,表示 Agent 安装成功。

同时可以看到 Java 打印出命令行参数信息,比如 Agent 地址信息、Storage 服务的地址信息等,如上图箭头所示。

三. 强制录制生产环境中出现问题的请求

AREX 对生产环境接口的常规请求如下图所示,应答报文中都是常规的数据。

如何利用 AREX 在本地快速复现线上问题

当生产环境某条用例出现问题时,在 AREX 中构造出该请求用例的所有配置,并点击 action.record 开启强制录制,如下图:

如何利用 AREX 在本地快速复现线上问题

点击强制录制按钮后,Header List 中会新增 arex-force-record 字段,值为 true 。点击 Save 进行保存。

保存后发送请求,可以看到响应报文 Headers 中新增了 arex-record-id , 值为  AREX-172-20-0-4-708656889122 (由 AREX Agent 随机生成的唯一值),说明这个请求已经成功录制下来,并且该请求在生产环境所依赖的数据都已经存储在 AREX 中了。

如何利用 AREX 在本地快速复现线上问题

四. 本地回放进行 Debug 操作

录制完成后,即可在本地进行回放。

新建请求,地址变更为本地测试环境,在报文头中,增加 arex-record-id 字段, 值设置为之前生成的 AREX-172-20-0-4-708656889122,点击保存后发送请求。

如何利用 AREX 在本地快速复现线上问题

现在就可以在你的 IDEA 环境中,就问题进行单步调试。如下图:

如何利用 AREX 在本地快速复现线上问题

调试完成后可以看到此 AREX 请求的应答报文:

如何利用 AREX 在本地快速复现线上问题

应答报文中出现 arex-replay-id,值为 AREX-172-20-0-4-708658384473 (由 AREX Agent 随机生成的用来分析的 ID)。

以上就是通过 AREX 流量录制功能在本地快速复现线上问题并进行 Debug 操作的完整流程

原文地址:https://mp.weixin.qq.com/s/ErMzW5Av95sj7Kxi9MDK_w

  
 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2829.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册