推荐一款简单易用线上引流测试工具:GoReplay

一. 引流测试产生背景

平常大部分的测试工做都是在测试环境下,经过模拟用户的行为来对系统进行验证,包括功能以及性能。在这个过程当中,你可能会遇到如下问题: javascript

  • 用户访问行为比较复杂,模拟很难和用户行为一致,模拟不够真实;java

  • 线下模拟场景有限,会出现业务覆盖不全的状况。nginx

 

引流测试的出现就是为了解决以上问题,它的本质是:经过把线上的真实流量复制到线下环境,解决测试环境模拟不够真实,或覆盖不够全面的问题。git

 

二. 引流测试常见方案

目前很多公司对引流测试进行了实践探索,常见的有如下4种引流方式(不限):github

引流方式 实现方式 优势 缺点
Nginx层流量复制 安装lua-nginx-module、ngxdevelkit、headers-more-nginx-module模块,经过lua脚本实现把请求复制给测试环境。 安装和部署还较为简单。 须要开发lua脚本,且对资源有必定占用。
基于业务代码层的引流 将业务代码的调用封装成请求对象,异步的写入缓存中。引流工具经过读缓存中的请求,向测试环境发起请求。 扩展性好,可定制化高。 须要开发流量复制工具,工做量较大,且对工做自己的性能要求较高。
基于访问日志回放 线上系统记录访问日志,引流工具经过解析日志,向测试环境发起请求。 离线方式,对线上影响小。 须要开发日志解析工具,且解析的开销会较大。
基于TCP/IP层的引流 目前已开源的工具备TcpCopy 安装、部署使用都较为简单。 仅适合无状态的业务,且对业务请求须要进行过滤。

上述的几种引流方式各有利弊,有的是须要本身开发相应的工具来支持。而今天给你们介绍的是另一款简单易用,学习成本低的引流工具Gor。正则表达式

 

三. 推荐一款引流工具:Gor

Gor,又称为GoReplay,是采用Golang 编写的一个开源的 HTTP 实时流量复制工具。它只须要在 LB 或者 Varnish 入口服务器上执行一个进程,就能够把生产环境的流量复制到任何地方,好比 Staging 环境、Dev 环境。经常使用于压测及线上问题复现。sql

 

注:Golang 是采用Gor 实现且开源的,意味着能够方便的集成到本身的架构中,能够用在压力测试平台、实时流量分析、应用层防火墙等方面。缓存

 

四. Gor工做流程

 

监听服务器捕获http流量并将其发送到重放服务器或保存到文件,重播服务器将流量转发给给定的地址。服务器

 

注:Gor不是代理人,不须要将第三方工具放到关键路径上。相反,Gor只是默默地分析你的应用程序的流量,并不影响自己程序。架构

 

 

五. Gor支持的经常使用功能

一、Gor 支持流量的放大和缩小、频率限制,这样不须要搭建和生产环境一致的服务器集群也能够正确测试。

二、Gor 还支持根据正则表达式过滤流量,这意味着能够单独测试某个 API 服务。

三、Gor还能够修改 HTTP 请求头,好比替换 User-Agent, 或者增长某些 HTTP Header 。

四、Gor 还能够把请求记录到文件,以备回放和分析。Gor 支持和 ElasticSearch 集成,将流量存入 ES 进行实时分析。

 

六. Gor 下载安装

官网下载地址:https://github.com/buger/goreplay/releases 下载最新的Gor二进制文件(支持Windows,Linux x64和Mac OS提供预编译的二进制文件),或者能够自行编译。

 

获取gor版本:https://github.com/buger/goreplay/releases

源码地址:https://github.com/buger/goreplay

官方使用文档:https://github.com/buger/gor/wiki

 

 

七. Gor 经常使用命令用法

可用输入:

  • --input-raw - 用于捕获HTTP流量,您应该指定IP地址或接口和应用程序端口。有关捕获和重放流量的更多信息。

  • --input-file- 接受以前使用的文件--output-file。更多关于保存和从文件重播

  • --input-tcp - 若是您决定未来自多个转发器Gor实例的流量转发给它,则由Gor聚合实例使用。阅读关于使用Aggregator-forwarder设置

可用输出:

  • --output-http - 重放HTTP流量到给定的端点,接受基础URL。阅读[关于它的更多信息](重播HTTP流量)

  • --output-file - 记录传入的流量到文件。更多关于保存和从文件重播

  • --output-tcp- 将传入数据转发给另外一个Gor实例,并与其一块儿使用--input-tcp。阅读关于Aggregator-forwarder设置的更多信息。

  • --output-stdout - 用于调试,输出全部数据到stdout。

 

更多参数,可查阅官网文档。

 

八. Gor 经常使用实践场景

一、流量实时复制引流(--input-raw 拦截端口配合--output-http输出),例如将本机80端口的HTTP流量实时复制到targer_server:8080。

gor --input-raw :80 --output-http "http://target_server:8080"

 

二、若是目标服务器使用的库与线上机器同样,且只须要引流Get方法的请求。

gor --input-raw :80 --http-allow-method GET --output-http "http://target_server:8080"

 

三、当须要对线上服务进行总体性能压测时,可将线上请求扩大N倍,进行引流,将请求扩大1倍,也可缩小,调整"|"后面的百分比便可。

gor --input-raw :80 --http-allow-method GET --output-http "http://target_server:8080|200%"

 

四、只复制某个URL请求,--http-allow-url参数,-http-allow-url参数可用正则表达式(--output-http-url-regexp在gor 0.16已通过期,使用--http-allow-url代替)。

gor --input-raw :8080 --http-allow-method GET --output-http "http://target_server:8080" --http-allow-url mall.*hotword

 

五、多目标服务器的流量复制引流,有点相似nginx的mirror。

gor --input-raw :80 --output-http "http://target_server:8080" --output-http "http://target_server2:8080"

 

六、将流量转发到多个端点,默认状况下,它会将相同的流量发送到全部输出。

gor --input-tcp :28020 --output-http "http://staging.com" --output-http "http://dev.com"

 

七、将相同的流量发送到多个站点,而且平分全部流量。

gor --input-raw :80 --output-http "http://staging.com" --output-http "http://dev.com" --split-output true

 

八、HTTP超时,默认状况下,http请求和响应的超时时间为5秒。你能够像这样覆盖它:

gor --input-tcp replay.local:28020 --output-http http://staging.com --output-http-timeout 30s

 

九、基自己份验证,若是您的开发或登台环境受基自己份验证保护,那么能够在重放期间注入这些凭据:

gor --input-raw :80 --output-http "http://user:pass@staging.com"

 

十、性能压力测试

能够将流量复制到文件,而后再对他们进行回放。回放的时候,流量会维持原始的时间间隔。若是你使用了百分比来进行速率限制,那么回放的速率会相应的增长或减小。有了这种速率限制,gor就能够用来进行压力测试。

gor --input-file "requests.gor|200%" --output-http "staging.com"

目前,input-file仅在使用基于百分比的限制器时才支持此功能。与默认限制器不一样input-file,它不会下降请求速度,而会减慢速度或加速请求发射。

 

11 、录制与回放

./gor --input-raw :8000 --output-file=requests.gor

执行录制命令后,将会建立新文件并不断向其写入全部捕获的请求。

 

十二、流量回放,重播来自文件的请求。

./gor --input-file requests.gor --output-http="http://localhost:8001"

您应该看到全部记录到http://localhost:8001的请求,而且它们将以相同的顺序重播,而且与录制的时间彻底相同。

 

gor的用法也远不止上述提到的这些,更多的应用测试场景,还请读者自行挖掘。

 

来自https://mp.weixin.qq.com/s?__biz=MzA4NDUyNzA0Ng==&mid=2247484058&idx=1&sn=de40eaf888e87d1fac6dc925cac9a01b&chksm=9fe49033a8931925c25065993111ad911e35babeec392ecbe2a7dd29c3bb5d0ceb665671370e&scene=21#wechat_redirect 

相关文章
相关标签/搜索