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

Применяется к этой рекомендации по повышению эффективности производительности Azure Well-Architected Framework:

PE:06 Тестирование производительности Выполняйте регулярное тестирование в среде, которая соответствует рабочей среде. Сравните результаты с целевыми показателями производительности и производительностью.

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

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

Определения

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

Ключевые стратегии проектирования

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

Подготовка теста

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

Определить условия приемки

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

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

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

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

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

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

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

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

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

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

Выбор типа теста

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

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

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

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

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

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

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

Выбор средств тестирования

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

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

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

Следующие действия помогут вам выбрать соответствующие средства тестирования.

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

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

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

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

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

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

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

Создание тестовых сценариев

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Анализ результатов

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

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

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

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

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

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

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

Определение базовых показателей

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

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

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

  • Определение метрик производительности. Определите конкретные метрики производительности, которые необходимо измерить и отслеживать. Примеры:

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

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

Непрерывное тестирование

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

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

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

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

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

Упрощение azure

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

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

Нагрузочное тестирование Azure — это служба нагрузочного тестирования, которая создает высокомасштабную нагрузку на любое приложение. Нагрузочное тестирование предоставляет возможности для автоматизации нагрузочных тестов и их интеграции в рабочий процесс непрерывной интеграции и непрерывной поставки (CI/CD). Вы можете определить критерии теста, такие как среднее время отклика или пороговые значения ошибок, и автоматически останавливать нагрузочные тесты на основе определенных условий ошибок. Нагрузочное тестирование предоставляет панель мониторинга, которая предоставляет динамические обновления и подробные метрики ресурсов компонентов приложений Azure во время нагрузочного теста. Вы можете проанализировать результаты теста, выявить узкие места производительности и сравнить несколько тестов, чтобы понять снижение производительности с течением времени.

Анализ результатов. Azure Monitor — это комплексное решение для мониторинга для сбора, анализа и реагирования на данные телеметрии из облачных и локальных сред. Application Insights — это расширение Monitor, которое предоставляет функции APM. Application Insights можно использовать для мониторинга приложений во время разработки и тестирования, а также в рабочей среде.

Компромисс: тестирование требует времени и навыков и может повлиять на эффективность работы.

Контрольный список для оптимизации производительности

Ознакомьтесь с полным набором рекомендаций.