Jmeter: случайное число с beanshell

#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. Я также хочу другое случайное значение для каждой итерации.

Как я должен это сделать?

изображение 1
изображение 2
изображение 3

Если я использую элемент конфигурации 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 вы также можете имитировать то же самое следующим образом:
введите описание изображения здесь

  1. Используйте случайную функцию следующим образом:

    значение 2 = ${__Random(-50,50)};

    log.info («значение2» значение2);

    1. Используйте случайную переменную: введите описание изображения здесь затем обратитесь 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. вы должны использовать шаблон, когда вы фиксируете более одного значения (используя несколько групп) в экстракторе регулярных выражений. отредактированный ответ