#jmeter #beanshell
Вопрос:
У меня следующая ситуация с jmeter: у меня есть две группы потоков, и я хочу использовать переменную, извлеченную из ответа от первого, во второй поток. Что я делаю:
- переменная извлекается с помощью экстрактора путей JSON/YAML, а затем устанавливается как свойство с утверждением BeanShell
${__setProperty(id, ${id})};
- Затем во второй группе потоков у меня есть препроцессор BeanShell, в котором я пытаюсь изменить значение с помощью следующего сценария
String ids2 = props.get("id");
String ids3 = vars.put(${__intSum(2,-4)});
String ids = vars.put(ids,"${__intSum(${ids2},${ids3})}");
В результате я получаю исключение в jmeter
ava.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source) ~[?:1.8.0_221]
at java.lang.Integer.parseInt(Unknown Source) ~[?:1.8.0_221]
at java.lang.Integer.parseInt(Unknown Source) ~[?:1.8.0_221]
at org.apache.jmeter.functions.IntSum.execute(IntSum.java:66) ~[ApacheJMeter_functions.jar:5.4.1]
at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:138) ~[ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:113) ~[ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:91) ~[ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.testbeans.TestBeanHelper.unwrapProperty(TestBeanHelper.java:129) ~[ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.testbeans.TestBeanHelper.prepare(TestBeanHelper.java:84) ~[ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.engine.StandardJMeterEngine.notifyTestListenersOfStart(StandardJMeterEngine.java:202) ~[ApacheJMeter_core.jar:5.4.1]
at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:382) ~[ApacheJMeter_core.jar:5.4.1]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_221]
Цель состоит в том, чтобы уменьшить переменную на 2, а затем перенести ее в другую переменную, которую я буду использовать только во второй группе потоков
Любая помощь будет высоко оценена
Комментарии:
1. Вы можете рассмотреть следующее: 1. Преобразуйте строку
ids2
в число перед добавлением 2. vars.put() должен иметь два параметраkey,value
. И ключ, и значение должны быть строками 3.ids
должны находиться в кавычках 4. Используйте компоненты JSR223 с Groovy
Ответ №1:
- Начиная с JMeter 3.1 рекомендуется использовать тестовые элементы JSR223 и язык Groovy для написания сценариев
- Ваш подход может работать для 1 потока, но если у вас будет > 1 поток, свойство будет перезаписано, если вы хотите, чтобы каждый поток (виртуальный пользователь) имел свое собственное значение, вам следует добавить текущий номер потока в качестве префикса или постфикса для свойства. Соответствующая функция __threadNum() или, если вы предпочитаете сценарии, вы можете вызвать
ctx.getThreadNum()
функцию - В подавляющем большинстве случаев плагин межпроточной связи проще в использовании