Что такое нагрузочное тестирование?

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

Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.

Содержание

Что такое нагрузочное тестирование?

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

Нагрузочные тесты проводятся практически на всех сайтах и приложениях. Они используются для тестирования:

  • Магазинов электронной коммерции, получающих большое количество заказов
  • Билетных сайтов с крупными объемами продаж билетов
  • Правительственных сайтов, на которых осуществляется взаимодействие с государственными службами
  • Видеоигр с многопользовательским онлайн-режимом
  • Банков, осуществляющих финансовые операции

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

Нагрузочное тестирование характерно не только для программного обеспечения – оно необходимо для многих продуктов. Мебельные компании проводят нагрузочное тестирование столов и стульев, чтобы убедиться, что они способны выдержать большую массу. Аккумуляторы испытываются под нагрузкой, чтобы убедиться, что они способны поддерживать достаточное напряжение. Краны испытываются под нагрузкой, чтобы убедиться в их надежности и безопасности при подъеме огромных масс.

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

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

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

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

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

  • Лояльности клиентов: каждый третий клиент уходит от любимого бренда после одного неудачного опыта.
  • Репутации вашего бренда: 32% ИТ-специалистов утверждают, что репутация их бренда пострадала из-за простоев.
  • Вашей карьеры: 53% ИТ-специалистов утверждают, что в связи с потерей прибыли и клиентов в компании могут начаться массовые сокращения сотрудников.

Нагрузочное тестирование является важным инструментом для подготовки к повышению трафика. Оно поможет вам избежать ошибок, подобных той, которую совершила компания Coinbase, потратившая 10 млн. долларов на рекламу Суперкубка и отправившая клиентов на сайт, который после наплыва большого количества пользователей выглядел вот так:

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

Функциональность — самый важный элемент вашего продукта или услуги: если что-то не работает, то неважно, насколько оно масштабируемо или надежно. Однако после функциональности следует надежность продукта, так как именно она обуславливает то, каким будет пользовательский опыт.

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

Иерархия потребностей пользователей Ааррона Уолтера: в основе пирамиды Функциональность, а далее, к вершине, идут Надежность, Удобство и Удовлетворенность (вершина).

Нагрузочное тестирование для SLA

Нагрузочное тестирование часто необходимо и для выполнения требований соглашений об уровне сервиса (Service Level Agreement, SLA) между поставщиками услуг и клиентами. Если вы гарантируете определенный уровень производительности в SLA, нагрузочное тестирование поможет обеспечить выполнение данных обязательств (или позволит проверить, как их выполняет поставщик услуг).

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

Когда следует проводить нагрузочное тестирование?

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

57% организаций проводят тесты производительности и/или нагрузки во время каждого спринта, а 95% обязуются проводить тестирование ежегодно. Только 5% ИТ-специалистов “никогда” не проводят тесты производительности (в т.ч. нагрузочные).

1. Нагрузочное тестирование перед событиями с высоким трафиком

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

  • Запуск нового продукта или услуги
  • Крупная распродажа, например “Черная пятница”
  • Продажа билетов на популярный концерт или мероприятие
  • Крупное событие на порталах государственных услуг, например, голосование на выборах
  • Крупная маркетинговая кампания или PR-акция

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

2. Нагрузочное тестирование после внесения изменений в систему

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

3. Регулярное нагрузочное тестирование на случай непредвиденных ситуаций

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

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

  • PR-акции или публикации в крупных новых изданиях
  • Знаменитость, прославляющая ваш бренд или носящая вашу продукцию
  • Вирусный пост в социальных сетях или попадание на первую страницу Reddit (так называемое “смертельное объятие Reddit” или “эффект Slashdot“)

Например, когда третий по величине французский онлайн-маркетплейс Rakuten появился в национальных новостях, его посещаемость выросла на 819% всего за 2 минуты.

4. Нагрузочное тестирование на ранней стадии разработки

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

38% ИТ-специалистов утверждают, что время является самым большим препятствием для проведения нагрузочных тестов. Это связано с тем, что нагрузочное тестирование – это не разовый процесс, а итеративный. Первое нагрузочное тестирование может выявить узкое место. Затем, после его устранения, второй нагрузочный тест выявит другое. После его устранения – третий нагрузочный тест и так далее.

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

Заблаговременное начало тестирования важно еще и потому, что многие крупные розничные компании и организации вводят “заморозку” кода перед такими крупными распродажами, как “Черная пятница”. Если начать слишком поздно, то можно не успеть внести изменения, соответствующие результатам тестирования.

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

