前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何通过GoReplay进行线上流量录制与回放

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

作者头像
测试邦
修改2019-08-24 22:41:58
6.7K0
修改2019-08-24 22:41:58
举报
文章被收录于专栏:测试邦测试邦

GoReplay简介

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

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

GoReplay安装

代码语言:javascript
复制
 #下载包
 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端口的包,输出到控制台,测试下是否可以录制到流量

代码语言:javascript
复制
sudo ./gor --input-raw :80 --output-stdout

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

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

流量回放验证

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

代码语言:javascript
复制
sudo ./gor --input-raw :80 --output-file=requests.gor   

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

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

代码语言:javascript
复制
 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执行如抓包命令:

代码语言:javascript
复制
tcpflow -cp -i lo port 81

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

代码语言:javascript
复制
./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,完整流量录制命令如下所示:

代码语言:javascript
复制
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因为涉及到加解密

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试邦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GoReplay简介
  • GoReplay安装
  • 流量录制验证
  • 流量回放验证
  • 其他常用支持功能
    • 追踪原始IP
      • 限制
        • 性能测试
        • 其他
        相关产品与服务
        测试服务
        测试服务 WeTest 包括标准兼容测试、专家兼容测试、手游安全测试、远程调试等多款产品,服务于海量腾讯精品游戏,涵盖兼容测试、压力测试、性能测试、安全测试、远程调试等多个方向,立体化安全防护体系,保卫您的信息安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档