goreplay简介
https://github.com/buger/goreplay
GoReplay是一个开源工具,用于捕获实时HTTP流量并将其重放到测试环境中,以便使用真实数据持续测试系统。
GoReplay不是代理,而是监听网络接口上的流量,不需要更改生产基础架构,而是在与服务相同的计算机上运行GoReplay守护程序。
goreplay工作原理
goreplay常见用法
1 | 1. 简单的 HTTP 流量复制: |
gor参数
1 | [root@~]# gor --help |
diffy简介
http://www.github.com/twitter/diffy
Diffy是一个开源的自动化测试工具,它能够自动检测基于Apache Thrift或者基于HTTP的服务。使用Diffy,只需要进行简单的配置,之后不需要再编写测试代码。
Diffy主要基于稳定版本和它的副本的输出,对候选版本的输出进行比较,以检查候选版本是否正确。因此,Diffy首先假设候选版本应该和稳定版本有“相似”的输出。即不论候选版本和稳定版本系统模块是否相同,他们的最终输出应该是“相似”的。
Diffy工作原理
在测试过程中,Diffy充当一个代理,它能够将来源请求分发到不同版本的系统中去,通过对各个版本系统的输出进行对比,做出最终的结论。
Diffy需要三个版本的系统,以实现它的噪声过滤和对比功能,它们分别是:
候选版本:该版本是待测版本,相对于生产环境版本有着跟新的代码
稳定版本:该版本通常是已经上线版本,或者是已知功能正常的版本
稳定版本副本:该版本是稳定版本的副本,和稳定版本运行相同的代码,主要用于排除噪声
整个运行流程为:
其中:
1.原始区别为候选版本和稳定版本之间输出的区别,其中可能会包含上述的噪声
2.噪声从稳定版本和其副本中获得,如果两个运行相同代码的系统输入相同输出却不同,则Diffy会认为这是开发人员不需要关心的噪声。
基于上述两个区别集合,Diffy可以识别出候选版本和稳定版本真实的区别,这些区别很有可能就是一个缺陷。
当然,对于一个概率性出现随机值,仅仅一次请求的结论可能是不准确的。例如对于一个50%概率出现true或者false的布尔值,则有50%的概率会出现候选版本和稳定版本的不同,同时又会有50%的概率出现稳定版本和其副本出现不同(即将这个值认定为噪声),最终会有25%的概率认为这是一个缺陷。因为此时稳定版本和其副本值相同,候选版本和稳定版本值不同。因此,Diffy还会聚合原始区别和噪声,当发现二者出现的概率类似的时候,会认定之前识别出来的缺陷属于误报。
示例
gor
1 | https://github.com/buger/goreplay/wiki/Getting-Started |
gor限流
1 | # Limiting replay using absolute number |
goreplay+diffy
1 | 1. Deploy your old code to localhost:9990. This is your primary. |
参考
1 | https://goreplay.org/ |