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

Руководство по тестированию производительности: победить задержки, удержать пользователей

🔥 Важное для QA-специалистов! 🔥
В QaRocks ты найдешь туториалы, задачи и полезные книги, которых нет в открытом доступе. Уже более 16.000 подписчиков – будь среди нас! Заходи к нам в телеграм канал QaRocks

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

Содержание:

Что такое тестирование производительности?

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

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

Например:

  • В функциональном тестировании спрашивают: «Работает ли эта кнопка?»
  • А в тестировании производительности вопрос будет другим: «Насколько быстро реагирует кнопка, если на нее одновременно нажмут 1000 пользователей?»

Обычно тестирование производительности оценивает три ключевых аспекта:

  • Скорость: насколько быстро приложение реагирует на действия пользователя?
  • Устойчивость: останется ли приложение надежным при изменяющихся нагрузках?
  • Масштабируемость: насколько хорошо приложение справляется с растущим спросом?

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

Почему важно тестирование производительности?

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

Влияние на бизнес

Низкая производительность раздражает пользователей и обходится дорого. Взгляните на отрезвляющую статистику Testlio:

  • Задержка отклика страницы в 1 секунду может снизить конверсию на 7%
  • Эта же задержка способна уменьшить количество просмотров страниц на 11% и понизить удовлетворенность клиентов на 16%
  • 53% мобильных пользователей закрывают сайты, которые загружаются дольше 3 секунд

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

Пользовательский опыт

Современные пользователи не отличаются терпением. Чего они ждут:

  • Страницы загружаются мгновенно
  • Транзакции обрабатываются моментально
  • Приложения никогда не зависают и не отключаются

Если ожидания не оправдались, то пользователи не просто уйдут, но и поведают миру о своем негативном опыте. Кроме того, 88% пользователей вряд ли вернутся на сайт, получив там негативный опыт.

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

Надежность системы

Проблемы с производительностью часто выявляют скрытые недочеты, которые, возможно, не проявлялись при функциональном тестировании:

  • Утечки памяти, приводящие к постепенной деградации
  • Запросы к базе данных, которые плохо работают при масштабировании
  • Неэффективное использования ресурсов

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

Раннее обнаружение проблем

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

Конкурентное преимущество

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

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

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

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

1. Нагрузочное тестирование

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

Когда использовать:

  • Перед запуском новых функций или приложений
  • Для оценки производительности во время разработки
  • Для проверки производительности системы после обновлений

Пример: Тестирование онлайн-магазина. Проверяется, как во время распродажи и при одновременном доступе 500 пользователей будет работать оформление заказа.

Лучший способ – проверить все метрики и найти аномалии. Что я проверяю в первую очередь:

  1. 90-й и 99-й процентили;
  2. Задержки
  3. Ошибки или другие ответы;
  4. Ресурсы на хосте (ЦП, ОЗУ, диск).

mgasiorowski Опубликовано в Reddit

2. Стресс-тестирование

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

Когда использовать:

  • Подготовка к неожиданным всплескам трафика
  • Выявление узких мест и ограничений по части производительности
  • Тестирование механизмов восстановления и отказоустойчивости

Пример: Протестировать приложение под 200%-ной ожидаемой максимальной нагрузкой. Затем посмотреть, в какой момент система отключится, и каким образом она восстановится.

3. Тестирование на выносливость (soak-тестирование)

Что это: Тестирование на выносливость подвергает систему длительной постоянной нагрузке. Это позволяет выявлять проблемы, которые возникают только с течением времени: утечки памяти, исчерпание ресурсов и т.д.

Когда использовать:

  • Если приложения должны работать непрерывно
  • Чтобы выявить постепенное ухудшение производительности
  • Когда нужно проверить стабильность системы по прошествии времени

Пример: Непрерывная работа банковской системы в течение 24 часов с умеренной нагрузкой. Проверяется быстрота выполнения транзакций и отсутствие постепенного исчерпания ресурсов.

4. Спайк-тестирование

Что это: Спайк-тестирование оценивает реакцию системы на резкое и внезапное увеличение нагрузки.

Когда использовать:

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

Пример: Открывается продажа билетов на концерт, и на платформу бронирования внезапно обрушивается 10 000 запросов.

5. Объемное тестирование

Что это: Объемное тестирование оценивает производительность системы при обработке большого количества данных.

Когда использовать:

  • Для высоконагруженных приложений
  • Когда тестируют производительность базы данных
  • Для систем, которые обрабатывают большие файлы или наборы данных