Тестирование производительности, нагрузочное тестирование и стресс-тестирование

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

Ниже приведено простое разделение тестов производительности, нагрузочных и стресс-тестов.

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

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

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

Проще говоря, функциональные тесты задают вопрос: “Работает ли система?”, а нефункциональные тесты показывают, насколько она быстра и надежна и способна ли к масштабированию.

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

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

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

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

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

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

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

График "Нагрузочные тесты vs. стресс-тесты"

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

  • Готовитесь ли вы к какому-либо событию с предсказуемым уровнем трафика? Тогда проведите нагрузочное тестирование.
  • Вы хотите определить верхние пределы возможностей системы и ее восстанавливаемость? Тогда — стресс-тест.
Резюме. Тестирование производительности - это ряд тестов, которые исследуют скорость и надежность систем. Нагрузочное тестирование является одним из наиболее распространенных тестов производительности, поскольку оно позволяет проверить, как работает система при ожидаемой нагрузке, имитируя реальные условия во время таких событий, как распродажи или маркетинговые кампании. Стресс-тестирование - это более сложный вид тестирования производительности, который позволяет выявить нагрузку, при которой система выходит из строя, и ее способность восстанавливаться после сбоя.

Как проводить нагрузочное тестирование

1. Определить цели и контрольные показатели

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

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

  • Время отклика: сколько времени требуется приложению для ответа на запросы.
  • Использование ресурсов: уровень использования процессора и памяти.
  • Ответы на ошибки: количество запросов, которые выдают коды состояния 5xx, например 500, 503 и т.д.
  • Пропускная способность: количество транзакций в секунду.
  • Рабочая нагрузка: количество одновременных задач или пользователей.

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

  • Сколько одновременных пользователей мы должны иметь возможность обслуживать?
  • Насколько низкой должна быть задержка при таком количестве пользователей?
  • Сколько транзакций в секунду мы должны обрабатывать?
  • Какое количество ошибок (если таковые имеются) допустимо?
  • Какой объем процессора и памяти нам удобно использовать?

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

  1. Выполняем ли мы заказы с нужной скоростью?
  2. Достаточно ли быстро загружаются веб-страницы, чтобы не влиять на качество обслуживания клиентов?

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

Еще один способ упростить оценку нагрузочных тестов – создать эталон доступности. Отраслевым стандартом является “четыре девятки” (то есть доступность системы не может быть ниже 99,99%), но в зависимости от ваших целей этот показатель может составлять от двух (99%) до шести девяток (99,9999%).

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

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

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

Экспоненциальные затраты на масштабирование

График экспоненциального роста затрат с увеличением трафика

Четкое определение целей важно для определения типа тестов производительности:

  • Если вы хотите увидеть, как ваша система масштабируется и восстанавливается при резких колебаниях трафика, вам нужно спайк-тестирование (spike testing).
  • Если вы хотите определить критическую точку сбоя системы, вам нужен стресс-тест.
  • Если вы хотите работать с большим количеством пользователей в течение длительного периода времени, вам нужно тестирование выносливости (soak testing).

2. Понять путь пользователя

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

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

К распространенным узким местам сайта относятся:

  • Платежные шлюзы
  • Блокировки базы данных и запросы (например, входы в систему, обновление баз данных инвентаризации товаров)
  • Создание объектов корзины (процесс добавления товара в корзину или оформления заказа, сервис расчета налогов, автозаполнение адреса)
  • Сторонние поставщики услуг (службы аутентификации, службы по борьбе с мошенничеством)
  • Плагины сайта
  • Транзакции (например, обновление баз данных инвентаризации товаров при обработке заказов и платежей)
  • Динамический контент (например, системы рекомендаций, динамический поиск и фильтры)
  • Использование процессора (CPU usage)

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

Аналогичным образом британский бренд электронной коммерции LeMieux провел нагрузочное тестирование своего сайта в преддверии крупнейшей распродажи “Черная пятница”. Они точно определили, какую нагрузку они могут выдержать, затем создали виртуальную комнату ожидания и установили отток из комнаты ожидания на сайт на этом уровне.

Однако утром в день распродажи сайт стал заметно тормозить. Они поняли, что не провели нагрузочное тестирование функций поиска и фильтрации на сайте, ориентируясь на объем трафика, а не на его поведение.

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

“Мы считали, что предыдущие проблемы были вызваны количеством людей, пользующихся сайтом. Но очень важно понимать, как они взаимодействуют с сайтом и, соответственно, какое количество запросов возвращается на серверы”.
JODIE BRATCHELL, АДМИНИСТРАТОР ЭЛЕКТРОННОЙ КОММЕРЦИИ И ЦИФРОВЫХ ПЛАТФОРМ, LEMIEUX

