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

Материал из devopswiki
Перейти к: навигация, поиск

Тестирование производительности (англ. Performance Testing) — это тестирование, которое проводится для определения скорости работы системы или её части при заданной нагрузке. Часто используется для проверки и подтверждения различных атрибутов качества системы:

  • масштабируемость
  • надёжность
  • потребление ресурсов

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

Общие сведения

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

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

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

База знаний тестировщиков по Тестированию производительности

Расширенные сведения

С дополнительной информацией об этом понятии Вы можете ознакомиться ниже.

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

В тестировании производительности различают следующие направления:

  • Нагрузочное тестирование (англ. load testing) - это простейшая форма тестирования производительности. Нагрузочное тестирование обычно проводится для того, чтобы оценить поведение приложения под заданной ожидаемой нагрузкой. Этой нагрузкой может быть, например, ожидаемое количество одновременно работающих пользователей приложения, совершающих заданное число транзакций за интервал времени. Такой тип тестирования обычно позволяет получить время отклика всех самых важных бизнес-транзакций. В случае наблюдения за базой данных, сервером приложений, сетью и т. д., этот тип тестирования может также идентифицировать некоторые узкие места приложения.
  • Стресс-тестирование (англ. stress testing) обычно используется для понимания пределов пропускной способности приложения. Этот тип тестирования проводится для определения надёжности системы во время экстремальных или диспропорциональных нагрузок и отвечает на вопросы о достаточной производительности системы в случае, если текущая нагрузка сильно превысит ожидаемый максимум.
  • Тестирование стабильности (англ. endurance, soak, stability testing) проводится с целью убедиться в том, что приложение выдерживает ожидаемую нагрузку в течение длительного времени. При проведении этого вида тестирования осуществляется наблюдение за потреблением приложением памяти, чтобы выявить потенциальные утечки. Также важным, но часто незамеченным, фактором является деградация производительности, смысл которого сводится к тому, чтобы скорость обработки информации и/или время ответа приложения через длительное время работы были такими же или лучше, чем в самом начале теста.
  • Конфигурационное тестирование (англ. configuration testing) — ещё один из видов традиционного тестирования производительности. В этом случае вместо того, чтобы тестировать производительность системы с точки зрения подаваемой нагрузки, тестируется эффект влияния на производительность изменений в конфигурации. Хорошим примером такого тестирования могут быть эксперименты с различными методами балансировки нагрузки. Конфигурационное тестирование также может быть совмещено с нагрузочным, стресс или тестированием стабильности.

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

Тестирование производительности служит таким типичным целям:

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

Многие тесты на производительность делаются без попытки осмыслить их реальные цели. Перед началом тестирования всегда должен быть задан бизнес-вопрос: «Какую цель мы преследуем, тестируя производительность?». Ответы на этот вопрос являются частью технико-экономического обоснования (или business case) тестирования. Цели могут различаться в зависимости от технологий, используемых приложением, или его назначения.

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

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

  • Что охватывается тестом производительности? Какие подсистемы, компоненты, интерфейсы и т. д. должны быть протестированы?
  • Если в тест включаются пользовательские интерфейсы, то сколько одновременно работающих в системе пользователей ожидается для каждого интерфейса (необходимо определить пиковые и нормальные значения)
  • Как выглядит аппаратная составляющая тестируемой системы? (Необходимо описать все сервера и сетевое оборудование)
  • Каков сценарий использования каждого компонента системы? (например, 20 % запросов составляет вход в систему, 40 % — поиск, 30 % — выбор элемента, 10 % — выход из системы)
  • Каков сценарий использования системы? [в одном тесте на производительность могут быть задействованы разные сценарии использования каждого компонента]
  • Каковы требования ко времени выполнения серии операций серверной части приложения?