#jmeter #beanshell
#jmeter #оболочка beanshell
Вопрос:
Я хочу добавить 2 вида параметров к запросу post.
Из http-запроса я извлекаю 2 списка переменных:
Order_id = input type="hidden" name="(drag. ?)" value="(d ?)"
Weight_id = class="draggableviews-weight form-select" id=". ?" name="(drag. ?)"
В следующем запросе Post мне нужно перепечатать все эти переменные. Для этого я использую BeanShell PreProcessor
. Первый список не проблема, так как он получает то же значение. Второй список должен получить новое случайное значение между -50 и 50. Я также хочу другое случайное значение для каждой итерации.
Как я должен это сделать?
Если я использую элемент конфигурации Random Variabele, я получаю одинаковое случайное значение int для каждого параметра. Я хочу другое для каждой итерации.
Ответ №1:
Я бы рекомендовал использовать ThreadLocalRandom.nextInt() метод, подобный
sampler.addArgument(name2, String.valueOf(java.util.concurrent.ThreadLocalRandom.current().nextInt(-50, 51)));
Не встраивайте функции JMeter в сценарии Beanshell, либо передавайте их через раздел «Параметры» и ссылайтесь через Parameters
или args
сокращения, либо используйте соответствующие замены на основе кода.
Смотрите Руководство по использованию BeanShell: JMeter’s Favorite Built-in Component для получения дополнительной информации о сценариях Beanshell в тестах JMeter.
Комментарии:
1. Спасибо @Dmitri T. У меня один вопрос: что должно быть предпочтительнее
java.util.concurrent.ThreadLocalRandom.current().nextInt()
или внутренняя функция JMeter__Random()
? Существуют ли правила / наилучшая практика, когда что использовать?2. Используйте внутренние функции JMeter, где это возможно, при использовании сценариев передавайте их через вкладку «Параметры». Также можно использовать
ThreadLocalRandom
, однако убедитесь, что вы используете элементы JSR223 и Groovy language. Подробнее смотрите в Groovy Is the New Black .
Ответ №2:
Для извлечения нескольких значений из одного экстрактора регулярных выражений мы используем шаблоны следующим образом:
затем передайте группы следующим образом:
На изображении вы можете видеть, что это link
есть Reference Name
, и найдено только совпадение с регулярным выражением.
number of matches is : link_matchNr
first group value : link_1_g1
second group value : link_1_g2
Примечание: Регулярное выражение, которое я пробовал, является google.com вы также можете имитировать то же самое следующим образом:
-
Используйте случайную функцию следующим образом:
значение 2 = ${__Random(-50,50)};
log.info («значение2» значение2);
- Используйте случайную переменную: затем обратитесь
Output Variable
к препроцессору Beanshell следующим образом:
value2 = vars.get(«randomInt»);
- Используйте случайную переменную: затем обратитесь
Комментарии:
1. в чем ошибка? вы проверили значение value2? использовать log.info («values2 » value2); в препроцессоре beanshell и запустить. проверьте значение в журналах
2. 2016/10/21 08:48:59 ОШИБКА — jmeter.config. RandomVariableConfig: maximum() должно быть > minimum1) ОШИБКА 2016/10/21 08:49:01 — jmeter.util. BeanShellInterpreter: Ошибка при вызове метода bsh: eval в файле: встроенная оценка: ` int count = Integer.parseInt(vars.get(«Order_id_matchNr»)); . . . » Встречается «}» в строке 16, столбец 9.
3. Игнорируйте мой предыдущий комментарий. Это то, что я получаю:
4. 2016/10/21 08:54:40 ОШИБКА — jmeter.util. BeanShellInterpreter: Ошибка при вызове метода bsh: eval в файле: встроенная оценка: ` int count = Integer.parseInt(vars.get(«Order_id_matchNr»)); . . . » Обнаружено «}» в строке 15, столбец 9. 2016/10/21 08:54:40 ПРЕДУПРЕЖДЕНИЕ — jmeter.modifiers. BeanShellPreProcessor: проблема в скрипте BeanShell org.apache.jorphan.util. JMeterException: Ошибка при вызове метода bsh: eval в файле: встроенная оценка: ` int count = Integer.parseInt(vars.get(«Order_id_matchNr»)); . . . » Встречается «}» в строке 15, столбец 9.
5. вы должны использовать шаблон, когда вы фиксируете более одного значения (используя несколько групп) в экстракторе регулярных выражений. отредактированный ответ