JMeter 线程组加速时间加持续时间问题

问题描述

运行 JMeter 5.4.1 版

我对 JMeter 线程组进行了以下设置:

  • 线程数:300

  • 加速时间:300 秒

  • 循环次数:无限

  • 指定线程生存时间:持续时间 600 秒,启动延迟:0

线程组设置为在样本错误后继续。

因此,通过上述设置,我希望测试每秒启动 1 个线程,当它达到 300(5 分钟)秒时,它将运行完整的 300 个线程。每个线程在停止之前应该运行 600 秒(10 分钟)。我预计总运行时间为 900 秒(最后一个线程从第 5 分钟开始 + 10 分钟运行时间 = 15 分钟)。

但实际行为不同,我不知道为什么。

实际行为:

--300 秒后启动 300 个线程,每秒 1 个线程。很酷,这正是我所期待的。

--在 600 秒标记处,第一个线程开始死亡。到目前为止很酷

--在 12 分钟即 720 秒时,所有线程都已关闭,测试完成... 嗯...这里发生了什么?我期待的是整整 300 秒的放松时间,而不是 120 秒?

因此,完整测试在 720 秒(12 分钟)时完成,而不是完整的 900 秒(15 分钟)。

谁能向我解释一下这里发生了什么?

解决方法

您必须相应地配置您的测试持续时间。

在您的情况下,测试在 600 秒结束。最后 120 秒是那些活动线程的下降时间。你可以通过Active Threads Over Time Listener观察它。

您的总测试时间将类似于 warm-up period + hold load activity + warm-down period。即 (300+600+300)= 1200 秒或 20 分钟。

300 秒内将有 300 个线程处于活动状态,然后所有 300 个线程将在 600 秒内命中对服务器的请求,然后这 300 个线程将在接下来的 300 秒内关闭。

您也可以像这样使用 Ultimate Thread Group 以更好地了解您的测试,其中预热期用作 120 秒,因此测试的总持续时间为 (5+10+2)=17 分钟或 1020 秒。

enter image description here

,

不准确,指定duration of the test加上完成迭代

这表示测试的总持续时间。通过指定持续时间值来运行测试的一个缺点是,当测试持续时间完成时,测试会立即停止;没有完成循环(迭代),因此您可以看到交易计数的一些差异。

,

您指定的测试持续时间为 600 秒,为什么您希望测试持续更长时间?

一旦超过 600 秒,JMeter 将要求线程停止,所有线程停止所需的时间主要取决于测试的性质、请求/响应大小等。在理想情况下,应立即停止测试。

因此,如果您希望测试运行 15 分钟,请将持续时间设置为 900 秒。

如果您希望逐步减少 - 考虑在您的测试计划中添加一个计时器或切换到允许精确控制线程的 custom thread group,请参阅 How to Ramp Down in JMeter 文章了解更多详细信息。

回到线程终止需要 2 分钟,不应该是这种情况,确保 run your JMeter test in command-line non-GUI mode 并关注其他 JMeter Best Practices