#groovy #jmeter #jsr223
#groovy #jmeter #jsr223
Вопрос:
Я пытаюсь использовать следующий код в 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, но после выполнения его нет. Я выполняю тест в одном потоке.
Ответ №1:
Не используйте ${}
синтаксис в скрипте 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")
Комментарии:
1. Прежде всего, CSV-файл не обновляется значением переменной. Значение обновляется на каждой итерации. Возможно ли также получить вкладку результатов сэмплера в файл?
Ответ №2:
Ваш синтаксис неверен, вам нужно изменить первую строку, чтобы она выглядела как:
if(prev.getResponseCode().equals('200')){
также вам вообще не нужна эта строка
String res="${response}";
вместо этого используйте следующее:
fstream.write(vars.get('response') "n");
смотрите документацию по JSR223 Sampler для подробного объяснения, соответствующую цитату:
JMeter обрабатывает ссылки на функции и переменные перед передачей поля script интерпретатору, поэтому ссылки будут разрешены только один раз. Ссылки на переменные и функции в файлах сценариев будут переданы интерпретатору дословно, что, вероятно, вызовет синтаксическую ошибку.
В общем, вы движетесь в неправильном направлении, в случае, если вы запустите свой тест с> 1 потоком, вы можете столкнуться с состоянием гонки, когда 2 потока будут записывать в один и тот же файл, что приведет к мусору, если не хуже.
Если вам нужно сохранить ответы в отдельный файл, я бы рекомендовал:
- Извлечение всего ответа в переменную JMeter с использованием, т.е. экстрактора регулярных выражений
- Определение свойства Пример переменной для хранения этого значения
- Запишите значение в файл с помощью гибкой программы записи файлов
Комментарии:
1. Он ничего не записывает. Я пытаюсь использовать FileWriter с
FileServer.getFileServer().getBaseDir() "\logresult.csv"
, но имеет тот же эффект, файл не обновляется.2. @Dmitri T: Пожалуйста, предложите наилучший способ добиться записи данных в один файл при запуске с большим количеством потоков в Jmeter
3. Я бы выбрал гибкую программу записи файлов