Пример: Информационно-аналитическая система обрабатывает и анализирует набор данных в 500 ГБ. Тем самым проверяется, что время отклика остается на приемлемом уровне.

6. Тестирование масштабируемости

Что это: Тестирование масштабируемости проверяет, насколько эффективно система увеличивается/уменьшается в масштабе, чтобы соответствовать меняющимся требованиям.

Когда использовать:

  • При планировании роста
  • Чтобы оптимизировать распределение ресурсов
  • Для проверки эластичности облачной инфраструктуры

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

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

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

Распространенные проблемы с производительностью

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

Медленное время отклика

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

Влияние на бизнес: Даже, казалось бы, незначительные задержки приводят к серьезным последствиям. Как уже говорилось выше, если сайт загружается с задержкой в 100 миллисекунд, то это может снизить конверсию на 7%. Кроме того, если сайт загружается дольше 3 секунд, то 40% пользователей уйдут со страницы.

Распространенные причины:

  • Неэффективный код или алгоритмы
  • Неоптимизированные запросы к базе данных
  • Слишком много HTTP-запросов
  • Несжатые ресурсы (изображения, JavaScript, CSS)

Плохая масштабируемость

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

Влияние на бизнес:

  • Нельзя извлечь выгоду из возможностей роста
  • Требуются постоянные инвестиции в инфраструктуру
  • Потеря дохода в периоды высокой посещаемости

Распространенные причины:

  • Ограничения архитектуры
  • Конкуренция за ресурсы
  • Отсутствие кэширования
  • Узкие места в синхронной обработке

Утечки памяти

Как проявляется: Постепенно приложение начинает потреблять все больше памяти, что в итоге приводит к замедлению работы или сбоям.

Влияние на бизнес:

  • Системе требуются частые перезагрузки
  • Непредсказуемые сбои
  • Плохой пользовательский опыт при длительных сеансах

Распространенные причины:

  • Объекты некорректно извлекаются из памяти
  • Циклические ссылки
  • Никогда не очищаются кэшированные данные
  • Некорректное управление ресурсами

Узкие места в базе данных

Как проявляется: С увеличением объема данных/количества одновременных пользователей в базе данных замедляется скорость операций.

Влияние на бизнес:

  • Превышение лимита времени на транзакции
  • Ужасно медленные операции поиска
  • Очень долго генерируются отчеты

Распространенные причины:

  • Отсутствующие/неправильные индексы
  • Неэффективная конструкция запроса
  • Отсутствие кэширования базы данных
  • Ограничения пула соединений

Перегрузка ресурсов

Как это выглядит: ЦП, память, дисковый ввод/вывод или пропускная способность сети достигают своей максимальной мощности, из-за чего вся система начинает тормозить.

Влияние на бизнес:

  • Непредвиденные расходы на инфраструктуру
  • Неспособность справиться с пиковыми нагрузками
  • Снижение производительности всей системы

Распространенные причины:

  • Неэффективное использование ресурсов
  • Неадекватное планирование мощности
  • Ресурсоемкие фоновые процессы
  • Неправильная балансировка нагрузки

Зависимости от сторонних сервисов

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

Влияние на бизнес:

  • Вы не можете напрямую контролировать эти проблемы
  • Каскад отказов по всей системе
  • Потеря критически важного функционала

Распространенные причины:

  • Ограничение скорости API
  • Перебои в работе внешних сервисов
  • Задержки в сети
  • Неправильная обработка тайм-аутов

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

Как проводить тестирование производительности

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

1. Определите тестовую среду

Перед началом тестирования поставьте четкие цели по производительности:

  • Технические характеристики оборудования
  • Конфигурация сети
  • Настройка базы данных
  • Сторонние сервисы и интеграции
  • Версии и конфигурации программного обеспечения

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

2. Определите критерии приемки производительности

Перед началом тестирования поставьте четкие цели по производительности:

  • Ожидания по времени отклика (например, «страницы должны загружаться менее чем за 2 секунды»)
  • Требования к пропускной способности (например, «система должна обрабатывать 500 транзакций в минуту»)
  • Ограничения по использованию ресурсов (например, «загрузка ЦП должна быть ниже 70%»)
  • Пороговые значения по частоте возникновения ошибок (например, «частота ошибок должна быть ниже 1%»)

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

3. Планирование и разработка тестов

