Планируем нагрузочное тестирование

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

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

Какой результат ожидается от нагрузочного тестирования?

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

Что нужно уяснить во время нагрузочного тестирования:

  1. Какой элемент приложения будет “стопорящим” (так называемый bottleneck), когда резко возрастет количество пользователей?
  2. Корректно ли масштабируется приложение под большой нагрузкой?
  3. Корректно ли ведет себя приложение во время тестирования в условиях, имитирующих реальную нагрузку?
  4. Сколько пользователей одновременно может работать с приложением в “пиковых” условиях?
  5. Как время ответа (response time) изменяется в ответ на рост числа пользователей?
  6. Как можно оптимизировать производительность приложения?

Как мы будем тестировать приложение?

В нашем тестовом наборе будет несколько сценариев. Сценарии будут состоять из этапов, каждому из которых соответствует какое-то количество пользователей (в терминологии нагрузочного тестирования — потоков, или виртуальных пользователей, или VUпользователей). Виртуальные VU-пользователи будут направлять трафик в приложение.

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

Будем тестировать приложение в двух условиях нагрузки.

При реалистичной нагрузке

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

При пиковой нагрузке

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

Сбор начальных данных для сценариев

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

Какое максимальное количество одновременных пользователей ожидается?

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

  1. Идем на страницу «Сессии» или «Пользователи» в приложении аналитики посещаемости (той же Google Alalytics, Яндекс.Метрике и т.п.)
  2. Находим самый нагруженный день за последний год.
  3. В этом дне, выделяем 2 самых нагруженных часа.
  4. Из этих цифр посещаемости, вычисляем количество одновременных пользователей, по формуле:

Количество одновременных пользователей = (количество пользователей за 2 часа) * среднее время проведенное на странице, в секундах  / 3600 секунд / 2 часа = ?

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

В нашем случае, у нас было 20 тысяч сессий, а среднее время проведенное на странице составило 2 минуты. В итоге получилось 333 одновременных пользователя.

Всего сессий за 2 часа = 20 000 сессий

Среднее время проведенное на странице = 120 секунд

Одновременных пользователей = 333 пользователя

Какие части веб-приложения нагружаются больше всего?

Это важно знать, чтобы сбалансировать части приложения, базируясь на реалистичных ожиданиях. 

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

Анализ может выглядеть примерно так (сайт магазина):

СтраницаПроцент трафика
/60%
/articles20%
/shop15%
/contact5%

Проверяем пределы выносливости приложения

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

  1. Сколько времени приложению нужно, чтобы обработать запрос?
  2. Какой ответ считается успешным?
Максимальное время ответа30 секунд
Успешный ответ (HTTP-код)HTTP 200, 201, 301, 302, 308

Эти пределы должны быть испытаны в тестовом наборе.

Создание тестовых сценариев

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

В таблице ниже — у нас 3 сценария реалистичной нагрузки, и 3 сценария пиковой нагрузки. При пиковой нагрузке количество одновременных пользователей увеличивается “по ступенькам”, таким образом и оценивается устойчивость приложения.

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

СценарийОдновременное количество пользователейВремя роста нагрузкиДлительность нагрузки
Один пользователь10 минут5 минут
Реалистичные условия #11005 минут20 минут
Реалистичные условия #2 20010 минут30 минут
Реалистичные условия #3 35020 минут60 минут
Пиковые условия #130010 минут30 минут
Пиковые условия #2 40015 минут40 минут
Пиковые условия #3 60020 минут50 минут

Выполнение тестов

После создания плана, и написания скриптов, выполняем тесты.

При этом надо учесть следующее:

  • Запускаться тестовый набор должен на сервере достаточной мощности, способном генерировать пиковую нагрузку на веб-приложение.
  • Наладить мониторинг в реальном времени, чтобы сразу видеть последствия нагрузки; как высокий трафик влияет на веб-приложение и другие части сервера.
  • Тестировать приложение в продакшн-среде, или среде, сопоставимой по мощности.
  • Выполнять нагрузочное тестирование надо с привлечением разработчиков приложения, чтобы они видели как приложение себя ведет при пиковой нагрузке.

Разбор результатов

Все это выглядит примерно так:

нагрузочное тестирование результаты

После тестирования нужно сохранить результаты — в raw-форме, и в виде скриншотов мониторинга, а также ситуации неожиданных сбоев и т.п. Лучше всего сохранять результаты в системе контроля версий (там же сохраняя скрипты выполненного тестирования). Это нужно, чтобы при переносе в другое окружение не пришлось заново писать скрипты и настраивать окружение.

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

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

1 КОММЕНТАРИЙ

Подписаться
Уведомить о
guest

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Иван
Иван
11 месяцев назад

Чудная статья! Дали задачу протестировать нагрузку в IoT PWA-приложении с websocket (mqqt), вот две недели капашусь и наконец-то дошел до этой статьи! Спасибо!

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас