一. 引流测试产生背景

日常大部分的测试工作都是在测试环境下,通过模拟用户的行为来对系统进行验证,包括功能以及性能。在这个过程中,你可能会遇到以下问题:
用户访问行为比较复杂,模拟很难和用户行为一致,模拟不够真实;
线下模拟场景有限,会出现业务覆盖不全的情况。

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

二. 引流测试常见方案

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

上述的几种引流方式各有利弊,有的是需要自己开发相应的工具来支持。而今天给大家介绍的是另外一款简单易用,学习成本低的引流工具Gor。

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

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

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

四. Gor工作流程


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

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

五. Gor支持的常用功能

1、Gor 支持流量的放大和缩小、频率限制,这样不需要搭建和生产环境一致的服务器集群也可以正确测试。
2、Gor 还支持根据正则表达式过滤流量,这意味着可以单独测试某个 API 服务。
3、Gor还可以修改 HTTP 请求头,比如替换 User-Agent, 或者增加某些 HTTP Header 。
4、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 常用实践场景

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

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

2、如果目标服务器使用的库与线上机器一样,且只需要引流Get方法的请求。

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

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

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

4、只复制某个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

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

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

6、将流量转发到多个端点,默认情况下,它会将相同的流量发送到所有输出。

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

7、将相同的流量发送到多个站点,并且平分所有流量。

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

8、HTTP超时,默认情况下,http请求和响应的超时时间为5秒。你可以像这样覆盖它:

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

9、基本身份验证,如果您的开发或登台环境受基本身份验证保护,那么可以在重放期间注入这些凭据:

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

10、性能压力测试

可以将流量复制到文件,然后再对他们进行回放。回放的时候,流量会维持原始的时间间隔。如果你使用了百分比来进行速率限制,那么回放的速率会相应的增加或减少。有了这种速率限制,gor就可以用来进行压力测试。
gor --input-file “requests.gor|200%” --output-http “staging.com”
目前,input-file仅在使用基于百分比的限制器时才支持此功能。与默认限制器不同input-file,它不会降低请求速度,而会减慢速度或加速请求发射。

11 、录制与回放

./gor --input-raw :8000 --output-file=requests.gor
执行录制命令后,将会创建新文件并不断向其写入所有捕获的请求。

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

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

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

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

参考链接 :
推荐一款简单易用线上引流测试工具:GoReplay :https://mp.weixin.qq.com/s/0H4pXQvfXAAdfiAj8sbTsA

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

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

    一. 引流测试产生背景 日常大部分的测试工作都是在测试环境下,通过模拟用户的行为来对系统进行验证,包括功能以及性能.在这个过程中,你可能会遇到以下问题: 用户访问行为比较复杂,模拟很难和用户行为一致, ...

  2. 百度推广有哪些技巧方法?如何利用线上引流的方式做百度推广?

    百度推广是一种常见的网络推广方式,它是通过百度网站上的各种广告服务来实现的.鲨鱼网媒小编接下来为你分享. 一.百度推广技巧 关键词研究 关键词研究是百度推广的基础,推广时要了解和研究当前市场上的热门关 ...

  3. 性能测试之线上引流测试--让性能测试更真实更丰富

    为什么要做引流测试 目前为止大部分的测试是在测试环境下,通过模拟用户的行为来对系统进行验证,包括功能以及性能.在这个过程中,你可能会遇到以下问题: 用户访问行为比较复杂,模拟很难和用户行为一致,模拟不 ...

  4. 简单易用的APP专项测试工具iTest4.7.0发布啦

    1.  更新说明 内存增加了PrivateDirty监控维度(应用独占内存大小).增加了帧率的分析维度.增加了页面响应时间和刷新时间指标 支持监控电池和流量的过程中做清理操作 添加电池和cpu温度监控 ...

  5. 线上引流压测工具Meteor

    压测可能一般都会从技术角度上分读场景和写场景,因为在读和写上两种情况都不一样,举个例子 对于价格请求来说,一般都是后台修改价格后,前台大量的浏览价格,这种明显读场景占比90%以上的业务,对于写的压测是 ...

  6. 字节跳动自研线上引流回放系统的架构演进

    本文选自"字节跳动基础架构实践"系列文章. "字节跳动基础架构实践"系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造的技术干货内容,和大家分享团队在基础 ...

  7. 快速搭建小程序,实现线上引流获客

    小程序--已经成为线下商家从线上引流获客的首选渠道. 不说废话,欣赏一下这亮眼的数据: 根据喜茶披露的数据,截至2019年12月31日,喜茶已在43个城市开出390家门店,新增主力店157家.Go店6 ...

  8. Gateway杂谈:线上引流和灰度发布

    2019独角兽企业重金招聘Python工程师标准>>> 前言 Gateway目前支持路由,使用路由可以用来实现很多高级功能,比如线上引流和灰度发布. 线上引流 很多时候,开发的小伙伴 ...

  9. 小红书怎么推广引流?怎么样在小红书上引流?

    小红书平台的流量还是相当可观的,而且小红书用户的购买力非常强,小红书成为流量的一大风口,很多商家和品牌方在小红书上做推广都能达到相当不错的效果. 小红书怎么推广引流?怎么样在小红书上引流?小红书引流也 ...

最新文章

  1. 桌面笔记工具KeepNote
  2. BI报表开发之环境搭建(二)
  3. CVPR 2019 | PoolNet:基于池化技术的显著性目标检测
  4. android webView的使用
  5. 华科05-03年计算机考研复试机试
  6. writing avocado tests(写avocado测试用例)
  7. 力扣501. 二叉搜索树中的众数(JavaScript)
  8. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--请求处理函数装饰器注册篇(5/8)【controller+action】...
  9. jvm crash分析工具
  10. 在线UML图设计 用例图 在线制图
  11. 计算机无法获得有效ip地址,无法获取ip地址,详细教您电脑无法获取ip地址的解决方法...
  12. UE4 相机对焦学习笔记
  13. 住宅代理和数据中心代理哪个更好?
  14. 领先大厂股价大跌,半导体行业形势不妙
  15. Tensorflow深度学习学习笔记
  16. group by 用法解析
  17. 网易云音乐为什么这么懂你?
  18. 2021章节练习基础(案例精选)50-60
  19. 全套PR资源--含RAR解压密码
  20. 2023年【山东省安全员C证】考试及山东省安全员C证考试内容

热门文章

  1. 如何从零开发一个复杂深度学习模型
  2. vba替换字符串中的字符_R语言 | 字符串替换
  3. oracle md,Oracle笔记.md
  4. 史上最全android分辨率
  5. 计算机三角函数习惯原创的音乐,三角函数 UNIT版
  6. ajax如何用编号查询姓名,Ajax js 使用Ajax检测用户名是否存在
  7. Confluence 6 升级自定义的站点和空间布局
  8. Oracle 10g升级之--PSU 升级(续)
  9. 【Silverlight】Bing Maps学习系列(九):自定义功能导航条(Custom NavigationBar)
  10. 云计算设计模式(二十四)——仆人键模式