Запуск препроцессора один раз за цикл потока в JMeter

#jmeter

Вопрос:

Если я использую препроцессор JSR223 со следующим кодом:

 log.info(""   ${rand});
 

где ${rand} находится случайная переменная, как я могу изменять эту переменную каждый раз, когда я зацикливаю этот поток?

Изменение количества потоков действительно приведет к изменению переменной при каждом запуске, в цикле она просто принимает одно значение и сохраняет его для всех остальных циклов.

Помещение его в пробоотборник JSR223 дает тот же результат. Я в основном хочу, чтобы код вел себя как пользовательский параметр.

1

Ответ №1:

Не вставляйте функции или переменные JMeter в тестовые элементы JSR223, потому что:

  1. Они могут превратиться во что-то, что приведет к сбою компиляции
  2. Синтаксис конфликтует с функцией GStrings Groovy
  3. Если вы установите Cache compiled script if available флажок, первое вхождение будет кэшироваться и использоваться на последующих итерациях, если вы этого не сделаете — вы потеряете преимущества производительности Groovy

    При использовании этой функции убедитесь, что в коде сценария не используются переменные JMeter или вызовы функций JMeter непосредственно в коде сценария, так как кэширование будет кэшировать только первую замену. Вместо этого используйте параметры сценария.

Так:

  • Либо переместите свою ${rand} переменную в раздел «Параметры» и измените свой код на
      log.info(""   Parameters);
     

    введите описание изображения здесь

  • или используйте vars сокращение для экземпляра класса JMeterVariables, в этом случае измените свой код следующим образом:
      log.info(""   vars.get("rand"));
     

Ответ №2:

Вам нужно использовать vars, чтобы избежать кэширования/одного и того же значения

  vars.get("rand")
 

См. Рекомендации по применению JSR223

скрипт не использует никаких переменных ${varName} , так как кэширование будет принимать только первое значение ${varName .. Вместо этого используйте vars.get("varName")