Привет! В этом посте я хотел бы затронуть проблему нагрузочного тестирования. Одним из лучших доступных инструментов является Apache JMeter. Он бесплатный, с открытым исходным кодом и, благодаря своей природе Java, кроссплатформенный. Хотя у него немного странный интерфейс, поэтому эта статья также служит для быстрого начала работы с JMeter. В этом посте мы рассмотрим, что такое нагрузочное тестирование и чем оно отличается от тестирования производительности; как работает JMeter и как составлять ваши тесты; и, наконец, – мы бы протестировали очень простой сервер, написанный с помощью простого Vert.x.
Что такое нагрузочное тестирование?
Прежде чем мы начнем с нагрузочных тестов, позвольте быстро указать, что такое само нагрузочное тестирование. Во-первых, мы должны помнить, что нагрузочное тестирование – это нефункциональное тестирование : это относится к аспектам программного обеспечения, которые могут не иметь отношения к конкретной функции или действию пользователя. Мы используем нагрузочное тестирование для того, чтобы изучить поведение приложения при определенной нагрузке. Нам нужно различать нагрузочное тестирование и тестирование производительности. Мы используем тестирование производительности для анализа общей производительности приложения при большой нагрузке.
Введение в JMeter
В этом разделе мы бы быстро начали с Apache JMeter. Я предполагаю, что он уже установлен на вашем компьютере. Если у вас его нет, вы можете скачать его на веб-сайте Apache Foundation . Но имейте в виду, что для запуска требуется как минимум Java 8.
Начало работы с JMeter
Для начала давайте просто быстро рассмотрим интерфейс JMeter. Когда вы запустите его, вы увидите аналогичное окно, как на скриншоте ниже:
Я разделил окно JMeter на 3 области:
- Область плана тестирования представляет собой древовидную структуру, в которой вы можете управлять структурой своего теста, добавлять/удалять элементы (см. Далее о них)
- Панель инструментов панель содержит наиболее важные действия, применяемые к тесту – сохранить/открыть сохраненный тест, запустить и т.д.
- Область элементов в этой части вы можете настроить отдельный элемент (группу потоков, элементы и т.д.)
Теперь давайте посмотрим, что предлагает нам JMeter с точки зрения структуры плана тестирования.
Структура плана тестирования
JMeter использует свою собственную терминологию, с которой вы должны быть знакомы. Одним из ключевых понятий здесь является план тестирования . План тестирования представляет собой корневую структуру нагрузочных тестов и представляет, что тестировать и как это делать. Он может включать группы потоков , которые управляют количеством потоков, которые JMeter будет использовать во время теста. Группы потоков включают в себя различные элементы , например пробоотборники (используются для отправки запросов на сервер; например, HTTP или FTP-запросы), логические контроллеры (для определения логических условий; если/для и т.д.), слушатели (используется для визуализации результатов тестов в виде таблиц, графиков, деревьев или простого текста в некоторых файлах журналов). Эти элементы наиболее часто используются, но не только они. Есть и другие, такие как утверждения , элементы конфигурации , таймеры и т.д., Которые вы можете использовать в своих тестах. Также стоит помнить о порядке выполнения элементов плана тестирования:
- Элементы конфигурации
- Предварительные процессоры
- Таймеры
- Пробоотборник
- Постпроцессоры (если только SampleResult не равен нулю)
- Утверждения (если только SampleResult не равен нулю)
- Слушатели (если только SampleResult не равен нулю)
Вы можете найти более подробное описание элементов плана тестирования в этом учебном пособии Tutorialspoint . В свою очередь, я бы не стал тратить ваше время – так что давайте перейдем непосредственно к примеру API.
Пример API
Написание REST API не является темой этого поста, поэтому мы будем использовать очень простой API. Для этого примера мы даже не будем использовать никаких внешних зависимостей – пакета Vert.x Core более чем достаточно. Нам просто нужна фиктивная конечная точка, не более того. Добавьте этот код:
public class DummyService extends AbstractVerticle { private long start; @Override public void start() throws Exception { HttpServer server = vertx.createHttpServer(); start = System.currentTimeMillis(); server.requestHandler(req->{ long stop = System.currentTimeMillis(); long duration = stop - start; req.response().end("Service is running "+duration+" ms"); }); server.listen(8800, "localhost"); } public static void main(String[] args) { Vertx vertx = Vertx.vertx(); vertx.deployVerticle(new DummyService()); } }
Запустите это и войдите в свой браузер, чтобы проверить, все ли в порядке и работает:
Теперь у нас есть фиктивная конечная точка, давайте напишем простой нагрузочный тест с помощью Apache JMeter.
Как выполнить нагрузочное тестирование с помощью JMeter?
В этом разделе мы хотели бы создать простой нагрузочный тест с помощью Apache JMeter. Вам следует выполнить следующие действия:
Шаг 1. Создать новую группу потоков
Чтобы начать нагрузочное тестирование, нам нужно создать новую группу потоков. Щелкните правой кнопкой мыши на План тестирования и выберите Добавить > Потоки (Пользователи) > Группа потоков . Здесь мы можем указать следующие параметры:
- Количество
- наращивание объемов
- Петля
Шаг 2. Настройка конфигурации
Следующий шаг – настроить конфигурацию для нашего нагрузочного теста. Наш фиктивный api работает как localhost:8800 , поэтому мы должны сообщить JMeter, где его найти. Щелкните правой кнопкой мыши на Группа потоков и выберите Добавить > Элемент Конфигурации > Http-Запрос По умолчанию . Здесь мы добавляем:
- Протокол
- Сервер
- Порт
- Путь =/
Шаг 3. Добавить HTTP-запрос
Теперь мы можем добавить пробоотборник – в нашем случае HTTP-запрос. Мы все предопределили на предыдущем шаге, поэтому здесь нечего добавлять. Хотя в более сложных тестах, конечно, вы должны указать это. Пока оставьте все пустым.
Шаг 4. Создайте слушателя
Наконец, добавьте прослушиватель – элемент для отображения результатов. Перейдите и добавьте Добавить > Слушатель > Сводный отчет . Сводный отчет создает строку таблицы для каждого запроса с другим именем в вашем тесте. С помощью этого компонента вы также можете сохранять данные в формате CSV.
Шаг 5. Запустите тест
А теперь вы можете запустить нагрузочный тест ( NB не забудьте сохранить тест). Мы получили таблицу данных, которую мы можем интерпретировать:
- Метка пробоотборника HTTP-запросов
- Примеры виртуальных пользователей по запросу
- Среднее время, затраченное всеми образцами на выполнение определенной метки
- Минимальное минимальное время, затрачиваемое образцом на конкретную этикетку.
- Максимальное время, затрачиваемое образцом на конкретную этикетку
- St.Dev набор исключительных случаев, которые отклонялись от среднего значения времени отклика выборки.
- Процент ошибок неудачных запросов на метку.
- Пропускная способность количество запросов, обрабатываемых сервером в единицу времени (секунды, минуты, часы)
Я рекомендую вам ознакомиться с документацией для сводного отчета или этого поста о понимании сводного отчета .
Вывод
В этом посте мы наблюдали за нагрузочным тестированием веб-приложений Java . Одним из лучших инструментов, доступных для этого, является Apache JMeter. Он бесплатный, с открытым исходным кодом и, благодаря своей природе Java, кроссплатформенный. В этом посте мы проверили, что такое нагрузочное тестирование и чем оно отличается от тестирования производительности; как работает JMeter и как составлять ваши тесты; и, наконец, – мы протестировали очень простой сервер, написанный на простом ядре Vert.x.
Рекомендации
- Бернхард Knasmüller. Как использовать JMeter для тестирования производительности REST API (2019), читайте здесь
- Мутиара Хана. Тестирование производительности с помощью JMeter для чайников (2018), Средний, читайте здесь
- Рагнар Лонн. Когда я должен начать нагрузочное тестирование? , TechBeacon, читайте здесь
- Риши Бхатт. Понять и проанализировать сводный отчет в Jmeter (2017), читайте здесь
Оригинал: “https://dev.to/iuriimednikov/introduction-to-load-testing-with-apache-jmeter-482a”