如果jMeter的Controller抛出StackOverflowError

Guy*_*ara 5 jmeter threadgroup

我正在使用jMeter来加载我的系统.我有两个线程组.第一个应该注入大约1M个事件,而第二个模拟UI的请求.

我需要第二个线程组继续向UI发送请求,直到第一个完成注入1M事件.

我找到了这个解决方案,并按如下方式实现:

  1. 在第一个线程组中,我使用以下代码添加了BeanShell PreProcessor:

    props.put("DONE","FALSE");

  2. 仍然在第一个线程组中,我使用以下代码添加了BeanShell PostProcessor:

    int activeThreadCount = org.apache.jmeter.threads.JMeterContextService.getNumberOfThreads();

    if (activeThreadCount <= 1)
    {
    props.put("DONE", "TRUE");
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在第二个线程组中,我添加了一个具有以下条件的If Controller:

    $ {__ BeanShell(props.get("DONE")!= null && props.get("DONE")=="TRUE")}

此解决方案无法正常工作,我在测试结束时看到以下错误:

2016/12/22 20:52:30错误 - jmeter.threads.JMeterThread:测试失败!java.lang.StackOverflowError java.lang.String.valueOf(Unknown Source)at java.lang.StringBuilder.append(Unknown Source)at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:152) org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:117)位于org.apache.jit.testelement的org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:101) org.apache.jmeter.control.IfController.getCondition(IfController.java:177)中的.AbstractTestElement.getPropertyAsString(AbstractTestElement.java:271)atg.apache.jmeter.control.IfController.next(IfController.java:240)at org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:222)位于org.apache.jmeter.control.LoopController.next的org.apache.jmeter.control.GenericController.next(GenericController.java:176) LoopController.java:123)org.apache.j上的org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:225)mm.control.GenericController.next(GenericController.java:176)位于org.apache.j中的org.apache.jmeter.control.LoopController.next(LoopController.java:123)org.apache.control.LoopController.nextIsNull(LoopController.java: 151)org.apache.jmeter.control.GenericController.next(GenericController.java:171)at org.apache.jmeter.control.LoopController.next(LoopController.java:123)

......

......

......

(继续上述约1000行)

任何人都可以告诉我这个错误的来源是什么?我可以简单地忽略它吗?看起来它是一个没有任何停止条件的递归操作.

谢谢盖伊H.

UBI*_*ACK 2

如果 If Controller 是 LoopController 的唯一子级并且启动时为 false,则这可能是 JMeter < 2.12 中的一个老错误。

最近版本的 JMeter 进行了一些修复:

尝试使用新版本的 JMeter

解决方法是将测试操作(自 5.0 起重命名为流量控制操作)添加为循环控制器的第一个子级,其中暂停 = 0