Крайне важно тщательно продумать план тестирования. Распишите подробные тестовые сценарии, которые бы отражали поведение реальных пользователей:

  • Определите ключевые пути пользователей
  • Выявите закономерности в пользовательской нагрузке (постоянная, возрастающая или пиковая)
  • Задайте требования к тестовым данным
  • Выберите соответствующие типы тестов (нагрузочные, стресс-тесты, на выносливость и т. д.)
  • Установите продолжительность теста и способ мониторинга

Пропишите все эти пункты в плане тестирования и утвердите у стейкхолдеров. Это делается до начала тестирования.

4. Настройка тестовой среды

Подготовьте среду для тестирования производительности:

  • Настройте инструменты мониторинга для сбора метрик
  • Подготовьте нужные тестовые данные
  • Обеспечьте изолированность среды от внешнего воздействия
  • Проверьте исходную производительность перед добавлением нагрузок
  • Установите и настройте выбранный инструмент тестирования

5. Разработка тестов

Создайте и проверьте тестовые сценарии:

  • Составьте сценарии с действиями пользователя из плана тестирования
  • Заложите время на размышление между действиями – так вы сымитируете реальных пользователей
  • Определите подходящий шаблон нагрузки
  • Добавьте точки проверки для оценки правильного поведения системы
  • Выполните небольшие проверочные тесты и убедитесь в правильности сценариев

JMeter и большинство инструментов для тестирования производительности позволяют записывать действия пользователя и преобразовывать их в повторно используемые тестовые сценарии.

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

Выполняйте тесты производительности по следующему плану:

  • Начните низких нагрузок и постепенно повышайте их до заданных уровней
  • Следите за производительностью системы в режиме реального времени
  • Фиксируйте все наблюдения и аномалии
  • Ведите журналы тестирования – пригодятся в будущем
  • При использовании одной и той же среды обеспечьте достаточный временной интервал между прогонами тестов

7. Анализ, настройка и повторное тестирование

После завершения тестов тщательно проанализируйте результаты:

  • Сравните результаты с критериями приемки
  • Определите узкие места в производительности
  • Проанализируйте закономерности использования ресурсов
  • Поищите корреляции между разными метриками
  • Подготовьте рекомендации по оптимизации

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

Пример плана тестирования производительности

РазделСодержание
Цели тестаЧеткое изложение целей тестирования
Архитектура системыОбзор тестируемых компонентов
Тестовая средаПодробная информация об оборудовании, программном обеспечении и конфигурации сети
Метрики производительностиСписок собираемых и анализируемых показателей
Пользовательские сценарииОписание тестируемых путей пользователей
Профили нагрузкиКакие применяются шаблоны пользовательской нагрузки
График тестированияРасписание тестовых прогонов
Зоны ответственностиЧлены команды и их роли в процессе тестирования
Риски и способы их смягченияВозможные проблемы и способы их решения

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

Метрики тестирования производительности

Чтобы понять поведение системы в разных условиях, нужно отслеживать правильные показатели. Ниже приведены ключевые метрики в тестировании производительности:

Метрики времени отклика

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

  • Веб-приложения должны реагировать меньше, чем за 2 секунды
  • Мобильные приложения должны реагировать меньше, чем за 1 секунду

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

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

Время отклика сервера. Время, за которое сервер обрабатывает запрос перед отправкой данных.

  • Помогает найти, где происходит замедление системы: на стороне сервера или клиента.
  • Цель: менее 100 мс для ответов API

Метрики пропускной способности

Транзакции в секунду (TPS). Количество транзакций, которые система может обработать за секунду.

  • Чем выше значение, тем лучше. Но оно должно сочетаться со временем отклика
  • Как посчитать: общее количество транзакций ÷ общее время тестирования

Запросов в секунду. Количество HTTP-запросов, которые сервер может обработать за секунду.

  • Критически важный показатель для веб-приложений
  • Помогает определить требования к емкости сервера

Метрики использования ресурсов

Загрузка ЦП. Показывает, сколько процентов от мощности процессора используется.

  • В общих случаях должна быть ниже 70–80% под нагрузкой
  • Постоянная высокая загрузка ЦП указывает на узкие места в обработке

Использование памяти. Объем потребляемой физической памяти.

  • Наблюдайте за восходящими потоками, траектория которых не будет выравниваться (возможные утечки памяти)
  • Для Java-приложений отслеживайте динамическую и нединамическую память

Дисковый ввод-вывод. Скорость операций чтения/записи на диск.

  • Высокая активность диска может указывать на неэффективное кэширование/запросы к базе данных
  • Для приложений с высокими требованиями ко вводу/выводу SSD-накопители намного лучше HDD

Использование сети. Полоса пропускания, которая потребляется приложением.

  • Помогает выявлять узкие места в сети
  • Чрезмерно большой сетевой трафик может указывать на неоптимизированные ресурсы

Метрики надежности

Частота ошибок. Процент запросов, которые приводят к ошибкам.

  • Цель: менее 1% при нормальной нагрузке
  • Как посчитать: (Количество ошибок ÷ Общее количество запросов) × 100

Одновременные пользователи. Максимальное количество одновременных пользователей, поддерживаемое системой.

  • Предельно важно для понимания емкости системы
  • Должно превышать максимальное ожидаемое количество одновременных пользователей

Метрики базы данных

Время отклика запроса. Сколько времени уходит на выполнение запроса к базе данных.

  • Медленные запросы – это частая причина узких мест в работе приложений
  • Цель: для популярных запросов – менее 50 мс

Использование пула соединений. Использование пулов соединений с базой данных.

  • Высокая загрузка может указывать на утечки в соединениях или недостаточный размер пула
  • Нужно следить за активными и неиспользуемыми idle-соединениями
Категория метрикиКлючевые показателиОптимальный диапазонТревожные признаки
Время откликаСреднее время отклика<2 сек для веб-приложенийСтабильный рост с течением времени
Пиковое время откликав 3 раза меньше среднегоАномалия – в 5 раз больше среднего
Пропускная способностьТранзакций в секундуЗависит от требованийУменьшение под нагрузкой
Запросов в секундуЗависит от требованийВнезапные падения
РесурсИспользование ЦП50-70%Постоянство >80%
Использование памятиСтабильно выровненоПостоянный рост
Дисковый ввод-выводЗадержка <50 мсДлина очереди >2
НадежностьЧастота ошибок<1%>5% под нагрузкой
Одновременные пользователиПревышает ожидаемый пикУхудшение реакции

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

Примеры тест-кейсов при тестировании производительности

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

Тест-кейс 1: Производительность при загрузке домашней страницы

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

Шаги теста:

  1. Перейти на домашнюю страницу
  2. Измерьте время загрузки страницы
  3. Повторите со 100, 500 и 1000 одновременными пользователями.

Метрики для мониторинга:

  • Время загрузки страницы
  • Время до первого байта (Time to First Byte, TTFB)
  • Время до интерактивности (Time to Interactive, TTI)
  • Время отклика сервера
  • Частота ошибок

Критерии приемки:

  • При 100 пользователях страница загружается <2 секунд
  • При 500 пользователях страница загружается <3 секунд
  • При 1000 пользователях страница загружается <4 секунд
  • Страница загружается менее чем за 3 секунды при 500 пользователях
  • Частота ошибок остается <1%

Тест-кейс 2: Масштабируемость при входе пользователя в систему

Цель: убедиться, что система входа обрабатывает пиковое количество пользовательских запросов на аутентификацию.

Шаги теста:

  1. Выполнить запросы на вход в систему с допустимыми учетными данными
  2. В течение 10 мин постепенно увеличивать количество одновременных входов с 10 до 1000
  3. Поддерживать пиковую нагрузку в течение 5 минут
  4. Измерить время отклика и коэффициент успеха

Метрики для мониторинга:

  • Время отклика при аутентификации
  • Производительность запросов к базе данных
  • Использование ЦП и памяти на серверах аутентификации
  • Скорость создания сеансов

Критерии приемки:

  • При пиковой нагрузке время отклика при входе занимает <1,5 сек
  • Коэффициент успеха >99%
  • За 5-минутный период пиковой нагрузки не отмечается ухудшения производительности

Тест-кейс 3: Процесс оформления онлайн-заказа

Цель: убедиться, что процесс оформления заказа хорошо работает в период распродаж.

Шаги теста:

  1. Добавить товары в корзину
  2. Перейти к оформлению заказа
  3. Заполнить информацию об оплате
  4. Оформить заказ
  5. Сымитировать те же действия при одновременной работе 500 пользователей

Метрики для мониторинга:

  • Время отклика транзакции
  • Скорость обработки транзакций в базе данных
  • Время отклика платежного шлюза
  • Время подтверждения заказа
  • Брошенные корзины (из-за проблем с производительностью)

