• 0
  • 0
分享

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


图片1.png

  在使用 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

图片2.png

  执行以下命令启动 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? 命令查看各个服务的状态和配置:

图片3.png


  ·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? 查看各个服务组件运行的版本:

图片4.png


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

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

图片5.png


  启动后,可以在命令行中查看日志:

图片6.png


  ·docker-compose logs :查看全部的日志

  · docker-compse logs arex-report-service :查看 Report 服务的日志

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

图片7.png

  至此,AREX 的安装结束。

  community-test 业务服务安装

  下载编译 AREX Agent 代码

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

  编译完成:

图片8.png

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

图片9.png

  编译 community-test 代码

  拉取代码:

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

图片10.png

  使用 `mvn clean package` 编译项目:

图片11.png

  为了运行方便,将 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 前端页面查看应用注册情况:

图片12.png

  可以看到,被测试应用 community-test? 已经成功运行,其访问地址为 http://10.5.153.1:8080/。

  回归测试

  生产环境发布运行

  现在,arex-agent 已经成功地启动并在应用程序中运行,在录制过程中,用户无需进行任何特殊的操作或干预,可以按照常规方式对外提供服务或手动访问应用程序。

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

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

图片13.png

  业务代码更新

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

  1.拉取新代码

  2.编译代码并打包

  3.重点: 保持 AREX Agent 的配置不变,特别是应用名,AREX 是利用应用名来识别应用和管理用例的。因此在新版本的编译和测试过程中,应保持与之前版本相同的应用名配置。

  4.发布代码到测试环境:将编译和打包后的应用程序代码发布到测试环境中,以便进行进一步的测试和验证。

  在测试环境进行回归测试

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

图片14.png

  测试问题定位

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

图片15.png

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

图片16.png

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

图片17.png

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

图片18.png

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

图片19.png

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

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

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

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

  · 确认修复和发布版本。

  总结

  本文主要描述的是

  1.AREX环境搭建

  2.AREX Agent编译获取

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

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

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

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

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

  8.检查回放结果 

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

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

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


作者:王海兵    

来源:http://www.51testing.com/html/11/n-7796411.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 1、引言由于最近Online环境爆出好几个问题,导致开会被各位BOSS连续的盘问,反正不是站着灵魂拷问,也不是坐着喝茶水闲聊。具体咋样,脑补一下。这让我彻夜难眠,辗转反侧,夜不能寝,饭不能吃,都消瘦了好几两肉!!遥想当年,小鱼我什么时候背过Online的锅。这说来也巧了…前晚这Ali的小姐姐又找我撩骚 ,哦不,是聊天。可能是知道我最近辗转反侧;又对我思念心切…我岂能放过这个机会…于是乎牺牲我的睡眠时间,与她夜夜长谈。最后整理出这篇博文《如何排查Online出现的问题》。做过市场调研的,或者参与过主流产品的核心人员,都会了解到,现在市面上的产品,没有谁敢说自己的产品就是0缺陷;之所以没曝出来或者...
            0 0 14098
            分享
          • 在转型成功之前,我们要先自学两个工具商业web自动化测试工具请自学QTP;QTP的学习可以跳过,我是跳过了的。开源web自动化测试工具请自学Selenium;我当年是先学watir(耗时1周),再学selenium(也耗时1周)。这里主要讲一些能让读者和普通小菜鸟区别开来的东西,这些请和上面的两个工具穿插地学:基础:浏览器前端相关的简单技术基础:就是那些什么html、xml、css、javascript、等等,详见w3c教程网站http://www.w3schools.com/;学习使用一个单元测试框架或者叫做测试执行器,建议testNG,学完testNG,你应该具备了3小时学会任何一个测试执...
            0 0 1197
            分享
          • 引言对于产品的手机项目(应用软件),主要是进行系统测试。而针对手机应用软件APP的系统测试,我们通常从如下几个角度开展:功能模块测试、兼容性测试、安装和卸载测试、软件更新测试、性能测试、用户体验性测试、交叉事件测试、用户界面测试等。功能测试要点及常见缺陷常见的功能类缺陷APP崩溃这是测试中的常见问题,这类问题也是非常严重的,会直接影响用户对产品的第一印象,例如我们正在使用某个APP,正在使用突然应用就停止响应,界面上弹出“强制关闭错误”的窗口,需要强制关闭应用,或者正在使用时出现闪退的现象。这些情况都很影响用户的体验,导致用户卸载该APP。通用的触发移动APP崩溃的测试场景,如下:验证在有不同...
            13 14 2081
            分享
          •   参数化概念  测试工作中,通常会使用不同的数据发送请求测试不同的场景来实现测试的全面性,这就需要对一些字段进行参数化,以使每次迭代都使用不同的数据来满足我们的测试需求。  Jmeter做为常用的功能、性能测试工具之一,其参数化方式也是相对比较灵活,主要分为4种:用户参数、用户自定义变量、CSV数据文件、函数助手,下面将详细介绍这4种参数化方式的使用方法。  参数化方式  一、用户参数  1.使用场景  适用于参数取值范围很小的场景,例如测试模拟较少用户登陆某系统交易。  2.操作步骤  (1)添加用户参数功能模块  (2)设置参数变量、用户值  注意勾选每次迭代更新一次,否则每次都使用同样...
            14 15 1497
            分享
          •   黑盒测试仅关注输入和输出,将程序看成一个黑盒子。在不遗漏需求的情况下,打开这个黑盒子,从代码实现的角度进行分析,可以更好的理解测试用例,帮助我们完善测试用例设计,更好地提升测试效果。  本文从一元多项式的加法和乘法运算程序进行系统阐述,以期阐明作者思路。  程序功能描述:设计程序分别求两个一元多项式的乘积与和。  (1)Input :输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数,数字间以空格分隔  (2)Output:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。零多项式应输出 0,0  (3)举例:  执行加法...
            12 12 1164
            分享
      • 51testing软件测试圈微信