我想知道是否有一种方法可以记录网络流量,以便我可以使用它一遍又一遍地“重播”相同的负载,以便在已知的实时负载下进行优化测试。
5 回答
也许tcpcopy是您正在寻找的工具。
尝试使用WireShark,它是一个强大的网络诊断工具。但是这个工具没有内置功能来回放流量。
IHMO 根据您的技术简单地重建所有请求是没有意义的,您可能会破坏一切。所以要小心修改数据。它可能会做出无意义的响应并引发错误。
有很多方法可以做到这一点——但这种方法实际上只对静态内容有效。而且由于提供静态内容的系统的性能通常是众所周知的并且可以很好地扩展,因此几乎没有理由以这种方式进行负载测试。IIRC,有一个负载测试产品在多年前作为硬件出售。不过,我已经很多年没有遇到过它们了。
只能以这种方式测试静态站点的原因是,在更典型的交互式站点中,不能完全按照记录的方式重播单个会话。对于每个用户的每次迭代,HTTP 消息的许多位都会发生变化。例如:cookie、内容过期和最后修改的标头以及 URL 查询参数、表单字段和 AJAX 请求中的其他值,这些都是应用程序管理许多并发用户之间的会话状态所必需的。
顺便说一句,配置所有这些字段以发送正确的值是使用 HTTP 捕获和重放(几乎是所有这些)的负载测试工具的最大挑战。为单个会话执行此操作可能很困难。这样做是为了从许多用户那里大量捕获网络流量,这大大提高了标准。
Jmeter 和 Grinder 都有一个记录代理,它允许可以回放的 HTTP 记录。尽管您可能需要更改请求以从以前的请求中解析出任何所需的动态数据。也就是说,记录/回放是 HTTP 流量构建的一个很好的起点。根据您的问题,Grinder 还具有 TCP 记录代理(具有 HTTP 选项),因此您可以真正获得详细的流量。- http://grinder.sourceforge.net/g3/tcpproxy.html
提到这是另一个选项,因为它还没有在这里列出: https ://github.com/buger/gor
Gor 专为满足您对 HTTP 的要求而构建,“专业版”将处理 HTTPS。Gor 内置于 Go 中,并具有许多高级功能:https ://gortool.com/
它是开源的,提供带有一些附加功能的“专业”版本。