Потоковый подход к нагрузочному тестированию

При нагрузочном тестировании важно использовать реалистичный, потоковый (flow-based) подход, который позволяет воспроизвести поведение пользователей.

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

Допустим, вы запускаете продукт и ожидаете около 1 000 пользователей. Вы запускаете нагрузочный тест с сотней пользователей в минуту в течение 10 минут и подтверждаете, что ваш сайт прекрасно работает с 1 000 пользователей.

Но что произойдет, если все 1000 пользователей появятся именно в момент запуска продукта?

Работа страницы замедлится, а платежи не будут проходить.

Почему?

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

Делать предположения на основе количества одновременных пользователей или максимальных возможностей системы (overall capacity)  – распространенная ошибка нагрузочного тестирования. Напротив, необходимо ориентироваться на пропускную способность и активность.

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

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

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

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

3. Выбрать инструменты для нагрузочного тестирования

Существует множество инструментов нагрузочного тестирования. Некоторые из них являются инструментами с открытым исходным кодом, которые можно использовать для написания и выполнения тестов (например, Gatling и JMeter). Другие представляют собой SaaS-инструменты, обеспечивающие тестирование в облаке и предоставляющие более широкую поддержку и возможности, но за них приходится платить (например, LoadNinja и BlazeMeter).

Даже если вы используете для написания тестов инструмент с открытым исходным кодом, например JMeter, для проведения нагрузочного тестирования в облаке вам потребуется развернуть тесты на нескольких серверах, выполнять их одновременно, а также визуализировать и хранить результаты тестирования. Это возможно сделать самостоятельно, но гораздо проще использовать SaaS-продукт.

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

  • JMeter. Java-приложение, разработанное специально для нагрузочного тестирования, позволяет тестировать веб-приложения и время отклика. JMeter является одним из самых популярных инструментов нагрузочного тестирования.
  • Gatling. Мощный инструмент, разработанный для непрерывного нагрузочного тестирования. Нагрузочные тесты Gatling пишутся на языке Scala, выполняются из консоли, а результаты генерируются в HTML. Gatling также доступен как SaaS-продукт через Gatling Enterprise.
  • The Grinder. Java-фреймворк для нагрузочного тестирования, позволяющий выполнять распределенное тестирование с использованием множества генераторов нагрузки. Grinder работает на любой системе с Java API.
  • Locust. Инструмент распределенного нагрузочного тестирования на основе языка Python, позволяющий “запустить” систему с миллионами одновременно работающих пользователей. Locust удобен в использовании и обобщает результаты нагрузочных тестов в виде удобных для восприятия отчетов о тестировании.

Топ SaaS-инструментов для нагрузочного тестирования

  • k6 Cloud. SaaS-версия инструмента нагрузочного тестирования k6 с открытым исходным кодом. k6 Cloud позволяет создавать сценарии, записывая действия пользователей в браузере, проводить тестирование из 21 различных географических точек и запускать тесты в облаке с одновременным присутствием до 1 млн. виртуальных пользователей. Это решение ориентировано на разработчиков и предлагает мониторинг производительности и удобный пользовательский интерфейс.
  • LoadNinja. Позволяет проводить нагрузочное тестирование с использованием реальных браузеров. Это приближает тест к воспроизведению реальных ситуаций с высоким трафиком. LoadNinja прост в использовании и позволяет выполнять тесты без сценариев, основываясь на записях браузера. Он также содержит ряд инструментов для анализа результатов.
  • BlazeMeter. Один из немногих сервисов нагрузочного тестирования, созданный специально для Apache JMeter. Он позволяет быстро настраивать тесты, создавать тесты с количеством одновременных пользователей до 1 млн. человек, имитировать мобильное тестирование на реальных устройствах и запускать тесты из нескольких географических точек.
  • LoadRunner. Это сложный инструмент нагрузочного тестирования, позволяющий обнаружить проблемы с производительностью веб-приложений, ERP-программ и унаследованных систем. Он специально разработан для выявления “узких мест” еще на этапе внедрения приложения, позволяя оценить его производительность до запуска в эксплуатацию. Запатентованный механизм автокорреляции позволяет точно определять узкие места на уровне системы, конечного пользователя и кода.

4. Запустить тестирование

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