Критерии приемки:

  • На весь процесс оформления заказа уходит менее 8 секунд
  • Платежи обрабатываются менее, чем за 3 секунды
  • Проблемы с блокировкой базы данных/конкуренцией <0,1%
  • Коэффициент успеха при подтверждении заказов >99,5%

Тест-кейс 4: Производительность функции поиска

Цель: убедиться, что функция поиска реагирует на запросы при большой нагрузке.

Шаги теста:

  1. Опробовать поисковые запросы разной сложности
  2. Добавить редкие, популярные и несуществующие поисковые термины
  3. Сымитировать ситуацию с 200 пользователями, которые бы одновременно выполняли поиск

Метрики для мониторинга:

  • Время отклика поиска
  • Время выполнения запроса к базе данных
  • Время рендеринга результата
  • Точность результата

Критерии приемки:

  • Простые результаты поиска < 1 секунды
  • Сложные результаты поиска < 2 секунд
  • При нагрузке качество поисковых результатов не ухудшается

Тест-кейс 5: Производительность конечной точки API

Цель: убедиться, что конечные точки API соответствуют требованиям к производительности для сторонних интеграций.

Шаги теста:

  1. Выполнить вызовы к ключевым конечным точкам API
  2. Увеличить частоту запросов с 10 до 1000 запросов в секунду
  3. Поддерживать пиковую нагрузку в течение 5 минут

Метрики для мониторинга:

  • Время отклика
  • Пропускная способность (запросов/секунду)
  • Частота ошибок
  • Использование ЦП и памяти

Критерии приемки:

  • Время отклика 95-го процентиля <200 мс
  • Время отклика 99-го процентиля <500 мс
  • Частота ошибок <0,5%
  • Постоянная пропускная способность при пиковой нагрузке

Тест-кейс 6: Производительность для загрузки контента

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

Шаги теста:

  1. Загружайте файлы разных размеров (от 1 МБ до 50 МБ)
  2. Имитация 100 одновременных загрузок
  3. Мониторинг производительности системы во время и после загрузки

Метрики для мониторинга:

  • Скорость загрузки
  • Время обработки файла
  • Производительность ввода-вывода хранилища
  • Использование памяти при обработке файлов

Критерии приемки:

  • На загрузку файла в 10 МБ уходит < 10 секунд
  • Система сохраняет отзывчивость во время загрузок
  • Нет утечек памяти после повторных загрузок

Сценарии выше – это ваша отправная точка в тестировании. Каждый тест производительности нужно адаптировать под свое приложение (или сайт) и его цели. Тесты должны отражать поведение реальных пользователей и охватывать наиболее важные для вашего бизнеса аспекты.

Инструменты для тестирования производительности

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

Apache JMeter

Краткое описание: Бесплатный инструмент нагрузочного тестирования с открытым исходным кодом. Стал отраслевым стандартом для тестирования производительности.

Основные характеристики:

  • Поддерживает многие протоколы (HTTP, HTTPS, JDBC, LDAP, SOAP, REST)
  • Легко расширяется с помощью плагинов
  • Кроссплатформенная совместимость (на основе Java)
  • Мощная поддержка сообщества и обширная документация
  • Создание тестов без сценариев с возможностью записи

Лучше всего подходит для:

  • Команды с ограничениями по бюджету
  • Тестирование веб-приложений и API
  • Проекты, которым нужна кастомизация
  • Интеграция с CI/CD-пайплайнами

Ограничения:

  • Кривая обучения круче, чем в коммерческих инструментах
  • Ресурсоемкость для сверхбольших тестов
  • Ограниченный функционал в готовых отчетах

LoadRunner Professional (Micro Focus)

Краткое описание: Комплексное решение для тестирования производительности корпоративного уровня.

Основные характеристики:

  • Поддержка более 50 протоколов и технологий
  • Расширенная аналитика и отчетность
  • Реалистичное сетевое моделирование
  • Интегрировано с другими инструментами тестирования от Micro Focus
  • Расширенные возможности корреляций для динамических значений

Лучше всего подходит для:

  • Корпоративные приложения
  • Сложные сценарии тестирования
  • Организации с разноплановым стеком технологий
  • Команды, которым нужны возможности для детального анализа

Ограничения:

  • Дорогая модель лицензирования
  • Ресурсоемкая установка
  • Более крутая кривая обучения

Gatling

Краткое описание: Современный инструмент нагрузочного тестирования с акцентом на нужды разработчиков.

