Backend
October 11, 2023

Тестирование производительности с Gatling

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

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

Основы сценариев в Gatling

В Gatling мы описываем действия пользователей в специальных сценариях на языке Scala.

Сценарий состоит из нескольких частей:

  • Описание протокола и адреса тестируемого сайта
  • Описание действий пользователей
  • Настройки теста - сколько пользователей, как долго выполнять

Например, простой сценарий может выглядеть так:

  1. Задаем протокол и адрес сайта
  2. Описываем, что пользователь заходит на главную страницу
  3. Задаем 10 пользователей и время теста 1 минута

Или чуть сложнее:

  1. Протокол и адрес
  2. Пользователь заходит на главную страницу
  3. Переходит на страницу товара
  4. Добавляет товар в корзину
  5. Переходит в корзину
  6. Настройки - 50 пользователей, 5 минут теста

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

Работа с Gatling Recorder

Чтобы не писать сценарии вручную, в Gatling есть удобная штука - Recorder. Он записывает наши действия в браузере и генерирует готовый сценарий.

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

Recorder все запишет, а потом сгенерирует сценарий, который мы можем при необходимости отредактировать и дополнить настройками. Очень удобно для быстрого старта!

Добавление сложности в сценарии

Когда сценарий готов, мы можем его усложнить для более реалистичного моделирования.

Например, можно добавить в сценарий разные типы запросов - GET, POST - если в реальном приложении используются разные методы.

Также можно использовать переменные и параметры, чтобы данные в запросах менялись - логины, пароли, id продуктов и т.д. Это позволит более точно симулировать разных реальных пользователей.

В целом есть масса возможностей сделать сценарии максимально реалистичными и сложными.

Мониторинг и анализ результатов

Когда запускаем тест, Gatling в реальном времени показывает кучу полезных данных - сколько пользователей активно, какие запросы выполняются, какое время отклика и многое другое.

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

Все это помогает понять узкие места в приложении и что нужно оптимизировать. Например, если на каком-то запросе очень большое время отклика - значит, с ним есть проблемы. И мы можем это исправить, чтобы приложение работало быстрее.

Оптимизация тестов

Чтобы получить максимум пользы от Gatling, важно правильно настроить и оптимизировать тесты.

Вот несколько советов:

  • Стараться максимально точно симулировать реальных пользователей
  • Не перегружать тесты - лучше запускать по частям
  • Использовать реалистичные настройки кол-ва пользователей и времени
  • Анализировать результаты и находить узкие места
  • Оптимизировать код приложения по результатам тестов

Следуя этим принципам, можно сделать тесты действительно полезными, чтобы приложение стало быстрее и лучше!

Заключение

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