Шаги нагрузочного тестирования обычно выглядят следующим образом:

  • Создание отдельной тестовой среды, идентичной рабочей среде
  • Выполнение и мониторинг нагрузочного теста
  • Определение операций нагрузочного тестирования для приложения
  • Анализ результатов и определение необходимых изменений
  • Оптимизация производительности и устранение узких мест
  • Повторение нагрузочного тестирования, пока результаты не будут соответствовать поставленным целям
Резюме. Первым шагом при проведении нагрузочного тестирования являются ответы на вопросы "Зачем мы тестируем?" и "Чего мы хотим добиться?". После определения целей и контрольных показателей необходимо понять, как пользователи взаимодействуют с сайтом и каков ожидаемый уровень трафика. Затем необходимо выбрать подходящие инструменты для нагрузочного тестирования. Наконец, можно провести нагрузочное тестирование, оценить результаты и приступить к работе по улучшению производительности.

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

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

  • Исправление некачественного кода
  • Переключение функций, требующих высокой производительности
  • Обращение к сторонним поставщикам услуг для повышения пропускной способности
  • Оптимизация CDN (Content Delivery Network, или сеть доставки контента) или настройка автомасштабирования

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

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

Общие внутренние проблемы при работе с событиями с высоким трафиком

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

Основные внешние проблемы, связанные с обработкой событий с высоким трафиком

  • Узкие места возникают из-за сторонних поставщиков услуг (провайдеры платежей, SaaS-решения, защита от ботов и мошенников), которые не могут увеличить пропускную способность (или могут за непомерно высокую цену).
  • Существуют непредсказуемые проблемы, возникающие во время событий с высоким трафиком (например, атаки ботов или огромные скачки трафика), которые не учитываются при нагрузочном тестировании.
  • События с высокой посещаемостью связаны с ограниченными запасами (например, билеты на концерт или выпуск ограниченной партии товара), что вызывает проблемы с распределением и/или продажей большего количества товаров, чем имеется на складе на самом деле.

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

Оно называется виртуальной комнатой ожидания.

Виртуальная комната ожидания позволяет контролировать то, что не под силу другим методам оптимизации производительности: трафик. При высокой нагрузке сайты или веб-приложения перенаправляют посетителей в виртуальную комнату ожидания с помощью HTTP-переадресации. Затем эти посетители возвращаются на ваш сайт или приложение в порядке живой очереди.

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

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

С помощью виртуальной комнаты ожидания можно контролировать поток трафика с точностью до минуты. Отток трафика из зала ожидания на ваш сайт можно настроить таким образом, чтобы он точно соответствовал нагрузке, которую, согласно результатам нагрузочных тестов, система может выдержать – сто, тысяча или десять тысяч пользователей в минуту. А если в системе возникнут непредвиденные узкие места, вы сможете уменьшить поток трафика “на лету”.

Итоги:

  • Нагрузочное тестирование – это процесс проверки производительности программного обеспечения при заданной нагрузке.
  • Нагрузочное тестирование важно, поскольку оно помогает компаниям и организациям понять, как будет работать их сайт или приложение в реальных сценариях с высокой посещаемостью. Это позволяет оптимизировать производительность и избежать сбоев, ошибок и замедлений.
  • Нагрузочное тестирование следует проводить заблаговременно до начала крупных мероприятий, а также при изменении архитектуры приложения, системных зависимостей и алгоритмов кода. На предприятиях корпоративного уровня нагрузочное тестирование также должно проводиться в рамках регулярного проактивного мониторинга.
  • Нагрузочное тестирование и стресс-тестирование – это разные типы тестов производительности. Если нагрузочное тестирование позволяет определить, как работает сайт или приложение при ожидаемой нагрузке, то стресс-тестирование позволяет довести систему до предела, чтобы определить точку сбоя и возможность восстановления.
  • Процесс нагрузочного тестирования включает в себя:
    • Определение целей и контрольных показателей
    • Понимание пути пользователя
    • Выбор инструментов для нагрузочного тестирования
    • Проведение нагрузочного тестирования
    • Использование результатов для выявления и устранения узких мест
    • Повторение тестирования до тех пор, пока производительность не будет соответствовать поставленным целям.
  • Если нагрузочные тесты не дают результатов и производительность не достигает требуемого уровня, можно использовать виртуальную комнату ожидания, чтобы контролировать поток трафика и предотвратить ошибки, замедления или сбои.

Перевод статьи «Everything you need to know about load testing».

3 комментария к “Что такое нагрузочное тестирование?”

  1. Пингбэк: Тестирование базы данных

  2. Пингбэк: 35 вопросов на собеседовании QA

  3. Пингбэк: Вопросы на собеседовании по тестированию производительности

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

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