在软件开发过程中,线上问题的复现和定位是开发日常的一个流动。然而令开发人员头疼的是,因为线上环境与本地环境的配置和数据存在差别(如数据库中的数据、缓存中的数据等),线上的问题往往无奈疾速在本地测试环境中进行复现,排查艰难度大大增加。
面对这种问题,能够利用 AREX 这款自动化回归测试工具来进行疾速复现。AREX 的基本原理是在生产环境中录制流量和数据,在测试环境回放并主动比对接口服务内的内部申请差别,接口返回报文的差别,并联合精准测试工具找到代码更改和后果差别的关联,实现残缺的自动化验证测试。借助 AREX 弱小的 Mock 机制,录制过程中 AREX 将主动对该条实在申请所有的内部依赖进行 Mock,在本地完满还原线上生产数据环境,这样就能够顺利完成在本地环境的复现,疾速排查问题。
具体步骤如下:
- 往生产环境发送带有 force-record=true 标记的申请,AREX 录制生产数据,并记录应答报文头中的 RecordID (AREX-Detail-ID)
- 往 Local 开发环境,筹备好对应的代码及 AREX Agent 的配置,开启 Debug 模式
- 用 AREX 往 Local 环境发送 RecordID 为 AREX-Detail-ID 的申请报文,Local 服务收到报文进入 Debug 状态
- Local 的利用挂载了 AREX Agent,依赖数据会从 AREX 数据库获取并加载
- 开发能够开始得心应手的复现生产问题,疾速复现定位
如下是实战演示。
步骤一:部署 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 配置:
其中环境变量残缺配置如下:
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.5.153.1:8093 -Darex.enable.debug=true -Dspring.datasource.url=jdbc:mysql://10.5.153.1:13306/community?useUnicode=true&characterEncoding=utf-8 -Dspring.datasource.username=arex_admin -Dspring.datasource.password=arex_admin_password -Dspring.redis.host=10.5.153.1 -Dspring.redis.port=16379
启动时能够察看输入或者查看日志:
能够看到打印信息中有 ArexJavaAgent installed
,示意 Agent 装置胜利。
同时能够看到 Java 打印出命令行参数信息,比方 Agent 地址信息、Storage 服务的地址信息等,如上图箭头所示。
步骤三:强制录制生产环境中呈现问题的申请
AREX 对生产环境接口的惯例申请如下图所示,应答报文中都是惯例的数据。
当生产环境某条用例呈现问题时,在 AREX 中结构出该申请用例的所有配置,并点击 action.record
开启强制录制,如下图:
点击强制录制按钮后,Header List 中会新增 arex-force-record
字段,值为 true
。点击 Save 进行保留。
保留后发送申请,能够看到响应报文 Headers 中新增了 arex-record-id
, 值为 AREX-172-20-0-4-708656889122
(由 AREX Agent 随机生成的惟一值),阐明这个申请曾经胜利录制下来,并且该申请在生产环境所依赖的数据都曾经存储在 AREX 中了。
步骤四:本地回放进行 Debug 操作
录制实现后,即可在本地进行回放。
新建申请,地址变更为本地测试环境,在报文头中,减少 arex-record-id
字段, 值设置为之前生成的 AREX-172-20-0-4-708656889122
,点击保留后发送申请。
当初就能够在你的 IDEA 环境中,就问题进行单步调试。如下图:
调试实现后能够看到此 AREX 申请的应答报文:
应答报文中呈现 arex-replay-id,值为
`AREX-172-20-0-4-708658384473`(由 AREX Agent 随机生成的用来剖析的 ID)。
以上就是通过 AREX 流量录制性能在本地疾速复现线上问题并进行 Debug 操作的残缺流程。
_
AREX 文档:http://arextest.com/zh-Hans/docs/intro/
AREX 官网:http://arextest.com/
AREX GitHub:https://github.com/arextest
AREX 官网 QQ 交换群:656108079