在 JMeter 中使用不同数量的线程进行负载测试

load test with varying number of threads in JMeter

最近几天我一直在研究 JMeter。我正在尝试实现以下目标: 我正在尝试为服务创建负载测试,以便在第一个循环中创建 'n' 个线程,在第二个循环中创建 'n+m' 个线程,在第三个循环中创建 'n+2m' 个线程,在第四个 'n+3m' 线程中,依此类推。我确实在这里找到了许多解决方案,并尝试复制它们,但不知何故它对我不起作用。我创建的测试计划看起来像这样:

第 1 步:添加名为 USERCOUNT = 0 的用户定义变量

第2步:创建线程组。我已经使用 __intSum 将 USERCOUNT 加一并将结果存储回 USERCOUNT 以供将来参考。

理想情况下,我在这里期望的是,在第一个循环中创建一个线程,在第二个循环中创建 2 个线程,在第三个循环中创建 3 个线程。所以总共应该创建 6 个线程。然而,结果显示如下:

不确定我是否遗漏了一些愚蠢的东西,或者我的方法本身是完全错误的。来自社区的任何帮助将不胜感激。 :)

我相信你想做的事是不可能的。当 JMeter 第一次启动线程组时,它会初始化线程数。

您实际上想做的是重新运行 同一测试三次,每次使用不同数量的用户。 JMeter不能重新运行一个线程组,它只能重新运行 ("loop")一个线程组中的线程。一旦启动并初始化线程,就不可能将线程添加到 运行ning 线程组。 (如果我应该尝试进一步解释,请告诉我)。

如果你想让一个线程组填充另一个线程组的运行-时间设置,你必须在测试计划中有两个线程组。在测试计划级别,勾选 "Run Thread Groups Sequentially."

选项

使用该选项,JMeter 将不会初始化第二个线程组上的线程数,直到第一个线程组完成。第一个线程组可以设置一个全局的属性,第二个线程组可以在线程数中引用

如何在 beanshell 中设置 属性:(这将在线程组 1 中)

props.put("threadgroup_2_num_users","15");

如何在线程组 2 中引用该值:

${__P(threadgroup_2_num_users)}

如果这没有帮助,也许可以尝试描述您的最终目标。关于您正在测试的东西,您想了解什么?

编辑:也许使用插件包 "Stepping Thread Group" 可以让您在单个线程组中实现您正在尝试的场景。看一下这个: http://jmeter-plugins.org/wiki/SteppingThreadGroup/

JMeter 目前不提供在测试执行期间即时更改线程数的可能性,因此我建议使用以下替代方法:

  • 使用即 Ultimate Thread Group available via JMeter Plugins,它向 JMeter 的线程组添加了一些额外的功能,因此您将能够实现您的方案
  • 当负载基于每秒请求数而不是虚拟用户数时,考虑所谓的 "goal oriented scenario"。您可以精确设置所需的吞吐率,甚至可以在测试 运行 期间使用 Constant Throughput Timer
  • 更改它