超好用的回归测试工具,我不允许你还不会用!
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 用例存储起来,无需用户手动进行录制操作。
业务代码更新
当我们的业务需求实现并提交以后,新版本要编译测试,则执行以下步骤:
- 拉取新代码
- 编译代码并打包
- 重点: 保持 AREX Agent 的配置不变,特别是应用名,AREX 是利用应用名来识别应用和管理用例的。因此在新版本的编译和测试过程中,应保持与之前版本相同的应用名配置。
- 发布代码到测试环境:将编译和打包后的应用程序代码发布到测试环境中,以便进行进一步的测试和验证。
在测试环境进行回归测试
进入 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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
前端开发如何更好的避免样式冲突?级联层(CSS@layer)
作者:vivo 互联网前端团队 - Zhang Jiqi 本文主要讲述了CSS中的级联层(CSS@layer),讨论了级联以及级联层的创建、嵌套、排序和浏览器支持情况。级联层可以用于避免样式冲突,提高代码可读性和可维护性。 一、什么是级联层(Cascade Layers)? 1.1 级联层的官方定义 我们参看Cascading and Inheritance Level 5(13 January 2022)中6.4节所述: 级联层提供了一种结构化的方式来组织和平衡单个起源中的问题。单个级联层内的规则级联在一起,不与层外的样式规则交错。 开发者可以创建层来表现元素默认值、第三方库、主题、组件、覆盖和其他样式问题,并且能够以显式方式重新排序层级,而无需更改每个层内的选择器或特异性,或依赖源顺序来解决跨层的冲突。 单纯看官方定义和概括可能比较晦涩,下面我们会结合案例来说清楚。 1.2 级联层为了解决什么问题? 简而言之:级联层的出现就是为了使 CSS 开发者可以更简单直接地控制级联。 我们来假设日常开发中的一个场景,从场景去理解级联层在解决什么问题。 如下图: 我们原来的'display'文...
- 下一篇
首次对外公开,颁发官方证书,GOTC 2023 "实施和管理开源合规计划 "培训研讨会来啦!
开源软件已经成为现代软件开发的一个重要组成部分。它提供了许多好处,如成本效益、灵活性和社区支持。然而,使用开源软件也有责任遵守许可条款和条件。如果不遵守这些条款和条件,可能会导致法律和财务后果。 为了帮助企业驾驭这一复杂的局面,GOTC 大会与 LFOSSA(Linux Foundation开源软件学园)将举办"实施和管理开源合规计划"培训研讨会。本次研修班旨在帮助开发者、项目经理、法律顾问以及企业决策者更好地了解和应对开源软件合规相关的问题。通过对开源许可证、合规流程和最佳实践的深入剖析,希望参与者能够在此次研修班中掌握关键知识,以确保开源项目的合规性。 该研修班首次对外公开,共4 小时,研修班的导师是 Linux 基金会战略计划副总裁 Ibrahim Haddad 博士。学员完成培训后,LFOSSA 将为其颁发结业证书。持有GOTC门票人士可以到场参加研讨会。参加本研讨会的人士需要在场登记,名额有限,先到先得。 Ibrahim Haddad 博士是 Linux 基金会战略项目的副总裁和 LF AI & Data 基金会和PyTorch 基金会的执行董事。在他的职业生涯中,I...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果