以下文章来源于 一个 程序员 的 修炼之路 ,作者 河边 一枝 柳
一般在软件发布之前,都会经过单元测试
, 接口测试
, 集成测试
, 性能测试
等。但是这些测试往往都是基于自己定义的测试数据集合,很可能会有漏网之鱼,那么在软件上线之后,在线上流量冲击下,会出现各种之前测试中并没有发现的问题。这是因为线上的流量数据比测试的数据更加多样性,并且随着用户数量的增加,线上流量的也越来越大,更多的隐藏问题也会暴露,比如并发处理不当导致的Crash。那么我们有什么方法能够在上线之前完成这些测试呢?有的,那就是GoReplay
。
GoReplay概述
当前越来越多的产品SaaS化,而SaaS化之后很多的服务都切分成多个微服务
,HTTP又是服务之间常用的远程调用方式。
GoReplay
是一个用Golang
编写的开源的流量复制工具, 基于libpcap
(windows也叫做Winpcap
,Npcap
也可以支持),其原理和Wireshark
和Tcpdump
类似,是一种非侵入软件方式的流量复制方式。
上图是一个典型的应用场景:
GoReplay
实现为一个可执行程序,方便运行, 支持Windows
和Linux
。先将其运行在一个具有流量环境的机器上, 监听指定端口的流量。GoReplay
将监听到的流量,以HTTP
发送到指定的一个或者多台测试机器。- 测试人员可以在测试机器上对流量处理结果进行分析。
软件还提供了丰富的功能:
- 比如根据
HTTP
请求的Method
,请求路径
,请求头
进行过滤 - 可以对请求进行进行改写,比如增加HTTP Header
- 可以基于
Middleware
&