Вернемся к теме нагрузочного тестирования.
Ранее в предыдущем посте мы ознакомились с нагрузочным тестированием и разобрались, как нагружать отдельные эндпоинты. Сейчас давайте попробуем разобраться со сценариями нагрузочного тестирования.
Сценарий нагрузочного тестирования позволяет сформировать типовой путь пользователя по действиям в проекте. Например, один из путей для интернет-магазина:
- Выбор товара в каталоге
- Добавление в корзину
- Регистрация
- Переход к оплате
И таких путей формируется необходимое количество для описания возможных сценариев. Возможно, где-то пользователи просто просматривают случайные товары и не добавляют их в корзину, или просматривают несколько товаров и т. д.
Чтобы понять типовые действия пользователя, как правило, можно прибегнуть к следующим способам:
- Использовать интернет-аналитику (Яндекс.Метрика, 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.
----
🚀 Читайте мои посты раньше всех — подписывайтесь на мой Телеграм канал! 🚀