Основные характеристики:

  • Подход на основе кода с использованием Scala
  • Отлично подходит для тестирования API и микросервисов
  • Хорошо масштабируемая архитектура
  • Мощные и интерактивные HTML-отчеты
  • Хорошо интегрируется с CI/CD-пайплайнами

Лучше всего подходит для:

  • Подходы к тестированию, которые ориентированы на разработчиков
  • Тестирование API и микросервисов
  • Команды, знакомые с написанием кода
  • Проекты, требующие высокой масштабируемости

Ограничения:

  • Не такой интуитивно понятный для нетехнических пользователей
  • Поддержка протоколов более ограниченная, чем в JMeter

k6 (Grafana k6)

Краткое описание: инструмент нагрузочного тестирования с открытым исходным кодом; ориентирован на разработчиков и под их нужды.

Основные характеристики:

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

Лучше всего подходит для:

  • Тестирование производительности под руководством разработчиков
  • JavaScript/фронтенд-разработчики
  • Современные веб-приложения и API
  • Команды, использующие практики DevOps

Ограничения:

  • Ограниченная поддержка протоколов
  • Не очень подходит для приложений на основе GUI

Работаю инженером по автоматизации производительности. Много лет я пользовался Jmeter, но сейчас перешел на K6. В Jmeter можно сделать все, что угодно. Но все-таки он устарел, базируется на GUI (слишком сложный и многое надо делать вручную), в нем сложно контролировать версии (xml ад) и к тому же потребляет очень много ресурсов. Тем не менее, это рабочий инструмент. В нем есть много полезных встроенных функций

RedSand101 Опубликовано в Reddit

LoadNinja

Кратная информация: Облачная и браузерная платформа для тестирования производительности.

Основные характеристики:

  • Настоящее нагрузочное тестирование в браузере
  • Создание тестов без сценариев
  • Возможности отладки виртуальными пользователями
  • Подробная аналитика с метриками браузерного уровня
  • Возможности тестирования из нескольких географических локаций

Лучше всего подходит для:

  • Веб-приложения со сложными интерфейсами
  • Команды без опыта написания сценариев
  • Быстрая настройка и выполнение
  • SaaS-приложения

Ограничения:

  • Высокая стоимость крупномасштабных тестов
  • Менее гибкие, чем инструменты на основе кода
  • Ограниченная поддержка протоколов за пределами веба

Рекомендации по выбору инструмента

Выбор инструмента для тестирования производительности — непростая задача. При выборе учитывайте следующие факторы:

ФакторКакие задать вопросы
Технология приложенияКакие протоколы используются в приложении? Какие технологии реализованы в приложении?
Навыки командыЧто больше нравится вашей команде: писать код или работать с графическим интерфейсом? С какими языками им комфортно работать?
БюджетКакой у вас бюджет на инструменты тестирования? Для вас предпочтительнее коммерческие решения или инструменты с открытым кодом?
Требования к масштабуСколько виртуальных пользователей вам нужно будет сымитировать? Из каких географических локаций?
Потребности интеграцииС какими другими инструментами (CI/CD, мониторинг) вы должны интегрировать приложение?
Требования к отчетностиКакой вам нужен уровень аналитики и детализации в отчетах?

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

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

Давайте подведем итоги:

  • Производительность важна: даже небольшие задержки могут существенно повлиять на удовлетворенность пользователей и успешность бизнеса. Задержка в одну секунду способна снизить конверсию на 7%, а удовлетворенность клиентов понизится на целых 16%.
  • Разные типы тестирования нужны для разных целей: нагрузочные, стресс-тесты и тесты на выносливость – каждый из них проверяет разные вещи. Пользуйтесь этими тестами и проверяйте, как система ведет себя при нагрузке.
  • Распространенные проблемы с производительностью можно предотвратить: старайтесь пораньше тестировать на медленное время отклика, плохую масштабируемость или перегрузку ресурсов. Проверяйте эти ошибки прежде, чем они отразятся на пользователях.
  • Лучше всего работает структурированный подход: комплексный подход от настройки тестовой среды до анализа результатов поможет охватить все аспекты и получить полезные сведения.
  • Правильные метрики покажут полную картину: мониторинг ключевых метрик (время отклика, пропускная способность, использование ресурсов и надежность) даст вам целостное представление о производительности.

Перевод статьи «Performance Testing Tutorial in 2025: Beat the Lag, Keep the Users».

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

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

Читать в телеграм

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *