Найти тему
Работяги

JMeter как универсальное решение. Часть 1 - не ограничивайтесь нагрузкой

Оглавление

Привет, я Никита Ковалевский, специалист группы сопровождения, представляю IT сообщество Работяги. В этом сообществе ты можешь поделиться своими проблемами в разработке и найти интересующие тебя вопросы из сферы IT.

При работе с сервисами(микро-сервисами), порой, возникает необходимость вручную взаимодействовать с API одного или нескольких сервисов. И ладно бы если это взаимодействие оканчивалось на отправке нескольких запросов в сервис, но что делать если необходимо отправить несколько тысяч запросов, в каждом из которых будут отличаться входные параметры? В таких случаях нам на помощь спешит apache jmeter.

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

В данной статье мы рассмотрим взаимодействие с протоколом HTTP и REST-API при помощи JMmeter на основе двух примеров.

Пример 1. Нагрузочное тестирование.

Представим ситуацию: нам необходимо узнать сколько ресурсов системы будет потреблять наш сервис при n вызовах за m времени. И также было бы неплохо узнать выдержит ли наш сервис эти n запросов за m времени).

Будем считать результат удовлетворительным, если наш сервис будет стабильно обрабатывать +- 300 запросов в секунду, и объем потребляемой оперативной памяти не превысит 100 мб.

Для примера я создал небольшое веб-приложение на C#, которое по запросу пользователя рассчитывает числа Фибоначи до указанной границы.

-2

Теперь давайте создадим новый проект в JMeter для проведения нагрузочного тестирования нашего приложения и рассмотрим из чего состоят проекты.

После создания нового пустого проекта, нас сразу же встречает элемент Test Plan. Пока что для нас это наименее важный элемент. Работа с элементом Test Plan будет описана во второй статье данной серии статьей.

-3

Давайте добавим первый вложенный элемент, который будет участвовать в каждом нашем проекте - это Thread Group. Основные настройки, которые интересуют нас в данном элементе это:

1. Действие при получении ошибки – мы можем проигнорировать ошибку и продолжить дальше, остановить поток, в котором была получена ошибка или остановить тест целиком.

2. Количество потоков (для проведения нашего тестирования установим количество потоков равное 10).

3. Количество итераций в тесте (можно выбрать неограниченное количество итераций к в нашем примере для нагрузочного тестирования)

Далее идет элемент HTTP Request, в котором будет указан HTTP запрос. В данном примере мы обращаемся к API нашего приложения

-4

Затем в элементе Constant Timer установим дилей между отправкой запросов к нашему API.

-5

В элементе View results tree мы можем увидеть подробный отчет о всех отправленных запросах. На данном скриншоте виден ответ от нашего приложения со списком чисел Фибоначи:

-6

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

  • количество отправленных запросов
  • среднее время ответа
  • минимальное и максимальное время ответа
  • пропускная способность приложения.
-7

Итак, мы создали наш первый проект в JMeter и успешно провели нагрузочное тестирование нашего сервиса, в ходе которого мы узнали, что при 322 запросах в секунду наш сервис потребляет не более 100 мб ОЗУ.

Поставленная перед нами задача выполнена, результат можем считать удовлетворительным.

Пример 2. Автоматизация и работа с API.

Представим следующую ситуацию:

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

Метод внешнего сервиса по бронированию мест на авиарейсы, к которому нам нужно обратиться, на вход принимает 3 параметра:

  • Имя пользователя
  • Номер рейса
  • Номер места в салоне

На основе этой информации подготовим csv файл следующего вида

-8

Перейдем к созданию проекта в JMeter.

Задача, которая перед нами стоит это формирование тел запросов на основе переменных из csv файла. В решении данной задачи нам поможет элемент CSV Data Set Config, который парсит csv файл на переменные внутри проекта.

-9

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

Allow quoted data, Recycle on EOF, Stop thread on EOF.

Allow quoted data – отвечает за разрешение двойных кавычек в переменных. Данная настройка нужна, например, для ситуаций, когда в переменных нам нужно передать символ разделителя.

Recycle on EOF – при достижении конца csv файла начать читать его заново.

Stop thread on EOF – остановить поток при достижении конца csv файла.

Перейдем к формированию самого запроса.

-10

Чтобы использовать ранее определенные переменные в теле запроса, необходимо прописать конструкцию ${название переменной}. При помощи данной конструкции можно обратиться к переменным практически из всех элементов в проекте.

Также для отправки запроса в сервис нам необходимо в запросе передать хедеры. В этом нам поможет элемент HTTP Header Manager

-11

Поставленная задача практически выполнена, остается только проверить что все работает. Запустим проект и убедимся, что запросы формируются согласно нашим требованиям.

-12
-13

Очередная вымышленная задача выполнена).

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

Ссылки на наши ресурсы – ниже:

https://discord.gg/dWMKzXyG

https://t.me/podcust_rabot9g

https://www.youtube.com/@Rabot9gi

https://vk.com/club224443714