简介
goreplay 是一个开源工具,抓取生产环境流量,并使用真实流量持续测试系统。
它使用raw-socket 抓取系统流量,并根据指定的url ,将流量进行转发。
使用
依赖
如果你只是为了测试,可以使用
gor file-server :8000
快速启动一个文件服务器,用来测试
安装
可以到 https://github.com/buger/gor/releases 下载特定版本及平台的二进制包,并放在可执行目录下。 (当前支持的系统有 Windows, Linux x64 and Mac OS)
抓取数据包
现在,可以简单地运行 sudo ./gor –input-raw :8000 –output-stdout 将抓到的包打印到终端,进行查看。
它的原理有点类似于tcpdump
重放数据包
现在,可以试着将抓取的数据包往另外一个服务器重放了。启动另一个文件服务:gor file-server :8001
使用–output-http 替换 –output-stdout 参数,并加上要转发的url,就可以将抓到的包转发到目的地址了。
sudo ./gor --input-raw :8000 --output-http="http://localhost:8001"
向第一个服务发起几个请求,可以看到,请求也到达了第二个服务。成功!
保存以及重放
可以使用 –output-file 以及–input-file 来保存数据包,以及重放数据包:
保存数据包到文件requests.gor:
sudo ./gor --input-raw :8000 --output-file=requests.gor
重放数据包
./gor --input-file requests.gor --output-http="http://localhost:8001"
总结
现在,可以安全地将生产环境的数据包保存下来,并在测试环境进行重放了。
这样做的好处是,可以低成本地获得生产环境的真实测试用例。这些测试用例,也可以为测试人员提供参考。以便写出比较符合生产的测试用例。
附录-gor 常用命令
简单的 HTTP 流量复制:
gor –input-raw :80 –output-http "http://staging.com"
HTTP 流量复制频率控制:
gor –input-tcp :28020 –output-http "http://staging.com|10"
HTTP 流量复制缩小:
gor –input-raw :80 –output-tcp "replay.local:28020|10%"
HTTP 流量记录到本地文件:
gor –input-raw :80 –output-file requests.gor
HTTP 流量回放和压测:
gor –input-file "requests.gor|200%" –output-http "staging.com"
HTTP 流量过滤复制:
gor –input-raw :8080 –output-http staging.com –output-http-url-regexp ^www.