乐趣区

关于自动化测试:超好用的回归测试工具我不允许你还不会用

AREX 是一款开源的基于实在申请与数据的自动化回归测试平台(我的项目地址:https://github.com/arextest),利用 Java Agent 技术与比对技术,通过流量录制回放能力实现疾速无效的回归测试。同时提供了接口测试、接口比对测试等丰盛的自动化测试性能,无需编程能力也可疾速上手。

在应用 AREX 流量录制性能时,AREX Java Agent 会记录生产环境中 Java 利用的数据流量和申请信息,并将这些信息发送给 AREX 数据存取服务(Storage Service),由数据存取服务导入 Mongodb 数据库中进行存储。当须要进行回放测试时,AREX 调度服务(Schedule Service)将会依据用户的配置和需要,通过数据存取服务从数据库中提取被测利用的录制数据(申请),而后向指标验证服务发送接口申请。同时,Java Agent 会将录制的内部依赖(内部申请 /DB)的响应返回给被测利用,指标服务解决实现申请逻辑后返回响应报文。随后调度服务会将录制的响应报文与回放的响应报文进行比对,验证零碎逻辑正确性,并将比对后果推送给剖析服务(Report Service),由其生成回放报告,供测试人员查看。在整个过程中,AREX 的缓存服务 Redis 负责缓存回放过程中的 Mock 数据和比对后果,以进步比对效率。

本文以 community-test 工具为例,从 AREX Agent 配置到录制回放、问题定位,残缺展现 AREX 接口自动化回归测试的全过程。

community-test(https://github.com/arextest/arex-community-test)是一个由 AREX 提供的用于测试和验证 AREX 零碎性能的工具,它是一个 Java 应用程序,依赖于 MySQL 和 Redis,用于模仿业务服务。

AREX 运行环境

笔者在应用环境申请了 Linux 服务器,这是由 OPS 提供的设施。

服务器的 IP 地址是 10.5.153.1,领有 128GB 内存和 32 Core。该服务器能够通过公司办公网进行拜访,但其余外部环境无法访问。次要目标是在该服务器上安装 AREX 服务和部署 community-test 的测试环境。

为了确保服务器可能拜访公网,须要进行一些设置。在装置过程中,须要下载 AREX 的安装包,并获取 community-test 的代码进行编译和公布。如果你的服务器能够间接拜访公网,则能够跳过设置代理的步骤。否则,须要设置代理以确保服务器可能拜访公网。

在端口方面,没有限度对外裸露的端口数量。然而,当初 OPS 对每个服务器做了限度,缺省状况下只容许内部拜访的端口是 80 和 8080,其余端口默认是被 block 的。

另外,近程拜访受限,本次演示是通过跳板机登录到服务器的。

通过录制回放进行回归测试

装置 AREX

近程登录 10.5.153.1,新建目录 arex

cd arex
git clone https://github.com/arextest/deployments.git

执行以下命令启动 AREX:

# 读取当前目录的 docker-compose.yml 文件, 并以服务的形式启动
docker-compose up -d
# 读取当前目录的 docker-compose-distribute.yml 文件, 并以服务的形式启动
docker-compose -f docker-compose-distribute.yml up -d
# 读取当前目录的 docker-compose-mongo4.4.21.yml 文件, 并以服务的形式启动, 因为某些服务器硬件版本的起因, 不能启动 5.0 的 mongodb
docker-compose -f docker-compose-mongo4.4.21.yml up -d

启动后,能够应用 docker-compose ps 命令查看各个服务的状态和配置:

  • State 是各个服务状态,Up 才是正确的,如果是其余状态,则须要重启服务或者查看服务的日志,查看不能启动的起因。
  • arex-front 就是前端,这里我的端口没有批改,缺省为 8088 端口。你能够依据你的环境配置想要的端口,比方 80 端口。
  • MongoDB 的端口依然是默认的 27017(你也能够应用你的 MongoDB 工具连贯到数据库),链接地址是:10.5.153.1:27017,用户名为 “arex”,明码为 “iLoveArex”。请留神,在 Docker Compose 的配置中,链接地址应为:mongodb://arex:iLoveArex@mongodb:27017/arex_storage_db,这是因为在 Docker Compose 中应用的是服务名进行网络连接。因而,你能够应用以下地址拜访 MongoDB:mongodb://arex:iLoveArex@10.5.153.1:27017/arex_storage_db。
  • arex-storage 的端口是 8093,这是须要在 agent 配置中指定的端口。在我的环境中配置的 storage 地址是 10.5.153.1:8093。

应用 docker-compose images 查看各个服务组件运行的版本:

AREX 的各个组件都是 0.2.10,其中 arex-node 服务后续要去掉,而且性能也没有更新,还是 0.2.7 版本。

启动后,在以后启动目录下有两个目录。其中 arex-logs 是存储各个服务的日志,arex-data 用于存储数据。

启动后,能够在命令行中查看日志:

  • docker-compose logs:查看全副的日志
  • docker-compse logs arex-report-service:查看 Report 服务的日志

装置后拜访 AREX 前端页面 http://10.5.153.1:8088/,输出邮箱获取验证码进行登录,如下图:

至此,AREX 的装置完结。

community-test 业务服务装置

下载编译 AREX Agent 代码

git clone https://github.com/arextest/arex-agent-java.git
cd arex-agent-java
mvn clean package

编译实现:

查看当前目录下的 arex-agent-jar 目录,是否存在最新编译的 arex agent jar 文件:

编译 community-test 代码

拉取代码:

git clone https://github.com/arextest/arex-community-test.git

应用 mvn clean package 编译我的项目

为了运行不便,将 community-test 进行容器化部署:

FROM tomcat:9.0-jdk8-openjdk

ARG WAR_FILE=./target/arex-agent-test-0.0.1-SNAPSHOT.war
ADD $WAR_FILE /usr/local/tomcat/webapps/

WORKDIR /usr/local/tomcat/conf
RUN sed -i 'N;152a\\t<Context path="" docBase="arex-agent-test-0.0.1-SNAPSHOT" reloadable="true" />' server.xml

ADD ./arex-agent-0.2.0.jar /usr/local/tomcat/
ADD ./arex-agent-bootstrap-0.2.0.jar /usr/local/tomcat/

WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["catalina.sh","run"]

容器化编译 shell 如下,仅供参考,绝对目录可能都须要批改:

cd ../arex-community-test
mvn clean package
 
cp ../deployments/dockerfile/community.Dockerfile ./Dockerfile
cp ../arex-agent-java/arex-agent-jar/arex-agent-0.3.0.jar ./arex-agent-0.3.0.jar
cp ../arex-agent-java/arex-agent-jar/arex-agent-bootstrap-0.3.0.jar ./arex-agent-bootstrap-0.3.0.jar
 
docker build -t arexadmin01/arex-community-test:0.0.1  .
 
rm -rf ./Dockerfile
rm -rf ./arex-agent-0.3.0.jar
rm -rf ./arex-agent-bootstrap-0.3.0.jar
 
cd ..

至此,曾经胜利创立用于测试的程序镜像。

SUT 利用配置 AREX Agent

以下是运行 community-test 工具时所应用的原始命令行,并且提供了与数据库和 Redis 的连贯配置,如下:

environment:
      - JAVA_TOOL_OPTIONS=-Dspring.datasource.url=jdbc:mysql://cmysql:3306/community?useUnicode=true&characterEncoding=utf-8 -Dspring.datasource.username=arex_admin -Dspring.datasource.password=arex_admin_password -Dspring.redis.host=credis -Dspring.redis.port=6379

减少 AREX 的配置:

environment:
      - JAVA_TOOL_OPTIONS='-javaagent:/usr/local/tomcat/arex-agent-0.3.0.jar' -Darex.service.name=community-service -Darex.storage.service.host=10.5.153.1:8093 -Darex.enable.debug=true  -Dspring.datasource.url=jdbc:mysql://cmysql:3306/community?useUnicode=true&characterEncoding=utf-8 -Dspring.datasource.username=arex_admin -Dspring.datasource.password=arex_admin_password -Dspring.redis.host=credis -Dspring.redis.port=6379
  • ‘-javaagent:/usr/local/tomcat/arex-agent-0.3.0.jar’ 这部分就是咱们编译的 AREX Agent 的 JAR 文件,该 JAR 文件将作为 Java 代理(Java agent)加载到应用程序中。
  • -Darex.service.name=community-service:这是应用程序的名称,它将在 AREX Replay 页面中显示。
  • -Darex.storage.service.host=10.5.153.1:8093:这是 AREX Storage 服务的地址,指定为 10.5.153.1:8093
  • -Darex.enable.debug=true:这是一个配置选项,如果设置为 true,则将以调试模式运行,即会录制所有的流量。在生产环境中,倡议将其设置为 false

启动 arex-community-test 服务,随后在 AREX 前端页面查看利用注册状况:

能够看到,被测试利用 community-test 曾经胜利运行,其拜访地址为 http://10.5.153.1:8080/。

回归测试

生产环境公布运行

当初,arex-agent 曾经胜利地启动并在应用程序中运行,在录制过程中,用户无需进行任何非凡的操作或干涉,能够依照惯例形式对外提供服务或手动拜访应用程序。

在本文的演示中,笔者应用 Collection 中的批量执行性能对 community-service 进行拜访,拜访地址为 http://10.5.153.1:8080/。

在拜访过程中,arex-agent 会主动开始录制并将录制的 AREX 用例存储起来,无需用户手动进行录制操作。

业务代码更新

当咱们的业务需要实现并提交当前,新版本要编译测试,则执行以下步骤:

  1. 拉取新代码
  2. 编译代码并打包
  3. 重点: 放弃 AREX Agent 的配置不变,特地是利用名,AREX 是利用利用名来辨认利用和治理用例的。因而在新版本的编译和测试过程中,应放弃与之前版本雷同的利用名配置。
  4. 公布代码到测试环境:将编译和打包后的利用程序代码公布到测试环境中,以便进行进一步的测试和验证。

在测试环境进行回归测试

进入 AREX Replay 页面,抉择 community-service 服务,在左边回放界面上点击 “Start Replay” 按钮,输出回放的地址(我用的是同一个环境,所以地址还是 http://10.5.153.1:8080/),开始回放:

测试问题定位

如果测试比对全副执行且没有任何差别,则测试通过:

如果测试过程中发现问题,如下所示:

点击存在问题的回放报告,展现所有的接口及其回归测试状况,如下图:

点击 DiffScenes(New),将以总体统计视图显示差别点所在。value diff,就是新老版本比对的差别在值差别。

持续点击差别点,查看差别细节,如下图。右边是 benchmark,即生产录制的值;左边是 Test,即测试环境回放过程中返回的值,两者不统一即返回差别信息。

依据发现的差别, 找到代码中存在问题的点:

  • 确认问题, 将问题修复, 反复 ” 业务代码更新 ” 的章节, 批改→测试公布→比对。
  • 确认非问题, 则将此节点设置为过滤节点,下次回放跳过该节点比对。
  • 继续此操作, 将所有的差别点都确认修复或者差别在预期范畴内。
  • 确认修复和公布版本。

AREX 文档:http://arextest.com/zh-Hans/docs/intro/

AREX 官网:http://arextest.com/

AREX GitHub:https://github.com/arextest

AREX 官网 QQ 交换群:656108079

退出移动版