1. Обзор
В этом руководстве мы рассмотрим два метода извлечения данных из Apache JMeter и записи их во внешний файл.
2. Настройка базового сценария JMeter
Давайте теперь начнем с создания базового скрипта JMeter. Давайте создадим группу потоков
с одним потоком (это значение по умолчанию при создании группы потоков
):
В этой группе потоков
давайте теперь создадим HTTP Sampler
:
Давайте настроим наш HTTP-семплер
для вызова API, работающего на локальном хосте.
Мы можем начать с определения API с помощью простого контроллера REST :
@RestController
public class RetrieveUuidController {
@GetMapping("/api/uuid")
public Response uuid() {
return new Response(format("Test message... %s.", UUID.randomUUID()));
}
}
Кроме того, давайте также определим экземпляр Response
, возвращаемый нашим контроллером, как указано выше:
public class Response {
private Instant timestamp;
private UUID uuid;
private String message;
// getters, setters, and constructor omitted
}
Давайте теперь воспользуемся этим, чтобы протестировать наш скрипт JMeter. По умолчанию это будет работать на порту 8080. Если мы не можем использовать порт 8080, нам нужно соответствующим образом обновить поле « Номер порта
» в HTTP Sampler
.
Запрос HTTP Sampler
должен выглядеть следующим образом:
3. Запись извлеченного вывода с помощью прослушивателя
Далее, давайте воспользуемся прослушивателем типа Save Responses to a file,
чтобы извлечь нужные данные в файл:
Использование этого слушателя удобно, но не дает большой гибкости в том, что мы можем извлечь в файл . В нашем случае это создаст файл JSON, который будет сохранен в том месте, где в данный момент запущен JMeter (хотя путь можно настроить в поле « Префикс имени файла»
).
4. Запись извлеченного вывода с использованием постпроцессора
Другой способ извлечения данных в файл — создание BeanShell
PostProcessor
. BeanShell
— это очень гибкий обработчик сценариев, который позволяет нам писать наш сценарий с использованием кода Java, а также использовать некоторые встроенные переменные, предоставляемые JMeter .
BeanShell
можно использовать для множества различных вариантов использования. В этом случае давайте создадим постпроцессор BeanShell
и добавим скрипт, который поможет нам извлечь некоторые данные в файл:
Теперь добавим следующий скрипт в раздел Script :
FileWriter fWriter = new FileWriter("/<path>/result.txt", true);
BufferedWriter buff = new BufferedWriter(fWriter);
buff.write("data");
buff.close();
fWriter.close();
Теперь у нас есть простой скрипт, который будет выводить строковые данные
в файл с именем result. Здесь важно отметить второй параметр конструктора FileWriter
. Это должно быть установлено в true
, чтобы наш BeanShell
дописывал файл, а не перезаписывал его. Это очень важно при использовании нескольких потоков в JMeter.
Затем мы хотим извлечь что-то более значимое для нашего варианта использования. Давайте воспользуемся переменной ctx
, предоставляемой JMeter. Это позволит нам получить доступ к контексту, хранящемуся в нашем единственном потоке, выполняющем HTTP-запрос.
Из ctx
давайте получим код ответа, заголовки ответа и тело ответа и извлечем их в наш файл:
buff.write("Response Code : " + ctx.getPreviousResult().getResponseCode());
buff.write(System.getProperty("line.separator"));
buff.write("Response Headers : " + ctx.getPreviousResult().getResponseHeaders());
buff.write(System.getProperty("line.separator"));
buff.write("Response Body : " + new String(ctx.getPreviousResult().getResponseData()));
Если мы хотим собрать определенные данные поля и записать их в наш файл, мы можем использовать переменную vars
. Это карта, которую мы можем использовать в постпроцессорах
для хранения и извлечения строковых данных.
Для этого более сложного примера давайте создадим еще один постпроцессор
перед нашим экстрактором файлов. Это выполнит поиск по ответу JSON из HTTP-запроса:
Этот экстрактор создаст переменную с именем message
. Все, что осталось сделать, это сослаться на эту переменную в нашем экстракторе файлов, чтобы вывести ее в наш файл:
buff.write("More complex extraction : " + vars.get("message"));
Примечание. Мы можем использовать этот подход в сочетании с другими постпроцессорами, такими как «Извлечение регулярных выражений», для более точного сбора информации.
5. Вывод
В этом руководстве мы рассмотрели, как извлекать данные из JMeter во внешний файл с помощью постпроцессора BeanShell и прослушивателя записи. Сценарий JMeter и приложение Spring REST, которые мы использовали, можно найти на GitHub.