Полное руководство по тестированию масштабируемости

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

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

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

Содержание:

Что такое тестирование масштабируемости?

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

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

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

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

Чем отличается тестирование масштабируемости от нагрузочного тестирования?

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

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

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

Какова цель тестирования масштабируемости?

Существует четыре основные цели тестирования масштабируемости:

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

Примеры тестирования масштабируемости

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

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

Преимущества тестирования масштабируемости

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

Улучшенный пользовательский опыт

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

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

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

Выявление и устранение багов на ранней стадии

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

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

Повышение степени удовлетворенности клиентов

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

Возьмем, к примеру, сайт электронной коммерции, зарабатывающий 100 000 долларов в день. Дополнительная секунда времени загрузки страницы будет стоить ему 2,5 миллиона долларов продаж в год. Именно по этой причине проведение тестирования производительности до этапа продакшена является жизненно важным. Данный вид тестирования помогает найти и быстро устранить критические проблемы с производительностью, гарантируя, что конечные клиенты останутся довольны продуктом.

Снижение затрат на инфраструктуру

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

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

Тест-план для тестирования масштабируемости

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

  • Сценарии: Включают в себя подробные шаги воспроизведения, которые помогают пользователям выполнять конкретные действия.
  • Параметризированные тесты (data driven tests): Необходимо понимать, какие поля ввода требуют различные входные данные для выполнения тестов.
  • Данные среды выполнения: Нужно определить данные среды выполнения для взаимодействия с веб-сервером.

Основные атрибуты тестирования масштабируемости

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

  • Производительность, связанная с количеством пользователей
  • Время отклика
  • Использование памяти
  • Пропускная способность
  • Нагрузка на процессор (CPU usage)
  • Производительность, связанная с нагрузкой
  • Использование сети
  • Время загрузки

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

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

Время отклика

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

Использование памяти

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

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

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

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

Пропускная способность

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

Нагрузка на процессор (CPU usage)

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

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

Производительность, связанная с нагрузкой

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

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

Использование сети

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

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

Время загрузки

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

Типы тестирования масштабируемости

Существует два типа тестирования масштабируемости:

  • Восходящее
  • Нисходящее
два типа тестирования масштабируемости

Восходящее тестирование масштабируемости

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

Нисходящее тестирование масштабируемости

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

Вертикальное и горизонтальное масштабирование

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

Вертикальное масштабирование

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

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

  • Высокая вероятность простоя на время обновления компонентного состава.
  • По мере замены компонентов увеличивается сложность системы.
  • Могут возникнуть проблемы совместимости компонентов.

Горизонтальное масштабирование

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

Среди недостатков данного подхода выделяют:

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

Как масштабироваться быстро?

Ответ: использовать облако. Результаты теста на масштабируемость обычно выявляют проблемы с вычислительной мощностью, памятью или пространством. Поэтому логичнее всего размещать свои системы там, где все эти три составляющие доступны в избытке. Готовые облачные решения позволяют снизить общие затраты и ускорить выход на рынок без ущерба для производительности. Вот несколько рекомендуемых облачных провайдеров:

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

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

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

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

Типичные шаги для проведения тестирования системы на масштабируемость следующие:

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

Предварительные условия для тестирования масштабируемости

Стратегия тестирования масштабируемости зависит от тестируемого приложения.

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

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

Преимущества и недостатки тестирования масштабируемости

Подводя итоги следует отметить некоторые преимущества и недостатки данного типа тестирования.

Ниже перечислены 5 преимуществ тестирования масштабируемости:

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

Однако наравне с очевидными преимуществами тестирование производительности имеет определенные недостатки:

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

Итоги

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

Перевод статьи Mohammad Adil «The Ultimate Guide to Scalability Testing».

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

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