相信做性能测试的小伙伴们一定听说过流量复制回放,没听说过也没关系,我们大都是在性能测试环境完成压测任务出具性能测试报告,
但是实际生产环境的接口压力流量往往和我们在性能测试环境预估的情况不完全一致,甚至出现较大差异的情况,我们如何模拟出真实的压力流量,可以借助工具,例如早期用得较多的是tcpcopy,但其缺乏过滤HTTP层能力;
推荐使用另外一款工具goreplay,简称gor,其特点如下:
实现HTTP请求的录制以及回放,应用场景是在线上环境录制请求,然后在测试环境进行重放
实现HTTP层面的流量过滤,只过滤出待测流量
支持流量放大,可以应用于性能容量规划测试
gor是go语言实现的,要使用gor工具,需要提前准备go运行环境。
具体操作步骤如下所示:
# 解压缩 如下 gor工具包:
# go1.18.linux-amd64.tar.gz、gor_1.3.3._×64.tar.gz
tar -C /usr/local-zxvf go1.18.linux-amd64.tar.gz
tar -zxvf gor_1.3.3._×64.tar.gz
# 配置环境变量
vim /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
source /etc/profile
# 验证
go env
首先是对生产环境进行流量复制操作,使用如下命令:
# 流量复制
./gor --input-raw:8081 --output-stdout
# 或者 流量复制并保存到文件(推荐)
./gor --input-raw:8081 --output-file "requests.gor"
然后根据业务高峰期等待1小时,甚至更长时间,例如12小时,
这个过程中会看到在gor运行目录下生成requests_0.gor,如果1个文件放不下,会继续生成_1、_2等录制文件。
gor文件会记录整个录制过程中所有发的http协议请求,分批存到不同的gor文件中,按【ctrl+c】停止录制。
然后是在性能环境进行流量回放操作,使用如下命令:
#流量回放 默认回放等待5秒
./gor --input-file "requests_0.gor" --output-http "http://82.156.80.137:8082"
这样就能实现在8081生产环境录制的http流量,重新在性能环境8082上回放一遍,默认是每隔5秒发一次请求。
也可以设置回放倍速为5倍,并且循环发请求,使用如下命令:
# 回放倍速5倍,并且循环(压测推荐)
./gor --input-file "requests_0.gor|500%" --output-http "http://82.156.80.137:8082" --input-file-loop
还可以使用如下流量回放命令:
# 保留上次信息
./gor --input-raw:8081 --output-file "requests_0.gor" --output-file-append
#实时回放
./gor --input-raw:8081 --output-http "http://82.156.80.137:8082"
#缩容
./gor --input-raw:8081 --output-http "http://82.156.80.137:8082|50%" --input-file-loop
#实时回放GET
./gor --input-raw:8081 --http-allow-method GET --output-http "http://82.156.80.137:8082"
参数说明:
–http-allow-url 采用正则表达式,只抓取请求URL中匹配正则表达式的请求
例如–http-allow-url .test.
表示只抓取(或者说录制)请求URL中包含test的请求
–http-allow-header 采用正则表达式,只抓取请求header中匹配正则表达式的请求
例如–http-allow-header api-version:^1.0.\d
表示录制请求头api-version: 以1开头,后面跟.0.,后面跟一个数字;
–http-allow-method 请求方法,只抓取http请求方法为指定的某个请求
例如GET
则为–http-allow-method GET
下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】