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 在本地环境中独立运转,也能够称之为指令行形式,运用十分简略。从:github.com/arextest/ar… 下载 arex-standalon-all.zip 文件后直接运转 arex-cli.bat(sh) 即可,发动后会列出当时机器上正在运转中的 Java 服务,选择对应的服务,东西会主动将 Agent attach 到方针服务上,如下:

AREX 流量回放实践分享

有以下几个首要指令:

  • ls:列出方针服务上现已收集的用例, 刚发动还没有任何数据,需求给服务发送一些恳求后再履行该指令。

AREX 流量回放实践分享

  • replay:将收集的用例在当时服务上进行回放,并给出回放的成果,履行成果会展现在一个弹出的网页上。

AREX 流量回放实践分享

点击 Detai 按钮会显示对运用例的履行成果,也能看到运转进程中收集的一切数据,以扣库存接口为例,流程中相关的数据都进行了收集。

接口的呼应:

AREX 流量回放实践分享

拜访 DB 更新库存:

AREX 流量回放实践分享

拜访 DB 获取书本的详细数据:

AREX 流量回放实践分享

假如履行失利又不能简略判别失利原因,能够点击 Debug 按钮,直接进行代码的 Debug,这个功用能够了解成把收集到的恳求发送给本地服务,从而能够在 IDE 中进行代码 Debug。在恳求履行时,运用本身依靠的服务、DB等也不会产生真正的拜访,而是用收集的数据进行 Mock。

  • watch: replay 的弥补指令,能够查看前史履行情况。

Standalone 形式运用很简略,但不独自支撑一些比较杂乱的功用,例如 Mock 本地缓存、时刻等功用。 因此这个形式更适合给开发在提测前进行一次快速本地验证或发现问题后的本地 Debug 排查。

完好形式

完好形式供给 UI 界面,需求装置一些隶属的服务,参照官网供给的装置文档装置即可,装置完后登陆界面如下:

AREX 流量回放实践分享

如要运用流量回放功用,则需求提前在被测服务上加载 Agent。

履行下面指令把 Agent 的代码 clone 下来并打包,也能够从 github.com/arextest/ar… 直接下载

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 也能够直接从 github.com/arextest/ar… 下载,里面包含了对应的 jar 文件。 :::

发动完成后,该运用会主动出现在 AREX 的回放运用列表中:

AREX 流量回放实践分享

加载了 AREX Agent 的运用发布后会主动依据设置的录制频率来收集用户的真实恳求并保存下来,这些保存下来的数据便是后续回放的测验用例,用来验证新改动的代码是否存在预期外的成果。

运用设置

运用设置里能够对方针运用进行一系列的设置,这次只用到了录制相关的,界面如下:

AREX 流量回放实践分享

这儿能够设置录制的时刻和频率。

下面还有个高级菜单,这儿支撑一些功用增强的装备:

  • Mock 时刻:翻开这个功用后回放的时分,会把体系当时时刻还原成用例录制的时刻(不是修改机器时刻,而是 Mock 了 Java 里的各种时刻类/办法),来确保用例履行的稳定。
  • 动态类:这个能够了解成内存数据的 Mock,首要是一些内存中的缓存数据,防止不同环境的数据差异带来的测验用例履行不稳定,装备办法稍显杂乱,需求装备本地缓存对应的类名(必须)和办法名、参数表等。这次测验服务中有用到一个营销方针的本地缓存,服务依据营销方针核算书本的售卖价格,数据不同会影响服务的呼应,所以也增加了这个装备。也便是说,有了这个装备,能够节约很多履行测验之前的预备操作,例如数据库、Redis、装备的同步等等。用例录制的时分依靠的是什么数据,测验的时分用的便是什么数据,彻底不需求再做其他额外的预备。
  • Operation:能够翻开或关闭服务下某个接口的录制功用

除此之外,AREX 还供给忽略节点和乱序数组比对等装备,这些装备都是为了提升测验用例的稳定性,详细运用方法能够参阅官方文档。

履行回放

在回放菜单履行回放后(方针回放环境设置为待测验运用发布的 IP地址和端口号),会看到如下履行记载:

AREX 流量回放实践分享

点击记载会看到一个测验成果的汇总信息,显示履行成功的比例,下面是一个被测验接口的列表,

AREX 流量回放实践分享

本次演示中一切的 CASE 都履行失利了,点击 DiffScenes 能够看到失利的细节:

AREX 流量回放实践分享

从这儿看这 26 个 CASE 都是由于服务返回的处理时刻不同导致的,所以这儿只要一个错误卡片页,点击卡片页会看到一个图形化的界面展现用例履行步骤,失利的步骤会用红点标注,解决这个失利需求在装备里翻开时刻 Mock 功用,或许把这个时刻节点在装备里设置为除外。数据库的查询和更新操作都是经过的。 点击任何一个标签都能看到录制和回放时对应步骤的详细数据。

在回放记载页面,DiffScenes 按钮旁边还有个全量 Case 的按钮,点击会弹出一个抽屉页,列出记载下来的一切测验用例:

AREX 流量回放实践分享

录制概况按钮能够看到录制下来的用例的数据概况,保存按钮能够把这个用例固化下来保存在恳求集合菜单里。

AREX 流量回放实践分享

在这儿能够对保存的 Mock 数据依据需求进行修改,也能够增加脚本进行更丰厚的验证。

线上问题快速本地复现

对于⼀些事务⽐较杂乱的应⽤线上出现问题时,在开发本地往往不能复现(依靠的服务不稳定、环境数据不⼀致等等原因),靠⽇志排查⽐较看脸,也费时刻。对开发来说,假如能够在本地进行复现,直接 Debug 就最好了。

AREX 中供给了这个功用,在集合菜单中,新建⼀个快速恳求,在恳求头中点击下图按钮增加特定恳求头,随后发送该恳求,生产上就会对这个恳求进行录制操作:

AREX 流量回放实践分享

恳求完成后点击上⽅的保存按钮后就会将录制的成果⾃动保存下来,录制到的数据能够完美复现⽣产运⾏环境,复现线上问题。把恳求地址改为 localhost 发送恳求即可完成在本地的 Debug。