Если контроллер в группе потоков jMeter

Я использую Ultimate Thread Group jp@gc, и внутри группы потоков у меня есть контроллер if, который следит за тем, чтобы только каждый другой поток/пользователь продолжал

(${__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

Изменить: на данный момент я отказываюсь от этого и просто использую ванильную группу потоков, поскольку она не дает никаких ошибок.


person tjarles    schedule 06.10.2017    source источник


Ответы (3)


Начиная с JMeter 3.1 рекомендуется использовать тестовые элементы JSR223 и функцию __groovy. для любой формы сценариев в JMeter, поэтому я бы рекомендовал переключиться с JavaScript на Groovy и использовать __groovy( ) в области «Условие» вашего контроллера If, например:

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

Дополнительную информацию о Groovy-скрипты в контексте тестов JMeter, бенчмарков, лучших практик и т. д.

person Dmitri T    schedule 09.10.2017
comment
Ааа, большое спасибо за ответ! Я попробую это вместо этого. - person tjarles; 09.10.2017
comment
Это дает тот же результат, что и раньше. Что-то еще должно быть не так. - person tjarles; 23.10.2017

Существует известная проблема с плагином Ultimate, и если контроллер. проверьте это в элементе JSR 223 и проверьте только логический результат в контроллере If. например, сохраните vars.putObject("myBoolean", isTrue); и отметьте ${myBoolean} как условие.

ИЗМЕНИТЬ

Лучшее решение, вы можете проверить, использует ли контроллер ${even}, а перед ним использовать элемент JSR223 с определением даже = true/false как String

if (ctx.getThreadNum() % 2 == 0) {
    vars.putObject("even", "true");
    log.info("even true");
} else {
    vars.putObject("even", "false");
        log.info("even false");
}
person user7294900    schedule 06.10.2017
comment
ААА понятно. Спасибо за ответ! - person tjarles; 09.10.2017
comment
Это также дает тот же результат, что и раньше. Что-то еще должно быть не так. - person tjarles; 23.10.2017
comment
Абсолютно. Это только группа потоков, вызывающая проблемы, и все серверы и IP-адреса были удалены, поэтому она не будет работать. expirebox.com/download/682e753f241cb4bf12df3e7e6253abd3.html - person tjarles; 23.10.2017
comment
Ну, это примерно то, что было в файле, который я загрузил. Я тестировал использование как логических, так и строковых значений, и оба они не работают. Изменить: if-controller работает, но не решает мою первоначальную проблему. - person tjarles; 23.10.2017
comment
Ваш элемент JSR223 был отключен и с другим кодом - person user7294900; 23.10.2017
comment
Да. Я пробовал несколько конфигураций, в которых элемент JSR был включен и содержал варианты того, что было в нем, когда я его опубликовал. - person tjarles; 23.10.2017

Я исправил свою проблему, удалив if-controller для того, чтобы каждый другой пользователь/поток делал новый вызов. Вместо этой логики я сделал так, что создается только половина потоков, а их количество вместо этого умножается на два, что дает тот же эффект. Это заставило работать все типы групп потоков.

person tjarles    schedule 06.11.2017