携程开源 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX
携程开源 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX
官网文档 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX
目前已跑通,通过冒烟测试,这篇文章稍稍水一下,主要讲下部署过程里踩的坑,因为部署的过程主要是运维同学去处理了,我只说下踩到的坑,官方的教程是可行的。目前该项目对zuul项目的录制回放会有点问题(录制的样例会出现路由匹配符/order/**,而不是URI,run test回放会出问题),已联系携程AREX开源团队,正在处理,有进度会更新该博客,大家遇到了项目确实有的问题可以去官方交流群反馈(官方github里有贴)。该问题携程团队给0.4.0包给我解决了
额外请注意如果你的接口背后是集群的话,请保障每个节点都挂了agent,或者run test的时候设置的host指定到某个有agent的节点去执行
当你使用docker部署后,登录的地方那个邮件如果收不到,第一个是要升级到0.6.2.2以上版本,第二个是自己公司的邮箱可能收不到邮件,如果遇到,就使用QQ邮箱这些试试,垃圾邮件箱里也翻翻,如果一次不行,多试几次,这个地方踩坑过,后面问了维护团队,搞定了,那个邮件是不需要你配置自己的邮箱或者邮件服务器或者实现的,直接AREX官方自己的邮箱发给你。成功的邮件验证码是这样
第二个是arex-agent-java.jar这个东西直接去这里下载arex-agent-java.jar release,下载第一个arex-agent-java.tar.gz,然后解压拿里面的arex-agent-java.jar去用,自己编译的话有报错,暂时不走自己编译的方式。
登录进去后的界面是这样
- 创建app
- jar启动参数
- 其他配置项
- 接口集合,支持批量测试
单环境部署
多环境部署
下面的是从官网抄的,建议直接看官网快速开始教程
官方的交流群可以加下(项目的github上的介绍里有),确实有管理在积极回答问题~这点很不错
快速安装
前提条件
在开始使用 AREX 之前,请确保你已经安装以下应用:
Docker 和 Docker Compose。
安装 AREX
首先,通过 git 命令克隆 AREX 仓库:
git clone --depth 1 https://github.com/arextest/deployments.git
cd deployments
接着通过 docker-compose 启动 AREX。
启动
docker-compose up -d
停止
docker-compose down -v
另外,也可以通过 Docker Compose 2.0 启动。
启动
docker compose -f docker-compose-2x.yml up -d
停止
docker compose -f docker-compose-2x.yml down -v
安装完成后,将自动安装好包括前端、服务、数据库等在内的所有组件,每个组件只有 1 个实例,具体如下:
ID Instance Model Name Description
1 1 调度服务(AREX-Schedule) 用于发送回放请求并检索所有响应以进行比较。
2 1 AREX-API 为 AREX 前端页面提供所有 API 接口。
3 1 存储服务(AREX-Storage) 为 AREX Agent 提供了以 Mock 方式保存录制和获取响应的功能。
4 1 AREX 前端(AREX-Front) AREX 前端页面。
5 1 MongoDB 数据存储及配置管理数据库
6 1 Redis 高速回放缓存
你可以通过在运行 Docker 的宿主机上执行 docker-compose ps 的命令查看各服务运行情况及端口。
[~ deployments]# docker-compose ps
Name Command State Ports
arex-front docker-entrypoint.sh node … Up 0.0.0.0:8088->8080/tcp
arex-mongodb docker-entrypoint.sh --auth Up 0.0.0.0:27017->27017/tcp
arex-redis docker-entrypoint.sh --app … Up 0.0.0.0:6379->6379/tcp
arex-api catalina.sh run Up 0.0.0.0:8090->8080/tcp
arex-schedule catalina.sh run Up 0.0.0.0:8092->8080/tcp
arex-storage catalina.sh run Up 0.0.0.0:8093→8080/tcp
检查服务日志命令
cd deployments
docker-compose logs
docker-compose logs arex // 检查 AREX 日志
docker-compose logs arex-schedule-service // 检查调度服务日志
docker-compose logs arex-api-service // 检查 API 服务日志
docker-compose logs arex-storage-service // 检查存储服务日志
- 日志降级
如果需要降低 AREX 的日志级别,以减少日志输出的数量和占用数据库的空间,则需要在启动 AREX 前,在 docker-compose.yml 的 arex-api-service、 arex-storage-service、arex-schedule-service 配置项中分别加入如下配置项:
-Dlogging.level.com.arextest=ERROR
-Dlogging.level.com.arextest.storage=ERROR
-Dlogging.level.com.arextest.schedule=ERROR
如下所示:
arex-api-service:
…
environment:
- TZ=Asia/Shanghai
- JAVA_OPTS=-Darex.mongo.uri= A R E X M O N G O U R I − D a r e x . r e d i s . u r i = AREX_MONGO_URI -Darex.redis.uri= AREXMONGOURI−Darex.redis.uri=AREX_REDIS_URI
-Darex.storage.service.url=http://arex-storage-service:8080
-Dspring.config.additional-location=/usr/local/tomcat/additional-config/
-Dspring.config.name=application,oauth
-Dlogging.level.com.arextest=ERROR
…
arex-storage-service:
…
environment:
- TZ=Asia/Shanghai
- JAVA_OPTS=-Darex.mongo.uri= A R E X M O N G O U R I − D a r e x . r e d i s . u r i = AREX_MONGO_URI -Darex.redis.uri= AREXMONGOURI−Darex.redis.uri=AREX_REDIS_URI
-Darex.api.service.api=http://arex-api-service:8080
-Dlogging.level.com.arextest.storage=ERROR
…
arex-schedule-service:
…
environment:
- TZ=Asia/Shanghai
- JAVA_OPTS=-Darex.mongo.uri= A R E X M O N G O U R I − D a r e x . r e d i s . u r i = AREX_MONGO_URI -Darex.redis.uri= AREXMONGOURI−Darex.redis.uri=AREX_REDIS_URI
-Darex.storage.service.api=http://arex-storage-service:8080
-Darex.api.service.api=http://arex-api-service:8080
-Dlogging.level.com.arextest.schedule=ERROR
…
- 默认不开启录制
如果希望在后续为被测应用配置 Agent 后不立即进行录制,则可以在 arex-api-service 中加入配置项:-Darex.config.default.service.collect.sampleRate=0,如下:
arex-api-service:
…
environment:
- JAVA_OPTS=-Darex.mongo.uri=mongodb://arex:iLoveArex@mongodb:27017/arex_storage_db
-Darex.redis.uri=redis://redis:6379/
-Darex.storage.service.url=http://arex-storage-service:8080
-Darex.config.default.service.collect.sampleRate=0
…
- 全局比对配置
针对录制回放的比对,系统中默认存在一些自定义配置,例如不对比数据库的 select 操作等。为了更方便地进行配置和管理,AREX 提供了一个全局通用的配置机制。用户可以通过修改 docker-compose.yml 文件,将以下启动参数添加到 AREX-API Service 的启动参数中,来控制系统的全局比对配置:
针对"yyyy-MM-dd HH:mm:ss.SSSSSS",“yyyy-MM-dd HH:mm:ss.SSS”,
“HH:mm:ss.SSSSSS”, “HH:mm:ss.SSS”,
“yyyy-MM-dd’T’HH:mm:ss.SSSXXX”, “yyyy-MM-dd’T’HH:mm:ss.SSSZ” 等时间格式
忽略时间字段的精度,单位为毫秒。在比较时间字段时,会忽略精确到指定毫秒数之后的部分。
-Darex.compare.ignoredTimePrecisionMillis=2000
报文 key 是否转换为小写。当取值为 true 时,报文中的 key 会被转换为小写;当取值为 false 时,不进行转换。
-Darex.compare.nameToLower=true
当 value 为 null、空字符串(“”)或空数组([])时,比对时是否认为一致。当取值为 true 时,这些情况下的 value 会被认为是相等的;当取值为 false 时,不认为它们相等。
-Darex.compare.nullEqualsEmpty=true
是否忽略数据库中 select 语句的比对。当取值为 true 时,会忽略 select 语句的比对;当取值为 false 时,不忽略。
-Darex.compare.selectIgnoreCompare=true
用于控制在比较数据库操作时是否仅比较同名字段。
当配置项的取值为 true 时,系统只会比较数据库操作中具有相同名称的字段。换句话说,只有在源和目标数据库中具有相同名称的字段才会进行比较,其他字段将被忽略。
当配置项的取值为 false 时,系统将比较所有字段,无论它们的名称是否相同。
-DonlyCompareCoincidentColumn=true
是否忽略 uuid 字段的比对。当取值为 true 时,会忽略 uuid 字段的比对;当取值为 false 时,不忽略。
-Darex.compare.uuidIgnore=true
根据配置的字段名称忽略比对。多个字段以逗号分隔。配置了这个项后,指定的字段在比对时会被忽略。
-Darex.compare.ignoreNodeSet=‘time,uuid’
注册应用
AREX Agent 是实现服务录制回放的核心组件,进行回放测试前需要为被测应用配置 AREX Agent,详见:注册应用
AREX 部署场景
AREX 单服务部署场景
如果录制和回放环境,即生产和测试环境之间可以互通或者有工具 Zone,则部署单个 AREX 服务。如下图所示,在生产环境录制数据,存储到 AREX(Mongodb),随后在测试环境回放数据。
单服务
AREX 多服务部署场景
如果生产环境和测试环境之间无法互通,即录制环境和回放环境互相隔离,测试环境无法访问生产环境中数据库,则需要部署多个 AREX 服务。
多服务
部署模式
在生产环境中部署 AREX A,用于在生产环境中录制数据,并存储到 AREX(Mongodb)。
在测试环境中部署 AREX B,用于在测试环境中回放数据。
由 DBA 将数据库数据从 AREX A 单向同步到 AREX B。
AREX A 环境应用录制数据, AREX B 环境应用进行回放。
版本升级更新
通过 Docker Compose 方式一键启动 AREX 时,可以在 deployments 仓库下环境变量 .env 文件中查看当前版本,如果需要使用先前版本,可直接修改该文件中 AREX_VERSION。
进入 docker-compose.yml 所在目录,更新前需先停止原有服务:
cd deployments
docker-compose down -v
注:如果不想保留原有的 Mongodb 数据或日志,请手动删除当前运行目录的 arex-data、arex-logs 目录(请慎重操作,删除后将无法回退!)
更新 deployments 仓库,重新启动 AREX:
git pull
docker-compose up -d
多实例安装
以上,我们介绍了如何使用 AREX 提供的 docker-compose.yml 文件直接安装 AREX 包括前端、服务、数据库等所有组件,此种安装方式下,每个组件只有 1 个实例,无法实现多实例负载均衡和扩容。
如要进行多实例安装,可通过 AREX 提供的 docker-compose-distribute.yml 文件进行缺省安装,运行以下命令:
git clone https://github.com/arextest/deployments.git
cd deployments
docker-compose -f docker-compose-distribute.yml up -d
停止命令
docker-compose -f docker-compose-distribute.yml down -v
PS命令
docker-compose -f docker-compose-distribute.yml ps
缺省配置的调度服务和存储服务是 2 个实例,具体组件实例如下:
ID Instance Model Name Description
1 2 AREX-Schedule 用于发送回放请求并检索所有响应以进行比较。
2 1 AREX-API 为 AREX 前端页面提供所有 API 接口。
3 2 AREX-Storage 为 AREX Agent 提供了以 Mock 方式保存录制和获取响应的功能。
4 1 AREX-Front AREX 前端页面。
5 1 MongoDB 数据存储及配置管理数据库
6 1 Redis 高速回放缓存
7 1 Nginx Schedule 负载均衡服务
8 1 Nginx Storage 负载均衡服务
当然你也可以修改 docker-compose-distribute.yml 配置文件,根据自己的需求配置多实例。
相关文章:

携程开源 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX
携程开源 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX 官网文档 基于真实请求与数据的流量回放测试平台、自动化接口测试平台AREX 目前已跑通,通过冒烟测试,这篇文章稍稍水一下,主要讲下部署过程里踩的坑,因为…...
Android中C++层fstream用法详解
fstream用于读写文件内容 ifstream用于读文件内容 ofstream用于写内容到文件 读本文章前,请读一下C 文件和流 | 菜鸟教程 目录 1. 打开文件open 2. 返回当前指针位置tellg, tellp 3. 设置文件读位置指针seekg 4. 设置文件写位置指针seekp 5. 如何在文件…...

git clone常见问题一览及解决方法
在使用Ubuntu下,终端运行git clone命令时会遇见许多问题,本文主要针对一些常见的问题进行整理。关于换源问题,推荐使用小鱼的一键换源。 1.git clone 速度过慢 1.1 魔法 这个方法不做过多赘述,ubuntu下个人使用发现体验良好&am…...

ArcGIS Pro 如何批量删除字段
在某些时候,我们得到的图层属性表内可能会有很多不需要的字段,如果挨个去删除会十分的麻烦,对于这种情况,我们可以使用工具箱内的字段删除工具批量删除,这里为大家介绍一下使用方法,希望能对你有所帮助。 …...

OG Trade在ZKX揭幕:一家基于Starknet的游戏化永续合约交易所
ZKX的 OG Trade通过内置游戏化和30分钟交易竞赛,为所有交易者创造机会,革新了永续合约交易模式。 2024年1月30日 — ZKX宣布推出OG Trade,这是一家基于Starknet的游戏化永续合约交易所,旨在满足短期交易者、高水平交易者和波段交易…...
ubuntu 22.04 安装redis并设置远程连接
ubuntu 22.04 安装redis并设置远程连接 1、基础安装 更新包: sudo apt update安装redis: sudo apt install redis-server安装完毕后会自动启动,查看状态: sudo systemctl status redis-server注意:如果你的服务器上仅用…...

MemcachedRedis构建缓存服务器
目录 Memcached&Redis构建缓存服务器 一、介绍 二、memcached 1、特点 2、服务框架 3.配置安装memcached 三、redis服务 1、介绍 2、特点 3、缓存 4、安装redis 5、数据持久化 6、redis主从配置 Memcached&Redis构建缓存服务器 一、介绍 许多Web应用都将…...

Python编辑开发 --- pycharm pro 中文
PyCharm Pro是一款专业的Python集成开发环境(IDE),由JetBrains公司开发。它为Python开发者提供了丰富的功能和工具,使得Python编程变得更加高效和便捷。PyCharm Pro具有智能代码编辑功能,能够自动完成代码、快速导航至…...

Linux的 .bashrc 有什么作用?
一、.bashrc 是什么? 有什么用? .bashrc是一个存储在你的home目录下的隐藏文件,它用来配置和自定义你的终端环境和行为。 每次你启动一个新的终端时,.bashrc文件就会被执行,加载你设置的环境变量,别名,函数…...

.ui文件相关
目录 ui类生成过程: 提问: 等以后自己熟练了用代码写这些样式内容,尽量用代码写,原因很简单: 用代码写的可以直接修改代码,但是在设计界面修改的东西,电脑没有QC这玩意,还真不好改…...
【DOCKER】docker 安装sonarque
安装docker 安装docker https://blog.csdn.net/BThinker/article/details/123358697 加入阿里云镜像 https://blog.csdn.net/TommyXu8023/article/details/113291112 { "registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"] }安装sonarqube ht…...
解决IDEA报错端口被占用的问题
遇到的解决方案通常是执行netstat -ano | findstr "8080" ,然后去关闭对应的进程 但是我遇到的是8080改成任意一个端口,都报错端口被占用,且使用上面的命令并不能查到对应的进程 网上找到的方案能解决我的问题,原链接所…...

IDEA:git 回滚本地提交-git 选择 Reset Current Branch to
前言 回滚提交到本地但是还没有 Push 上去的提交 选择我们要回滚的节点,然后点击 git 选择 Reset Current Branch to… 再选择 Hard 。当我们点击 Reset 的时候,代码就会回滚到单前选中的这个版本...

Docker核心教程
1. 概述 官网:https://docs.docker.com/ Docker Hub 网站:https://hub.docker.com/ 容器较为官方的解释: 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立…...

React通用后台模板
一. 项目初始化 1. 创建项目 环境 npm init vite 打开package.json,参考以下各模块版本: "dependencies": { "react": "^18.2.0", "react-dom": "^18.2.0", "react-redux": "^7.2.8", …...

【Axure教程0基础入门】00Axure9汉化版下载、安装、汉化、注册+01制作线框图
写在前面:在哔哩哔哩上面找到的Axure自学教程0基础入门课程,播放量最高,5个多小时。课程主要分为4个部分,快速入门、动态面板、常用动效、项目设计。UP主账号【Song老师产品经理课堂】。做个有素质的白嫖er,一键三连必…...

day38_MySQL
今日内容 0 复习昨日 1 引言 2 数据库 3 数据库管理系统 4 MySQL 5 SQL语言 0 复习昨日 1 引言 1.1 现有的数据存储方式有哪些? Java程序存储数据(变量、对象、数组、集合),数据保存在内存中,属于瞬时状态存储。文件&…...

element ui组件 el-date-picker设置default-time的默认时间
default-time :选择日期后的默认时间值。 如未指定则默认时间值为 00:00:00 默认值修改 <el-form-item label"计划开始时间" style"width: 100%;" prop"planStartTime"><el-date-picker v-model"formData.planStart…...

###C语言程序设计-----C语言学习(8)## 斐波那契数列问题,素数问题,人数分配问题。
前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 今天,我们主要分享三个问题如何用C语言去求解,1.斐波…...
蓝桥杯 第 1 场 小白入门赛
目录 1.蘑菇炸弹 2.构造数字 3.小蓝的金牌梦 4.合并石子加强版 5.简单的LIS问题 6.期望次数 1.蘑菇炸弹 我们直接依照题目 在中间位置的数进行模拟即可 void solve(){cin>>n;vector<int> a(n1);for(int i1;i<n;i) cin>>a[i];int ans0;for(int i2;i…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...

算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...