6

我正在使用 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");
    }
    
  3. 在第二个线程组中,我添加了一个具有以下条件的 If 控制器:

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

此解决方案不起作用,我在测试结束时看到以下错误:

2016/12/22 20:52:30 错误 - jmeter.threads.JMeterThread:测试失败!java.lang.StackOverflowError at 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.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:101) 在 org.apache.jmeter.testelement .AbstractTestElement.getPropertyAsString(AbstractTestElement.java:271) 在 org.apache.jmeter.control.IfController.getCondition(IfController.java:177) 在 org.apache.jmeter.control.IfController.next(IfController.java:240) 在org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:

……

……

……

(如上继续约1000行)

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

谢谢盖伊H

4

1 回答 1

2

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

JMeter 的最新版本中有一些修复:

尝试使用新版本的 JMeter

解决方法是添加一个Test Action (自 5.0 起重命名为 Flow Control Action)作为 Loop Controller 的第一个子项,暂停 = 0

于 2018-10-11T12:19:20.590 回答