在JMeter

时间:2015-05-14 17:56:59

标签: jmeter performance-testing load-testing

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

步骤1:添加名为USERCOUNT = 0

的用户定义变量

enter image description here

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

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

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

2 个答案:

答案 0 :(得分:1)

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

您实际上要做的是每次使用不同数量的用户重新运行相同的测试三次。 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/

答案 1 :(得分:0)

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

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