在 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
更改它
最近几天我一直在研究 JMeter。我正在尝试实现以下目标: 我正在尝试为服务创建负载测试,以便在第一个循环中创建 'n' 个线程,在第二个循环中创建 'n+m' 个线程,在第三个循环中创建 'n+2m' 个线程,在第四个 'n+3m' 线程中,依此类推。我确实在这里找到了许多解决方案,并尝试复制它们,但不知何故它对我不起作用。我创建的测试计划看起来像这样:
第 1 步:添加名为 USERCOUNT = 0 的用户定义变量
第2步:创建线程组。我已经使用 __intSum 将 USERCOUNT 加一并将结果存储回 USERCOUNT 以供将来参考。
不确定我是否遗漏了一些愚蠢的东西,或者我的方法本身是完全错误的。来自社区的任何帮助将不胜感激。 :)
我相信你想做的事是不可能的。当 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 更改它