Тестирование производительности 101: Поиск и устранение узких мест

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

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

Давайте погрузимся в работу!

Мы рассмотрим:

  • Что такое тестирование производительности?
    • Почему тестирование производительности необходимо?
    • Атрибуты производительной системы
    • Виды тестирования производительности
    • Ключевые показатели производительности (KPIs)
  • Процесс тестирования производительности
    • Шаг 1: Определите среду тестирования
    • Шаг 2: Определите KPIs и цель производительности
    • Шаг 3: Планирование и разработка теста производительности
    • Шаг 4: Настроить среду тестирования
    • Шаг 5: Реализовать свои разработки
    • Шаг 6: Запуск тестов производительности
    • Шаг 7: Проанализируйте результаты, сообщите о них и проведите повторное тестирование.
  • Инструменты автоматизированного тестирования производительности
    • LoadRunner Professional и LoadRunner Cloud
    • WebLOAD
    • Apache JMeter
  • Бонусный раздел: Профилирование
  • Подведение итогов и следующие шаги

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

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

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

“Я говорю, что час, потерянный в узком месте, – это час из всей системы. Я говорю, что час, сэкономленный на не узком месте, ничего не стоит. Узкие места регулируют как пропускную способность, так и запасы”.

Элияху М. Голдратт

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

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

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

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

Атрибуты производительной системы

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

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

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

Упражнение на обдумывание масштабируемости

Сколько конечных пользователей должно быть в вашем приложении на момент выпуска?

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

Ключевые показатели эффективности (KPIs)

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

  • Количество запросов в секунду (RPS): Количество запросов в секунду, которые получает, обрабатывает и отвечает система.
  • Пропускная способность или количество транзакций в секунду (TPS): Скорость транзакций, завершенных системой.
  • Доступность: Количество времени, в течение которого приложение доступно для конечного пользователяИспользование процессора: Количество времени, затрачиваемое процессором на выполнение запроса.
  • Использование памяти: Объем физической памяти, используемой для выполнения запроса.
  • Латентность: Количество времени между запросом пользователя и началом ответа системы.
  • Пропускная способность: количество бит в секунду, проходящих через сетевое соединение за определенное время.
  • Время отклика: Время, необходимое приложению для ответа на запрос пользователя после его поступления.
  • Прерывания процессора в секунду: среднее количество аппаратных прерываний, которые получает процесс.
  • Прочее: Частота ошибок, среднее время загрузки, частные байты, коэффициенты попаданий, занятая память, верхнее ожидание, ошибки страниц, максимальное количество активных сессий.

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

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

Шаг 1: Определите среду тестирования

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

  • Среда тестирования производительности
  • Среда развертывания
  • Доступные инструменты тестирования
  • конфигурации оборудования, программного обеспечения и сети

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

Шаг 2: Определите KPIs и цели производительности

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

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

Вот несколько вопросов, которые следует рассмотреть при определении контрольных показателей KPI:

  • Каковы условия или ограничения данного теста?
  • Что является приемлемым результатом для данного KPI?
  • Что является неприемлемым результатом для этого KPI?
  • Какова цель для этого KPI?

Шаг 3: Планирование и разработка теста производительности

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

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

Шаг 4: Настройка среды тестирования

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

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

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

Шаг 5: Реализация ваших разработок

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

Шаг 6: Запуск тестов производительности

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

Шаг 7: Анализ результатов, отчет о результатах тестирования и повторное тестирование

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

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

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

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

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

LoadRunner Professional и LoadRunner Cloud

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

Ключевые особенности:

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

LoadRunner поддерживает следующие интеграции:

  • Jenkins
  • DynaTrace
  • UFT
  • SiteScope
  • AppDynamics
  • Selenium
  • HP Diagnostics
  • Microsoft Visual Studio

WebLOAD

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

Ключевые особенности:

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

Он также обеспечивает следующие интеграции:

  • Jenkins
  • AppDynamics
  • Selenium
  • DynaTrace
  • Amazon Web Dynamics
  • New Relic
  • Perfecto Mobile

Apache JMeter

JMeter – это популярный инструмент тестирования нагрузки и производительности с открытым исходным кодом. Он поддерживает различные приложения, серверы и протоколы, включая HTTP, TCP, SOAP, Web, LDAP и др. Это один из самых популярных инструментов тестирования производительности, но он менее эффективен при обнаружении угроз в крупномасштабных приложениях, чем в небольших.

Ключевые особенности:

  • Чрезвычайная универсальность
  • Ресурсы динамического и статического тестирования
  • Быстрый и интуитивно понятный графический интерфейс
  • Архитектура плагинов делает его очень расширяемым
  • 100% Java-скрипт
  • Многопоточная структура
  • Бесплатно!

JMeter совместим со следующими интеграциями:

  • Microsoft Visual Studio
  • Maven
  • BlazeMeter
  • DynaTrace
  • Jenkins
  • CloudGen
  • JSUnit
  • Meliora TestLab

Бонус: профилирование

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

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

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

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

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

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

Эрик С. Рэймонд

Просмотрите оригинальную статью в блоге Educative, чтобы попрактиковаться с помощью интерактивного теста, встроенного в статью!

Подведение итогов и следующие шаги

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

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

Счастливого обучения!

Продолжайте изучать тестирование на сайте Educative

  • Тестирование программного обеспечения 101: начните изучать виды тестирования программного обеспечения
  • Учебник по тестированию производительности: Автоматизация, Gatling и Jenkins
  • Все о модульном тестировании: 11 лучших практик и обзор

Начните обсуждение

Что еще вы надеетесь узнать о проектировании систем? Была ли эта статья полезной? Дайте нам знать в комментариях ниже!

Оцените статью
Procodings.ru
Добавить комментарий