如何通过GoReplay进行线上流量录制与回放

GoReplay简介

GoReplay是一款开源的用来进行http流量录制与回放的工具,因此可以通过它来进行线上真实流量录制然后将录制的流量回放到测试环境用来确认新开发的功能是否有问题,这样可以极大的提高新功能发布的信心,不得不说是一款神器。

它的Github主页如下:https://github.com/buger/goreplay

GoReplay安装

 #下载包
 wget https://github.com/buger/goreplay/releases/download/v1.0.0/gor_1.0.0_x64.tar.gz
 
 #解压
 tar xvf gor_1.0.0_x64.tar.gz

流量录制验证

执行下如下命令,录制80端口的包,输出到控制台,测试下是否可以录制到流量

sudo ./gor --input-raw :80 --output-stdout

打开浏览器访问部署在该服务器的一个已部署好的80端口的web服务,或者通过curl访问也可以,url如下http://www.testbang.cn/images/about.jpg

如果有如下是输出说明可以成功录制80端口的流量

流量回放验证

GoReplay既支持实时回放也支持先录制下来后续回放,我们先用后一种方式来验证下是否可成功回放。执行如下命令将录制的80端口的流量存到文件

sudo ./gor --input-raw :80 --output-file=requests.gor   

这时候可以请求下这个URL:http://www.testbang.cn/images/about.jpg,假如我请求了3次,请求完后中断上面的gor录制,然后将录制文件requests.gor拷贝到另外一台服务器,测试下是否可以成功回放

我在即将回放的测试服务器(暂且命名为B服务器)上部署了另外一个web服务,我用Nginx搭的,主要映射如下:

 server_name perftest.com;
 listen [::]:81 http2 reuseport ipv6only=off default_server;
 listen [::]:443 ssl http2 reuseport ipv6only=off default_server;
 location / {
        return 200 "Hello World";
 }

如上配置,访问perftest.com的81端口,不管后面接的的path如何,都会返回Hello World,通过curl测试如下:

现在尝试回放录制的文件requests.gor,且将流量回放到B服务器的81端口,为了确认刚才录制的3次请求有回放到服务器B的81端口可以抓个包确认下(也可以通过Nginx的日志确认),在服务器B执行如抓包命令:

tcpflow -cp -i lo port 81

这时候可以在服务器B执行如下命令进行流量回放了

./gor --input-file requests_0.gor --output-http="http://perftest.com:81"

查看tcpflow的抓包结果,可以看到有3个HelloWorld返回,返回太长了没都截图全,如下所示:

这样就可以说明回放的流量确实导到测试环境的81端口了,至此流量录制与回放已都验证可行。因为线上流量的丰富性以及真实性是我们平常测试所无法比拟的,通过线上流量的录制来回放到测试环境可以用来验证很多我们之前传统测试所不能暴露的问题。

其他常用支持功能

追踪原始IP

通过上面的流量录制方式,流量播放抓包是可以发现是没办法看到原始流量的IP的,可以通过录制的时候添加--input-raw-realip-header "X-Real-IP" 来保留原始的IP,完整流量录制命令如下所示:

sudo ./gor --input-raw :80 --input-raw-realip-header "X-Real-IP" --output-file=requests.gor
Version: 1.0.0

这样回放上面的录制文件的时候抓包时就可以看到原始的IP了,如下所示:<br />

限制

如果线上流量比较大的时候GoReplay也提供回放的时候进行频率限制的功能,可通过如下两种方式进行限制

还可以通过--http-allow-url xxx限制只回放指定path的请求等,也可以通过Header或Url的参数限制请求,具体参数可通过--help查看

性能测试

GoRelpay可以通过提高或者减低请求的速度来进行加几倍的增加或者较少回放,可通过如下方式进行

其他

不支持https因为涉及到加解密

更多测试好文请关注如下微信公众号:

原文发布于微信公众号 - 测试邦(testerbang)

原文发表时间:2019-08-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券