Найти в Дзене

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

Попов Андрей, Middle QA Engineer Auto-test (Утконос онлайн), сегодня расскажет про то, как у них прижился Apache JMeter и какие задачи он помогает решать. Кроме стандартных задач, он справляется и с необычными. Сегодня будет рассказ про то, под что был заточен Apache JMeter, а в следующей — как его можно применить еще. Как-то у нас появилась задача определить, какой клиентский поток выдержит наш продукт: при каком количестве запросов в секунду наши сервера смогут оставаться стабильными. Также нам хотелось наблюдать за производительностью системы и всегда знать, выдержим мы следующую черную пятницу или ажиотаж на Новый Год. Для нагрузочного тестирования вы выбрали Apache JMeter и вовремя поняли, что близки к пику производительности, высокий сезон мы бы не выдержали. JMeter помог нам идентифицировать определенные проблемы, и после оптимизации наши сервера стали дышать легче. Количество пользователей теперь могло увеличиться в 2 раза, но сервера даже имели запас мощности. Так JMeter у на
Оглавление
Попов Андрей, Middle QA Engineer Auto-test (Утконос онлайн), сегодня расскажет про то, как у них прижился Apache JMeter и какие задачи он помогает решать. Кроме стандартных задач, он справляется и с необычными. Сегодня будет рассказ про то, под что был заточен Apache JMeter, а в следующей — как его можно применить еще.

Как-то у нас появилась задача определить, какой клиентский поток выдержит наш продукт: при каком количестве запросов в секунду наши сервера смогут оставаться стабильными. Также нам хотелось наблюдать за производительностью системы и всегда знать, выдержим мы следующую черную пятницу или ажиотаж на Новый Год.

Для нагрузочного тестирования вы выбрали Apache JMeter и вовремя поняли, что близки к пику производительности, высокий сезон мы бы не выдержали. JMeter помог нам идентифицировать определенные проблемы, и после оптимизации наши сервера стали дышать легче. Количество пользователей теперь могло увеличиться в 2 раза, но сервера даже имели запас мощности.

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

Кратко скажу, почему мы выбрали JMeter:

  • JMeter написан на Java, поэтому он кроссплатформенный.
  • У него графический интерфейс, и как одно из следствий — низкий порог вхождения. Писать простые сценарии сможет любой тестировщик, даже не знающий языков.
  • Но при этом JMeter умеет гибко настраивать сценарии. Для нас это был, наверное, один из важнейших пунктов. Мы строим достаточно сложные сценарии, берем постоянно какие-то значения из ответов, обрабатываем всеми возможными способами и, пробрасывая в следующие запросы, прикручиваем еще какую-нибудь логику.
  • Для JMeter есть много плагинов — как официальных, так и кастомных. Вам не нужно писать свои скрипты: скорее всего это уже кто-то реализовал.
  • JMeter давно на рынке. Что означает — большое количество документации, поддержку сообщества и примеры практического использования. На том же YouTube вы найдете множество гайдов, как для опытных пользователей, так и для новичков.
  • Бесплатный. Это очень приятный пункт.

Графический интерфейс JMeter:

-2

На первый взгляд интерфейс староват, но он интуитивно понятен и позволяет начать пользоваться инструментом достаточно быстро.

В левой части располагается тест-план со всеми его элементами. Сценарии создаются добавлением этих элементов в дерево тест-плана. В правой части просто конфигурируем наши элементы.

Стандартные задачи

Тестовый сценарий

JMeter умеет строить правильные сценарии для нагрузки, мы используем системы сбора и аналитику данных (ELK, Appdynamics) и строим профиль, максимально приближенный к реальному, считывая частоту каждого запроса друг относительно друга:

-3

Как видим в левой таблице, метод 1 вызывается 500 раз в минуту, а метод 2 — 100, то, в сценарий(справа) мы добавляем 5 запросов к первому методу и один запрос — ко второму. Точно также поступаем с третьим методом. Запускаем сценарий в несколько потоков. На графике видно, что соотношение частоты вызовов данных методов сохраняется. Таким образом мы достаточно точно имитируем пользовательскую нагрузку.

Иногда нет возможности мониторить какие-то пользовательские запросы. Тогда может помочь расширение для браузера Blazemeter. Используя аналитику клиентского пути, можно выяснить пользовательское поведение на сайте и воспроизвести его вручную:

-4

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

JMeter дашборд

По результатам теста JMeter формирует дашборд в виде HTML:

-5

Можно видеть, что один из API-методов выбивается из общей массы и отвечает дольше остальных. Исследуя причины возникновения таких проблем, мы создаем задачи для оптимизации.

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

На дашборде можно получить всевозможные сводные таблицы по любым запросам, а также — графики по времени ответа, пропускной способности, задержке и количеству запросов. И всё это в разных представлениях.

Помимо всех общих данных, которые мы получаем по результатам нагрузки, обращаем внимание на каждый метод. Прикручивая всевозможные asserts, мы смотрим на время ответа каждого метода, ошибки, и на основании этого делаем выводы о работе конкретных API-методов:

-6

Сравниваем результаты

Сравнивая результаты от релиза к релизу, можно сделать вывод о том, какие методы мы действительно улучшили, а какие стали работать медленней и требуют доработки:

-7

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

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

27-28 июня в Москве впервые пройдет TestDriven Conf 2022 — профессиональная конференция для senior тестировщиков и QA-инженеров. Она будет посвящена всем вопросам автоматизации в тестировании и рядом. Расписание, тезисы докладов и билеты уже на сайте.