Найти в Дзене
Мысли CTO [CTO Thoughts]

Составление сценария нагрузочного тестирования

Вернемся к теме нагрузочного тестирования.

Как выглядит со стороны составление сценариев нагрузочного тестирования
Как выглядит со стороны составление сценариев нагрузочного тестирования

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

Сценарий нагрузочного тестирования позволяет сформировать типовой путь пользователя по действиям в проекте. Например, один из путей для интернет-магазина:

  • Выбор товара в каталоге
  • Добавление в корзину
  • Регистрация
  • Переход к оплате

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

Чтобы понять типовые действия пользователя, как правило, можно прибегнуть к следующим способам:

- Использовать интернет-аналитику (Яндекс.Метрика, Google Analytics) и попросить специалистов по аналитике подготовить данные о том, как люди используют проект, в какой последовательности посещают страницы.

- Уточнить у лиц, занимающихся развитием продукта, типовые сценарии использования.

Затем на основе полученных данных формируется список запросов, которые отправляются к API на каждой из страниц. Таким образом создается сценарий обращений к серверу при посещении страниц.

Например, опишем один из сценариев:

Выбор товара в каталоге (страница /catalog/)

  • - /catalog/
  • - /api/profile/
  • - /api/catalog/items/?category=balalaiki&page=1

Добавление товара в корзину (страница /cart/)

  • - /cart/
  • - /api/profile/
  • - /api/cart/add/
  • - /api/cart/list/

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

Access logs

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

Например:

  • Чистим логи от статических обращений (стилей, картинок, JS-скриптов и т. д.).
  • Разделяем логи по IP-адресам.
  • Разделяем по времени или ограничиваем интервалы между запросами, чтобы сформировать группы.
  • Приводим API-запросы к единому формату (например, эндпоинты /api/product/1, /api/product/2 превращаются в /api/product/{ID}).

Затем на основе этого набора данных мы можем получить:

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

И уже из этого набора формируются сценарии для нагрузочного тестирования.

В предыдущем посте использовался Yandex Tank, но он больше подходит для нагрузки на отдельные эндпоинты.

В случае сценарного нагрузочного тестирования, как правило, используют JMeter.

----

🚀 Читайте мои посты раньше всех — подписывайтесь на мой Телеграм канал! 🚀

Мысли CTO [CTO Thoughts]