JMeter 按小时记录结果

JMeter to record results on hourly basis

我有一个 JMeter 项目,其中有多个 GETPOST 请求和断言。我使用 Aggregate resultsView results tree 听众,但其中 none 可以按小时存储结果。我尝试了 JMeterPlugins-StandardJMeterPlugins-Extras 包以及 jp@gc - Graphs Generator 侦听器,但它们都使用聚合数据而不是每小时数据。所以我想获得每小时成功和失败的数量 requests/assertions,也许条形图最适合这个目的。

您可能想使用具有 --start-offset--end-offset 参数的 Filter Results Tool,您可以将结果文件 "cut" 分成 "interesting" 块并绘制它们根据您的要求。

您可以使用 JMeter Plugins Manager

安装筛选结果工具


另请注意,根据 JMeter Best Practices,您应该

  • Use as few Listeners as possible; if using the -l flag as above they can all be deleted or disabled.
  • Don't use "View Results Tree" or "View Results in Table" listeners during the load test, use them only during scripting phase to debug your scripts.

您可以从 .jtl 结果文件中获取您需要的任何信息,您可以通过 -l command-line argument

指定测试结果位置

我将建议一个非传统的设计级解决方案:使用小时(或日期和小时)动态命名您的采样器,以便每个小时名称都会更改,因此它们将出现在不同的类别中, 即:

该名称的代码是:

${__time(dd:hh,)} the rest of sampler name

这样的采样器在聚合报告中会以如下方式出现(这里我用minutes/seconds模拟了它,但是days/hours也会出现同样的情况,只是规模更大):

这种方法的优缺点:

  • 很简单,当测试运行时,您可以按小时、分钟或任何其他时间片聚合任何内容,而不是在执行后分析。

  • 不依赖于监听器,几乎可以与任何监听器或可视化器一起使用

  • 如果你还想拥有整体统计数据,则需要对每个子类别进行汇总。所以它改变了数据,但它仍然可以相对容易地添加回原始数据。

  • 在每个采样器之前计算 __time 从性能的角度来看不会完全被忽视,但我不认为它会给脚本增加可见的开销。

  • 您可以在执行后通过正确聚合 JTL 或 CSV(无论您使用哪种)来获得相同的数据,因此它不会为您提供使用标准方法无法实现的任何内容

  • 脚本需要修改才能实现。如果您有 100 个采样器,则需要一段时间。如果你想改回来...

要获得每小时的汇总结果,请添加到您的测试计划中 Generate Summary Results:

Generates a summary of the test run so far to the log file and/or standard output

根据您的需要 jmeter.properties 更新间隔,1 小时 3600 秒:

 summariser.interval=3600 

您将获得每小时请求的摘要。

你可以试试Jmeter backend Listener。它集成了 Graphite 和 Influxdb。将结果存储在这些时间序列数据库中后,您可以在 Grafana 仪表板中显示结果。 Grafana 有自己的过滤功能,可以按小时、每月、每天等显示结果。