一、Diffy

简单来理解,Diffy是一个开源的自动化测试工具,是一种自动Diff测试技术。它能够自动检测基于Apache Thrift或者基于HTTP的服务。通过同时运行新/老代码,对比运行结果,发现潜在bug。并且使用Diffy,只需要进行简单的配置,而不需要再编写测试代码。

二、Gor(GoReplay)

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

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

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

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的用法也远不止上述提到的这些,更多的应用测试场景,可查阅官网。

参考:

(1)推荐一款Diffy:Twitter的开源diff自动化测试工具:基本介绍   超详细实战讲解

(2)推荐一款简单易用线上引流测试工具:GoReplay:基本介绍

diff测试与流量回放测试相关推荐

  1. java化测试神器-流量回放平台

    # java化测试神器-流量回放平台 作者:佳晖,荣荣 文章结构 基本介绍 使用流程 实现方案 总结 基本介绍 背景 目前公司正在进行php java化迁移工作. Java化测试本质上是一次回归工作. ...

  2. Doom流量回放工具导致的测试环境服务接口无响应的排查过程

    Doom流量回放工具导致的测试环境服务接口无响应的排查过程 现象描述: a)部分接口(A组接口)无响应 b)部分接口(B组接口)正常响应 c)还有一部分接口(C组接口),场景1无响应,场景2正常响应 ...

  3. 灰度测试试验流量“洗牌”

    什么是灰度测试 A/B测试系统的一个常用场景是App/小程序/后端服务精细化运营过程中的上线迭代管理,通常被称为灰度测试或者灰度上线. 详细来说,如果软件产品要在不久的将来推出一个全新的功能,或者做一 ...

  4. HTTP 流量拷贝测试神器 GoReplay

    以下文章来源于 一个 程序员 的 修炼之路 ,作者 河边 一枝 柳 一般在软件发布之前,都会经过单元测试, 接口测试, 集成测试, 性能测试等.但是这些测试往往都是基于自己定义的测试数据集合,很可能会 ...

  5. APP专项测试:流量测试

    手机的电量与流量测试主要为了站在用户角度思考,毕竟电量.流量消耗毕竟大,会影响客户的使用感受.手机端电量使用率是和CPU使用率成正比的. 由于这个表现没有毕竟详细的规定,只能给出一个通用的范围,CPU ...

  6. HTTP流量拷贝测试神器GoReplay

    一般在软件发布之前,都会经过单元测试, 接口测试, 集成测试, 性能测试等.但是这些测试往往都是基于自己定义的测试数据集合,很可能会有漏网之鱼,那么在软件上线之后,在线上的流量冲击下,会出现各种之前测 ...

  7. APP测试内容 -- 流量测试常见测试方法

    APP测试内容 -- 流量测试常见测试方法 大部分摘自:https://blog.csdn.net/baidu_21833433/article/details/63255182#commentBox ...

  8. 机器学习从入门到精通50讲(二)-千万级流量压力测试

    前言 压测是目前科技企业及传统企业进行系统容量评估.容量规划的最佳实践方式,本文将基于京东ForceBot平台在大促(京东618.京东双11)备战中的实践历程,给大家分享平台在压测方面的技术变革.Fo ...

  9. 流量回放开源代码Java_流量回放框架 jvm-sandbox-repeater 的实践

    一. 前言 你是否和我一样遇到过以下的问题? 1)服务重构,一堆接口需要回归,让人头疼 2)每次迭代,都要花很多精力来进行回归测试 3)线上 bug,线下复现不了 4)接口自动化用例写辛苦,维护更辛苦 ...

最新文章

  1. 机器学习圣杯:图灵奖得主Bengio和LeCun称自监督学习可使AI达到人类智力水平
  2. c语言数组本质,c语言数组的本质
  3. java调用可执行程序 开销_java – 进行JNI调用的定量开销是多少?
  4. linux 总数 进程_linux性能监控之 top 家族(1)
  5. 《HTML5实战》——1.4 其他API和规范
  6. 判断一个程序员水平高低的标准?
  7. Vue2.0史上最全入坑教程(上)—— 搭建Vue脚手架(vue-cli)
  8. Spiking-YOLO : 前沿!脉冲神经网络在目标检测的首次尝试 | AAAI 2020
  9. oracle按位或运算符怎么用,Oracle按位运算符
  10. Mac快速备忘录开启与关闭设置方法
  11. 罗技 连点 脚本_罗技G宣布与《英雄联盟》合作 推出一系列游戏周边产品
  12. html浅绿色配色效果图大全,纯CSS3渐变色板配色代码
  13. JSP 实用程序之简易图片服务器
  14. C#--color颜色对照表
  15. TreeView的图标个性化和动态数据加载
  16. chroot jail
  17. dbk-5/Empf/CEE/O/M30技术文章dbk-5/Sender/M30/k1
  18. EDG一追一追平LGD,四保一阵容的Iboy从来不会让我们失望!
  19. Android TextView显示网络图片
  20. MIUI国际/欧版使用小米应用商店/国内浏览器-解决不会下载软件/上网问题

热门文章

  1. 域名解析 A记录 MX记录 CNAME记录 TTL
  2. redis如何实现分布式重入锁
  3. Golang爬取网页数据时403
  4. java肝癌晚期_生信分析43.肿瘤浸润免疫与肝癌(HCCDB+oncomine)
  5. 部门树_神奇!十堰这个小山村竟然藏着两棵500多年的爱情树!
  6. Python+OpenCV:ORB: An efficient alternative to SIFT or SURF
  7. Python:OpenCV的默认优化
  8. C++用户自定义转换(User-Defined Conversion)
  9. VC++如何根据进程名获取进程ID
  10. java的基本循环结构_Java基础之(九):循环结构