JMeter - переменная, установленная в препроцессоре jsr 223, недоступна в то время как контроллер - PullRequest
0 голосов
/ 22 сентября 2019

Внутри группы потоков у меня есть «препроцессор jsr 223», где я устанавливаю переменную, подобную этой:

List<String> EDPResultList = new ArrayList();
vars.putObject("EDPResultList",EDPResultList);

Затем внутри контроллера while у меня есть «HTTP Request Sampler».Для обработки ответа я добавил «постпроцессор jsr 223», в котором я пытаюсь получить доступ к объекту следующим образом -

Object resObj = vars.getObject("EDPResultList");

Я получаю исключение -

"ОШИБКА oajeJSR223PostProcessor:Проблема в сценарии JSR223, постпроцессоре JSR223 для начального получения javax.script.ScriptException: groovy.lang.MissingPropertyException: такого свойства нет: EDPResultList для класса: Script238 at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval (GroovyScript) javaImpl.eval (Groove).~ [groovy-all-2.4.16.jar: 2.4.16] "

Как мне определить список, который я могу использовать в своей" Группе потоков "и для нескольких итераций" Пока Контроллер ".

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

В самом коде Groovy нет ничего плохого:

enter image description here

Скорее всего, ваш JSR223 Pre Processor по какой-либо причине не выполняется, либо из-за Правила определения объема или отсутствует Sampler , поскольку препроцессоры не могут быть выполнены без сэмплеров.Попробуйте добавить log.info('something') в конце препроцессора, чтобы убедиться, что он запущен.

0 голосов
/ 23 сентября 2019

Для работы с ArrayList в JMeter используйте следующий подход:

  1. План тестирования будет выглядеть следующим образом, сначала в Sampler есть JSR223 Pre Processor, который инициализирует ArrayList.В то время как у Контроллера есть второй Sampler с Постпроцессором JSR223, который обращается к ArrayList.enter image description here
  2. JSR223 Предварительный процессор внутри первого сэмплера.Поместите следующий код в область сценария

    import java.util.List;
    
    List<String> list = new ArrayList<>();
    
    list.add("John");
    list.add("Peter");
    list.add("Parkar");
    
    vars.putObject("List",list);
    

    enter image description here

  3. Состояние контроллера: ${__BeanShell(${flow}==true,)}.Это будет работать только для одного цикла, так как ${flow} будет установлен в false в постпроцессоре JSR223 enter image description here

  4. Постпроцессор JSR223 внутри второго сэмплера в разделе Покаконтроллер.Поместите следующий код в область скрипта.Вот как вы можете получить доступ к ArrayList

    ArrayList result = vars.getObject("List");
    for (String value : result) {
    log.info("Values are : " + value);
    }
    vars.put("flow", "false");
    

    enter image description here

  5. Результат enter image description here

...