百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

开源!AREX接口自动化回归测试的全过程

ccwgpt 2024-10-03 18:48 58 浏览 0 评论

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

在使用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,即测试环境回放过程中返回的值,两者不一致即返回差异信息。

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

·确认问题,将问题修复,重复"业务代码更新"的章节,修改→测试发布→比对。

·确认非问题,则将此节点设置为过滤节点,下次回放跳过该节点比对。

·持续此操作,将所有的差异点都确认修复或者差异在预期范围内。

·确认修复和发布版本。

总结

本文主要描述的是

1.AREX环境搭建

2.AREX Agent编译获取

3.被测试服务加上AREX Agent的配置

4.被测试服务在生产环境常规运行,无须干预,逐步建立AREX录制回放用例

5.被测试服务,因需求而代码修改

6.被测试服务打包,加上AREX agent的配置,并发布测试环境,

7.在AREX Replay界面输入测试环境地址,进行回放

8.检查回放结果

1)回放差异在预期内,过滤掉差异节点

2)回放差异非预期内,修复BUG,重复6到8的操作

9.直至回归测试没有非预期内差异为止,测试通过,被测试应用发布生产环境

最后:

1)关注+私信回复:“测试”,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。

2)关注+私信回复:"入群" 就可以邀请你进入软件测试群学习交流~~

相关推荐

自己动手写Android数据库框架_android开发数据库搭建

http://blog.csdn.net/feiduclear_up/article/details/50557590推荐理由关于Android数据库操作,由于每次都要自己写数据库操作,每次还得去...

谷歌开源大模型评测工具LMEval,打通谷歌、OpenAI、Anthropic

智东西编译|金碧辉编辑|程茜智东西5月28日消息,据科技媒体TheDecoder5月26日报道,当天,谷歌正式发布开源大模型评测框架LMEval,支持对GPT-4o、Claude3.7...

工信部:着力推动大模型算法、框架等基础性原创性的技术突破

工信部新闻发言人今日在发布会上表示,下一步,我们将坚持突出重点领域,大力推动制造业数字化转型,推动人工智能创新应用。主要从以下四个方面着力。一是夯实人工智能技术底座。通过科技创新重大项目,着力推动大模...

乒乓反复纠结“框架不稳定”的三个小误区

很多球友由于对框架的认知不清晰,往往会把“框架不稳定”当成一种心理负担,从而影响学球进度,其典型状态就是训练中有模有样,一旦进入实战,就像被捆住了手脚。通过训练和学习,结合“基本功打卡群”球友们交流发...

前AMD、英特尔显卡架构师Raja再战GPU,号称要全面重构堆栈

IT之家8月5日消息,知名GPU架构师拉贾科杜里(RajaKoduri)此前曾先后在AMD和英特尔的显卡部门担任要职。而在今日,由Raja创立的GPU软件与IP初创企...

三种必须掌握的嵌入式开发程序架构

前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。我相...

怪不得别人3秒就知道软考案例怎么做能50+

软考高级统一合格标准必须三科都达到45分,案例分析也一直是考生头疼的一门,但是掌握到得分点,案例能不能50+还不是你们说了算吗?今天就结合架构案例考点,分享实用的备考攻略~一、吃透考点,搭建知识框架从...

UML统一建模常用图有哪些,各自的作用是什么?一篇文章彻底讲透

10万+爆款解析:9大UML图实战案例,小白也能秒懂!为什么需要UML?UML(统一建模语言)是软件开发的“蓝图”,用图形化语言描述系统结构、行为和交互,让复杂需求一目了然。它能:降低沟通成本避...

勒索软件转向云原生架构,直指备份基础设施

勒索软件组织和其他网络犯罪分子正越来越多地将目标对准基于云的备份系统,对久已确立的灾难恢复方法构成了挑战。谷歌安全研究人员在一份关于云安全威胁演变的报告中警告称,随着攻击者不断改进数据窃取、身份泄露和...

ConceptDraw DIAGRAM:释放创意,绘就高效办公新未来

在当今数字化时代,可视化工具已成为提升工作效率和激发创意的关键。ConceptDrawDIAGRAM,作为一款世界顶级的商业绘图软件,凭借其强大的功能和用户友好的界面,正逐渐成为众多专业人士的首选绘...

APP 制作界面设计教程:一步到位_app界面设计模板一套

想让APP界面设计高效落地,无需繁琐流程,掌握“框架搭建—细节填充—体验优化”三步法,即可一步到位完成专业级设计。黄金框架搭建是基础。采用“三三制布局”:将屏幕横向三等分,纵向保留三...

MCP 的工作原理:关键组件_mcp部件

以下是MCP架构的关键组件:MCP主机:像ClaudeDesktop、GitHubCopilot或旅行助手这样的AI智能体,它们希望通过MCP协议访问工具、资源等。MCP主机会...

软件架构_软件架构师工资一般多少

软件架构师自身需要是程序员,并且必须一直坚持做一线程序员。软件架构应该是能力最强的一群程序员,他们通常会在自身承接编程任务的同时,逐渐引导整个团队向一个能够最大化生产力的系统设计方向前进。软件系统的架...

不知不觉将手机字体调大!老花眼是因为“老了吗”?

现在不管是联系、交友,还是购物,都离不开手机。中老年人使用手机的时间也在逐渐加长,刷抖音、看短视频、发朋友圈……看手机的同时,人们也不得不面对“视力危机”——老花眼,习惯眯眼看、凑近看、瞪眼看,不少人...

8000通用汉字学习系列讲座(第046讲)

[表声母字]加(续)[从声汉字]伽茄泇迦枷痂袈笳嘉驾架咖贺瘸(计14字)嘉[正音]标准音读jiā。[辨形]上下结构,十四画。会意形声字,从壴从加,加也表声。注:从壴,字义与鼓乐有关;从加,字义与...

取消回复欢迎 发表评论: