Сохраните ответы в файл в JMeter с помощью PostProcessor - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь использовать следующий код в JSR223 PostProcessor для сохранения ответа в файл CSV в каждой итерации.

if(${__groovy(ctx.getPreviousResult().getResponseCode(),)} == "200"){
    vars.put("response", prev.getResponseDataAsString());

    String res="${response}";
    FileWriter fstream = new FileWriter("logresult.csv",true);
    fstream.write(res+"\n");
    fstream.close();    
}

Я предполагаю, что файл CSV должен быть создан в той же папке, что и jmx, но его нет после выполнения. Я выполняю тест в одном потоке.

Ответы [ 2 ]

1 голос
/ 07 марта 2019

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

if(prev.getResponseCode().equals('200')){

также вам не нужна эта строка вообще

String res="${response}";  

вместо этого используйтеследующее:

fstream.write(vars.get('response')+"\n");

см. Документация JSR223 Sampler для подробного объяснения, соответствующую цитату:

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


В общем случае вы идете в неверном направлении; в случае, если вы запускаете тест с> 1 потоком, вы можете столкнуться с условием гонки , когда 2 потока будутзаписывать в тот же файл, что приводит к мусору, если не хуже.

Если вам нужно сохранить ответы в отдельном файле, я бы порекомендовал:

  1. Извлечение всего ответа в переменную JMeter с использованием, например, Извлечение регулярных выражений
  2. Определение свойства Sample Variable для хранения этого значения
  3. Запись значения в файл с использованием Flexible File Writer
1 голос
/ 07 марта 2019

Не используйте ${} синтаксис в сценарии JSR223 как часть JMeter рекомендации

if(prev.getResponseCode() == "200"){
    String res=prev.getResponseDataAsString();
    vars.put("response", res);
    FileWriter fstream = new FileWriter("logresult.csv",true);
    fstream.write(res+"\n");
    fstream.close();    
}

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

...