Перейти к основному содержимому

Запись извлеченных данных в файл с помощью JMeter

· 4 мин. чтения

1. Обзор

В этом руководстве мы рассмотрим два метода извлечения данных из Apache JMeter и записи их во внешний файл.

2. Настройка базового сценария JMeter

Давайте теперь начнем с создания базового скрипта JMeter. Давайте создадим группу потоков с одним потоком (это значение по умолчанию при создании группы потоков ):

./67da909dd0fcc0222536776608f159c9.png

В этой группе потоков давайте теперь создадим HTTP Sampler :

./1be57ed9c05dea5daf508e42d0e0153a.png

Давайте настроим наш 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 должен выглядеть следующим образом:

./f8af7b7ba5ea4bb32a7be3918d124106.png

3. Запись извлеченного вывода с помощью прослушивателя

Далее, давайте воспользуемся прослушивателем типа Save Responses to a file, чтобы извлечь нужные данные в файл:

./8f6fa64ae60164cb0e6ae050bf483219.png

Использование этого слушателя удобно, но не дает большой гибкости в том, что мы можем извлечь в файл . В нашем случае это создаст файл JSON, который будет сохранен в том месте, где в данный момент запущен JMeter (хотя путь можно настроить в поле « Префикс имени файла» ).

4. Запись извлеченного вывода с использованием постпроцессора

Другой способ извлечения данных в файл — создание BeanShell PostProcessor . BeanShell — это очень гибкий обработчик сценариев, который позволяет нам писать наш сценарий с использованием кода Java, а также использовать некоторые встроенные переменные, предоставляемые JMeter .

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

./32605b8e70f97a4cd187ab1d25ee82e2.png

Теперь добавим следующий скрипт в раздел 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-запроса:

./32d12350566946b4afae68cd704d56a5.png

Этот экстрактор создаст переменную с именем message . Все, что осталось сделать, это сослаться на эту переменную в нашем экстракторе файлов, чтобы вывести ее в наш файл:

buff.write("More complex extraction : " + vars.get("message"));

Примечание. Мы можем использовать этот подход в сочетании с другими постпроцессорами, такими как «Извлечение регулярных выражений», для более точного сбора информации.

5. Вывод

В этом руководстве мы рассмотрели, как извлекать данные из JMeter во внешний файл с помощью постпроцессора BeanShell и прослушивателя записи. Сценарий JMeter и приложение Spring REST, которые мы использовали, можно найти на GitHub.