Blazemeter: свойство не обменивается между группами потоков - PullRequest
0 голосов
/ 19 мая 2018

Я тестирую API, используя JMeter, который отлично работает локально.Однако, когда я загружаю свой план тестирования и файл параметров в Blazemeter, он не работает хорошо и выдает ошибку

javax.script.ScriptException: ReferenceError: "getFinancialDashboard_responseCode" не определен в номере строки1

в логах.getFinancialDashboard_responseCode - это свойство, которое я определил в предыдущей группе потоков, и его значение передается в разделенную группу потоков для отправки уведомлений в приложение обмена сообщениями на основе кода ответа.

Я пытался определить это свойство в тестеконфигурации на Blazemeter, но это служит другой цели, т.е. переопределяет значение.Определение этого свойства в конфигурациях Blazemeter позволяет успешно выполнить тест, но переопределяет текущее значение, заданное в группе потоков, и заставляет его отправлять нежелательные уведомления.

Вот полный журнал исключений:

2018-05-19 10:46:02,874 ERROR o.a.j.c.IfController: If_getIspDashboardData_Fails: error while processing [getFinancialDashboard_responseCode != 200;]
javax.script.ScriptException: ReferenceError: "getFinancialDashboard_responseCode" is not defined in <eval> at line number 1
at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:470) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:454) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:406) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:402) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155) ~[nashorn.jar:?]
at org.apache.jmeter.control.IfController$NashornJsEngine.evaluate(IfController.java:124) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.control.IfController.evaluateCondition(IfController.java:185) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.control.IfController.next(IfController.java:239) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:219) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.control.GenericController.next(GenericController.java:173) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.control.LoopController.next(LoopController.java:128) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.control.GenericController.nextIsAController(GenericController.java:222) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.control.GenericController.next(GenericController.java:173) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.control.LoopController.next(LoopController.java:128) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.threads.AbstractThreadGroup.next(AbstractThreadGroup.java:87) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:248) [ApacheJMeter_core.jar:4.0 r1823414]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_141]
Caused by: jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "getFinancialDashboard_responseCode" is not defined
at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291) ~[nashorn.jar:?]
at jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:1441) ~[nashorn.jar:?]
at jdk.nashorn.internal.scripts.Script$1$\^eval\_.:program(<eval>:1) ~[?:?]
at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494) ~[nashorn.jar:?]
at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393) ~[nashorn.jar:?]
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:449) ~[nashorn.jar:?]
... 15 more

Как обрабатывать свойства в Blazemeter, чтобы можно было обмениваться значениями между группами потоков?

1 Ответ

0 голосов
/ 21 мая 2018

Я сильно сомневаюсь, что ваш тест "отлично работает локально", так как, скорее всего, вы настроили свой If-контроллер следующим образом:

JMeter If Controller - BAD

, что неверно вусловия JavaScript.Если вы действительно где-то определили getFinancialDashboard_responseCode, вы должны использовать следующее условие:

${__groovy(!props.get('getFinancialDashboard_responseCode').equals('200'),)}

Также убедитесь, что флажок Interpret Condition as Variable Expression? установлен:

JMeter Groovy

Дополнительная информация: 6 Советы по использованию контроллера JMeter


Если по какой-либо причине вы хотите продолжить использовать JavaScriptвам нужно изменить свое условие так:

  • получить свойство с помощью функции __P ()
  • окружить вызов функции свойства и 200с кавычками, такими как:

    "${__P(getFinancialDashboard_responseCode,)}" != "200"
    

Но учтите, что с точки зрения производительности JavaScript работает намного хуже по сравнению с Groovy.

Также имейте в виду, что вы должны иметь возможность обратиться к BlazeMeter Support , это должно быть быстрее, и шанс получить реальный профессиональный ответ будет намного выше, чем на форумах сообщества.

...