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

  • 6 месяцев назад
  • читать 2 мин.

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

Согласно исследованию Aberdeen Group, проведенному в 2008 году, 1-секундная задержка во времени загрузки страницы приводит к уменьшению числа просмотров страниц на 1%, снижению удовлетворенности клиентов на 16% и потере конверсий на 7%. В долларовом выражении это означает, что если сайт обычно зарабатывает 100 000 долларов в день, в этом году вы можете потерять 2,5 миллиона долларов в продажах за каждую секунду замедления сайта по сравнению с прошлым годом (или, если уж на то пошло, по сравнению с сайтом вашего конкурента). Низкая производительность веб-сайта влияет на бизнес независимо от типа транзакции или конверсии, которую вы отслеживаете. Сайт розничной торговли, измеряющий покупки в корзине, видит потерю дохода из-за меньшего количества покупок, система бронирования отелей видит снижение количества бронирований, а банк может увидеть меньше платежей по счетам.

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

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

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

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

  • Невыносимо медленная реакция программного продукта на запросы пользователей
  • Неожиданные сбои приложений
  • Ожидаемые (но всё ещё нежелательные) сбои приложений в моменты резкого увеличения нагрузки
  • Уязвимость программного продукта к атакам
  • Проблемы с масштабируемостью продукта в случае, если он станет более популярным
  • И другие

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

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

Стресс-тест

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

Стресс-тестирование позволяет оценить поведение программного продукта при повышенной интенсивности операций и установить максимальный уровень производительности решения. Он правильно выполняется, пока один из критериев не достигнет тестовой остановки. Возможно:

  • Достижение критического уровня использования аппаратных ресурсов (ЦП>80%, память>90%);
  • HTTP-запросы выдают ошибки;
  • Cбой программы.

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

Тест с фиксированной нагрузкой

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

fixed load test

Тест на стабильность

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

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

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

Stability / Reliability Testing

Вообще, видов таких тестов много, они похожи друг на друга и большинство из них преследуют одну и ту же цель. И какие же метрики нужно собирать при тестировании производительности?

  • Время отклика — количество времени, которое требуется системе, чтобы отреагировать на запрос пользователя. Это показатель того, насколько быстро работает система.
  • Емкость — система может выдержать самый высокий уровень нагрузки без значительного увеличения времени отклика или снижения стабильности. Это показатель того, насколько мощна система.
  • Стабильность – свойство системы, которое указывает на ее способность поддерживать свой уровень функционирования.
  • Масштабируемость – свойство системы, указывающее на ее способность легко расширяться. Это означает, что мощность идеально масштабируемой системы должна увеличиваться пропорционально увеличению мощности системных ресурсов.
  • Количество виртуальных пользователей в единицу времени — сколько пользователей может одновременно работать в системе?
  • Количество операций, выполняемых системой за определенный период времени (пропускная способность).
  • Транзакций в секунду (TPS) относится к количеству транзакций, которые сеть способна обрабатывать каждую секунду. Сравнив фактическое время транзакции с ожидаемым (или количеством транзакций в секунду), можно сделать вывод, насколько успешно система прошла нагрузочное тестирование.
  • Процент ошибок рассчитывается как отношение неверных ответов к действительным за определенный период времени.

Выводы

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

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

Автор статьи: Елизавета Буглак, QA. 

 

title

content