Получение пустых данных ответа, когда переменная не определена

#groovy #jmeter #jsr223

#groovy #jmeter #jsr223

Вопрос:

Я пытаюсь использовать следующий код для проверки ответа a HTTP Request , который вызывается из другого Thread Group a Module Controller .

 File myfile = new File(FileServer.resolveBaseRelativeName("results/"   filen   "-report.xml"));

if(${__isVarDefined(vars.get("myvar"))} == true){
        FileUtils.writeByteArrayToFile(myfile,bytes);
} else {
        FileUtils.writeStringToFile(myfile, prev.getResponseDataAsString(), "UTF-8");
}
  

Empty xml создается, когда myvar переменная пуста, она не содержит данных ответа на запрос.

Ответ №1:

Вы можете записать byte[] в обоих случаях, используя getResponseData() (и удаленный вызов функции)

 if(vars.get("myvar") ! null){
    FileUtils.writeByteArrayToFile(myfile, bytes);
} else {
    FileUtils.writeByteArrayToFile(myfile, prev.getResponseData());
}
  

Комментарии:

1. prev.getResponseData() кажется нулевым, но HTTP-запрос получил ответ.

2. @plaidshirt у вас есть другой постпроцессор, который управляет результатом?

3. Я использую несколько экстракторов путей JSON для получения значений.

Ответ №2:

  1. Вы не можете использовать vars сокращение для извлечения значений из другой группы потоков, поскольку переменные JMeter являются локальными для потока, следовательно, к ним нельзя получить доступ из другой группы потоков. Вместо этого вам нужно использовать props . Смотрите документацию:

    Свойства не совпадают с переменными. Переменные являются локальными для потока; свойства являются общими для всех потоков, и на них необходимо ссылаться с помощью функции __P или __property.

  2. Не вставляйте функции или переменные JMeter в скрипты Groovy, если вам нужно проверить, определена переменная или нет — попытайтесь получить ее и посмотреть, так ли это null :

     if (vars.get('myvar') != null) {
        //the code will be executed if the var is defined
    }
      

Ознакомьтесь с Transferring Data and Objects (like List, Maps, Array etc.) Between Samplers and Threads главой шпаргалки Groovy Templates для JMeter для получения более подробной информации.


В абсолютном большинстве случаев проще использовать плагин для взаимодействия между потоками

Комментарии:

1. Переменная myvar присутствует в фактической группе потоков, предыдущая.getResponseDataAsString() должна поступать из другой.

2. Вам нужно сделать что-то вроде props.put('response', prev.getResponseDataAsString()) в 1-й группе потоков и FileUtils.writeStringToFile(myfile, props.get('response'), 'UTF-8') во 2-й группе потоков

3. Я вижу, но в этом случае я сохраняю ответ в каждом случае в значении свойства, но в большинстве случаев я его не использую.