访问日志回放用于负载测试?Jmeter的陷阱和竞争对手。

14

背景

我们希望使用“重放”Web服务器访问日志来生成负载测试。我最近读了一些关于在云中使用jmeter的博客文章(例如,启动多个Amazon EC2实例以生成负载)。

多年来,我听说过JMeter的回放访问日志功能,但在审查此功能时,我发现以下内容。

访问日志采样器

  • 可以:

    • 重新创建会话,即处理jsessionId令牌(尽管它试图通过IP地址近似会话);
  • 不能:

    • 处理POST数据(即使您可以配置Apache / Tomcat将POST数据写入访问日志中,jmeter访问日志采样器只处理“常见”日志格式)。

POST数据将大有裨益,以重现实际负载。

此外,虽然该文档已有8年历史,但其描述访问日志采样器为“alpha代码”。 它似乎没有得到积极维护。(这比Gmail的beta时间更长。)

HttpPerf

另一篇博客文章向我介绍了httperf工具。 我已经开始阅读它:

总结

  • 从真实用户数据生成负载测试“脚本”的最佳方法是什么?
  • 什么方法对您效果最好?
  • 各种工具的优缺点是什么?

+1 我一直无法让 JMeter 做到这一点。 - BlackGaff
1
一个问题,您的配置是什么,可以将帖子数据转储到访问日志中。我找不到简单的方法来做到这一点? - Manish Sapariya
面对同样的问题。我尝试播放来自Apache服务器的日志,但注意到我需要配置记录的请求正文和Cookie。你能分享一下你的Apache配置吗? - Maxim Kitsenko
3个回答

1

JMeter + HTTP原始请求 + 原始数据源对我来说很有效


@andrey-pokhilko,您能否在您的回答中添加更多细节?您从哪里获取HTTP原始请求 - 我无法配置Apache以记录POST请求数据。“原始数据源”是什么意思? - Maxim Kitsenko
原始数据源是JMeter的一个插件。但是现在我不建议使用它,还有其他可行的方法,比如BlazeMeter Taurus工具。 而且,使用Apache没有简单的方法来获取POST请求体。 - Andrey Pokhilko

0

我将描述如何使用我们自己的LT工具Yandex Tank来解决这个问题。 它可以处理简单的access.log,但只能处理'GET'请求。当需要进行其他类型的请求时,我们使用其他弹药格式(弹药是一个包含我们要发送到服务器的所有请求的文件)。例如:

342
POST / HTTP/1.1^M
Host: xxx.xxx.xxx.xxx:8080^M
Connection: keep-alive^M
Keep-Alive: 300^M
Content-Type: multipart/form-data; boundary=AGHTUNG^M
Content-Length: 1400^M
Connection: Close^M
^M
--AGHTUNG^M
Content-Disposition: form-data; name="fp"; filename="fp_tank"^M
Content-Type: application/octet-stream^M
Content-Transfer-Encoding: binary^M
...
--AGHTUNG--^M

第一行上的数字('342')是一个后续请求的大小。请求以原始格式呈现。你可以用你最喜欢的编程语言编写一个简单的脚本,从你的access.log文件中生成这样的弹药文件,然后用它进行负载测试。

这种弹药格式使其非常灵活。例如,this代码会从FCGI日志中生成弹药(POST主体以Base64编码)。但另一方面,你需要手动处理会话。


0
您可以使用ZebraTester轻松地重放带有POST数据的访问日志。它具有许多类似于JMeter的插件,还可以添加内联脚本,从而可以轻松地从访问日志中定位POST负载、URL、时间戳等。您可以直接从工具本地运行负载测试,或将记录的脚本复制到SaaS门户以运行大规模百万虚拟用户负载测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接