【问题标题】:load test with varying number of threads in JMeter在 JMeter 中使用不同数量的线程进行负载测试
【发布时间】:2015-05-14 17:56:58
【问题描述】:

过去几天我一直在探索 JMeter。我试图实现以下目标: 我正在尝试为服务创建负载测试,以便在第一个循环中创建“n”个线程,在第二个循环中创建“n+m”个线程,在第三个循环中创建“n+2m”个线程,在第四个“n+3m”线程等等。我确实在这里找到了很多解决方案,并尝试复制它们,但不知何故它对我不起作用。我创建的测试计划如下所示:

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

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

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

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

【问题讨论】:

  • 这里已经回答过了。您可以使用属性/变量来参数化线程数。一旦启动,我认为不能修改。

标签: jmeter performance-testing load-testing


【解决方案1】:

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

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

如果您希望一个线程组填充另一个线程组的运行时设置,您必须在测试计划中有两个线程组。在测试计划级别,选中“按顺序运行线程组”选项。

使用该选项,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/

【讨论】:

  • 嘿,Ron,我认为你建议的插件似乎对我有用。感谢您提供的解释。帮助我更好地理解 jMeter。
【解决方案2】:

JMeter 目前无法在测试执行期间动态更改线程数,因此我建议使用以下替代方案:

  • 使用即Ultimate Thread Group,可通过JMeter Plugins 获得,它为 JMeter 的线程组添加了一些额外的功能,以便您能够实现您的场景
  • 当负载基于每秒请求数而不是虚拟用户数时,请考虑所谓的“面向目标的方案”。您可以使用Constant Throughput Timer 精确设置所需的吞吐率,甚至可以在测试运行期间更改它

【讨论】:

    猜你喜欢
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多