2017-10-06 137 views
0

我使用JP @ GC的终极线程组线程组内我有一个,如果控制器务必在进行仅隔线程/用户继续如果控制器JMeter的线程组

(${__threadNum}%2==0) 

好像有虽然有一些问题关闭了线程,但是因为在加载完成之后,我收到了很多错误,因为我有线程进入控制器。我不确定它们是什么,它们似乎不是关于if控制器的内容,因为即使在关闭所有内容之后我仍然可以获取它们。

我在Windows 10上使用jMeter 3.2和Ultimate Thread Group 2.1。

错误消息:

java.lang.StackOverflowError: null 
at java.lang.invoke.MethodHandles.insertArguments(Unknown Source) ~[?:1.8.0_131] 
at jdk.internal.dynalink.DynamicLinker.createRelinkAndInvokeMethod(DynamicLinker.java:224) ~[nashorn.jar:?] 
at jdk.internal.dynalink.DynamicLinker.link(DynamicLinker.java:201) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.linker.Bootstrap.bootstrap(Bootstrap.java:208) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:371) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:345) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.linker.InvokeByName.<init>(InvokeByName.java:86) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.linker.InvokeByName.<init>(InvokeByName.java:73) ~[nashorn.jar:?] 
at jdk.nashorn.internal.objects.Global.<init>(Global.java:96) ~[nashorn.jar:?] 
at jdk.nashorn.internal.runtime.Context.newGlobal(Context.java:1111) ~[nashorn.jar:?] 
at jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:350) ~[nashorn.jar:?] 
at jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:346) ~[nashorn.jar:?] 
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_131] 
at jdk.nashorn.api.scripting.NashornScriptEngine.createNashornGlobal(NashornScriptEngine.java:346) ~[nashorn.jar:?] 
at jdk.nashorn.api.scripting.NashornScriptEngine.createGlobalMirror(NashornScriptEngine.java:340) ~[nashorn.jar:?] 
at jdk.nashorn.api.scripting.NashornScriptEngine.createBindings(NashornScriptEngine.java:170) ~[nashorn.jar:?] 
at org.apache.jmeter.control.IfController$NashornJsEngine.evaluate(IfController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.IfController.evaluateCondition(IfController.java:185) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.IfController.next(IfController.java:239) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:219) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.next(GenericController.java:173) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.next(LoopController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.nextIsNull(LoopController.java:151) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.next(GenericController.java:168) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.next(LoopController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:222) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.next(GenericController.java:173) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.next(LoopController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.nextIsNull(LoopController.java:151) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.GenericController.next(GenericController.java:168) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at org.apache.jmeter.control.LoopController.next(LoopController.java:123) ~[ApacheJMeter_core.jar:3.2 r1790748] 
at... etc etc 

编辑:现在,我放弃这一点,只需要使用香草线程组,因为它不给任何错误。

回答

0

我通过对具有所有其他用户/线程进行拆卸,如果控制器固定我的问题新电话。我没有这样做,所以只有一半的线程被创建,它们的数量是乘以2,具有相同的效果。这使得所有类型的线程组都可以工作。

2

有一个已知的issue与Ultimate插件和如果controller.you可以检查这在JSR 223元素和只检查布尔结果如果控制器。例如保存vars.putObject("myBoolean", isTrue);和检查${myBoolean}作为条件。

编辑

更好的解决方案,你可以,如果控制器${even}检查和之前使用JSR223元素与定义,即使=真/假的串

if (ctx.getThreadNum() % 2 == 0) { 
    vars.putObject("even", "true"); 
    log.info("even true"); 
} else { 
    vars.putObject("even", "false"); 
     log.info("even false"); 
} 
+0

啊,我明白了。谢谢回复! – tjarles

+0

这也给出了和以前相同的结果。其他的一定是错的。 – tjarles

+0

绝对。这只是导致问题的线程组,并且所有服务器和IP地址已被删除,所以它不起作用。 https://expirebox.com/download/682e753f241cb4bf12df3e7e6253abd3.html – tjarles

2

由于JMeter 3.1 it is recommended to use JSR223 Test Elements and __groovy function用于任何形式的在JMeter中编写脚本,所以我会建议从JavaScript切换到Groovy,并在If Controller的“条件”区域中使用__groovy() function,例如:

${__groovy(ctx.getThreadNum() %2 == 0,)} 

Apache Groovy - Why and How You Should Use It文章中的JMeter的测试,基准测试,最佳实践中对Groovy脚本的详细信息等

+0

啊,非常感谢您的回复!我会试试这个。 – tjarles

+0

这给出了和以前相同的结果。其他的一定是错的。 – tjarles

相关问题