AREX 是一款开源的测试工具,提供测试用例治理和无代码侵入的流量回放性能。
本文带来对于 AREX 的实际分享,次要集中在流量回放性能,被测利用是在官网提供的 community-test
利用上进行了肯定的功能扩充,实现了一个简略的书店生成订单性能,为特定用户生成某本书的订单,过程中会依据营销政策计算书本价格,也会调用扣库存服务扣除对应书本的库存。
该服务提供两个接口:order
(生成订单)和 updateInventory
(扣库存),其中 order
执行过程中会调用 updateInventory
。
论断
文档比拟长,先给出试用论断:
- 用例治理方面 :整体相似 Postman,提供了 Postman 的大部分性能,如:脚本、环境变量、WorkSpace 等,本文演示中不波及。
-
无代码侵入的流量回放性能 :其外围原理能够参考官网提供的介绍。
- 接入不便,根本是无老本的
- 数据采集和主动 Mock 能力十分强,反对 Http 服务、数据库、Redis、本地缓存、以后工夫的全自动 Mock,通过配置也能够反对内存数据的 Mock
- 写服务反对良好,例如下单服务,在测试时对所有的依赖都进行了 Mock,所以齐全不须要放心生成脏订单,而且重要的是,即便进行了 Mock,也能够对订单后果进行验证(例如写到订单库的数据,看测试后果时会拿回放时的 SQL 和采集的测试用例里的 SQL 进行比对)
- 验证点比较完善,测试时不只是对服务响应进行验证,还会对输入数据进行验证,像写到数据库、Redis 里的数据,发送给内部服务的申请也都能够进行验证
- 美中不足:对于性能比较复杂的利用,因为后果验证是全比对的,为了比拟好的体验,须要进行一些配置对后果降噪。
疾速装置
AREX 反对两种应用模式,上面别离进行介绍。
Standalone 模式
Standalone 模式指的是 AREX 在本地环境中独立运行,也能够称之为命令行模式,应用非常简单。从:https://github.com/arextest/arex-standalone/releases 下载 arex-standalon-all.zip
文件后间接运行 arex-cli.bat(sh)
即可,启动后会列出以后机器上正在运行中的 Java 服务,抉择对应的服务,工具会主动将 Agent attach 到指标服务上,如下:
有以下几个次要命令:
- ls:列出指标服务上曾经采集的用例,刚启动还没有任何数据,须要给服务发送一些申请后再执行该命令。
- replay:将采集的用例在以后服务上进行回放,并给出回放的后果,执行后果会展现在一个弹出的网页上。
点击 Detai 按钮会显示对利用例的执行后果,也能看到运行过程中采集的所有数据,以扣库存接口为例,流程中相干的数据都进行了采集。
接口的响应:
拜访 DB 更新库存:
拜访 DB 获取书本的具体数据:
如果执行失败又不能简略判断失败起因,能够点击 Debug 按钮,间接进行代码的 Debug,这个性能能够了解成把采集到的申请发送给本地服务,从而能够在 IDE 中进行代码 Debug。在申请执行时,利用自身依赖的服务、DB 等也不会产生真正的拜访,而是用采集的数据进行 Mock。
- watch: replay 的补充命令,能够查看历史执行状况。
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
:::tip
也能够间接从 https://github.com/arextest/arex-standalone/releases 下载,外面蕴含了对应的 jar 文件。
:::
启动实现后,该利用会主动呈现在 AREX 的回放利用列表中:
加载了 AREX Agent 的利用公布后会主动依据设置的录制频率来采集用户的实在申请并保留下来,这些保留下来的数据就是后续回放的测试用例,用来验证新改变的代码是否存在预期外的后果。
利用设置
利用设置里能够对指标利用进行一系列的设置,这次只用到了录制相干的,界面如下:
这里能够设置录制的工夫和频率。
上面还有个高级菜单,这里反对一些性能加强的配置:
- Mock 工夫 :关上这个性能后回放的时候,会把零碎以后工夫还原成用例录制的工夫(不是批改机器工夫,而是 Mock 了 Java 里的各种工夫类 / 办法),来保障用例执行的稳固。
- 动静类 :这个能够了解成内存数据的 Mock,次要是一些内存中的缓存数据,防止不同环境的数据差别带来的测试用例执行不稳固,配置办法稍显简单,须要配置本地缓存对应的类名(必须)和办法名、参数表等。这次测试服务中有用到一个营销政策的本地缓存,服务依据营销政策计算书本的售卖价格,数据不同会影响服务的响应,所以也增加了这个配置。也就是说,有了这个配置,能够节俭很多执行测试之前的筹备操作,例如数据库、Redis、配置的同步等等。用例录制的时候依赖的是什么数据,测试的时候用的就是什么数据,齐全不须要再做其余额定的筹备。
- Operation:能够关上或敞开服务下某个接口的录制性能
除此之外,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