Тестирование производительности программного обеспечения - Software performance testing

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

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

Типы тестирования

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

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

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

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

Тестирование на выдержку

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

Спайковое тестирование

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

Тестирование точки останова

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

Тестирование конфигурации

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

Проверка изоляции

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

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

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

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

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

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

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

Параллелизм и пропускная способность

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

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

Время ответа сервера

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

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

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

Технические характеристики

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

Однако тестирование производительности часто не проводится по спецификации; например, никто не будет указывать, каким должно быть максимально приемлемое время ответа для данной группы пользователей. Тестирование производительности часто используется как часть процесса настройки профиля производительности. Идея состоит в том, чтобы определить «самое слабое звено» - неизбежно существует часть системы, которая, если заставить ее реагировать быстрее, приведет к более быстрой работе всей системы. Иногда бывает сложно определить, какая часть системы представляет этот критический путь, и некоторые инструменты тестирования включают (или могут иметь надстройки, которые предоставляют) инструментарий, который работает на сервере (агенты) и сообщает время транзакций, время доступа к базе данных. , служебные данные сети и другие мониторы серверов, которые можно анализировать вместе с необработанной статистикой производительности. Без таких инструментов, возможно, придется кого-то присесть. Диспетчер задач Windows на сервере, чтобы узнать, какую нагрузку на ЦП создают тесты производительности (при условии, что система Windows находится в процессе тестирования).

Тестирование производительности может проводиться через Интернет и даже в разных частях страны, поскольку известно, что время отклика самого Интернета зависит от региона. Это также можно сделать на дому, хотя маршрутизаторы затем потребуется настроить задержку, которая обычно возникает в общедоступных сетях. Нагрузки следует вводить в систему с реалистичных точек. Например, если 50% пользовательской базы системы будет получать доступ к системе через модемное соединение 56K, а другая половина - через Т1, то инжекторы нагрузки (компьютеры, имитирующие реальных пользователей) должны либо вводить нагрузку через одно и то же сочетание соединений (идеальный вариант), либо моделировать сетевую задержку таких соединений, следуя одному и тому же профилю пользователя.

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

Вопросы задать

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

  • В деталях, каков объем тестирования производительности? Какие подсистемы, интерфейсы, компоненты и т. Д. Входят и выходят за рамки этого теста?
  • Для задействованных пользовательских интерфейсов (UI), сколько одновременных пользователей ожидается для каждого (укажите пиковое или номинальное значение)?
  • Как выглядит целевая система (оборудование) (укажите все конфигурации серверов и сетевых устройств)?
  • Какова смесь рабочих нагрузок приложений для каждого компонента системы? (например: вход в систему 20%, поиск 40%, выбор элемента 30%, оформление заказа 10%).
  • Что такое сочетание рабочей нагрузки системы? [Несколько рабочих нагрузок могут быть смоделированы в одном тесте производительности] (например: 30% рабочая нагрузка A, 20% рабочая нагрузка B, 50% рабочая нагрузка C).
  • Каковы требования ко времени для любых / всех фоновых пакетных процессов (укажите пиковые или номинальные значения)?

Предпосылки

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

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

Условия испытаний

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

Слабосвязанные архитектурные реализации (например: SOA ) создали дополнительные сложности с тестированием производительности. Чтобы по-настоящему воспроизвести состояния, похожие на производственные, корпоративные сервисы или активы, которые имеют общие инфраструктура Или платформа требует скоординированного тестирования производительности, когда все потребители создают объемы транзакций, аналогичные производственным, и загружают общие инфраструктуры или платформы. Поскольку эта деятельность является настолько сложной и затратной по деньгам и времени, некоторые организации теперь используют инструменты для мониторинга и моделирования производственных условий (также называемых «шумом») в своих средах тестирования производительности (PTE ) для понимания требований к емкости и ресурсам и проверки / подтверждения атрибутов качества.

Время

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

инструменты

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

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

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

Каждый из инструментов, упомянутых в приведенном выше списке (который не является исчерпывающим и не полным), использует либо язык сценариев (C, Java, JS), либо некоторую форму визуального представления (перетаскивание) для создания и моделирования рабочих процессов конечных пользователей. Большинство инструментов допускают то, что называется «Запись и воспроизведение», когда тестер производительности запускает инструмент тестирования, подключает его к браузеру или толстому клиенту и фиксирует все сетевые транзакции, которые происходят между клиентом и сервером. При этом разрабатывается сценарий, который можно расширять / изменять для эмуляции различных бизнес-сценариев.

Мониторинг производительности

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

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

  • Загрузка ЦП
  • Использование памяти
  • Использование диска
  • Использование сети

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

Технологии

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

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

Аналитическое моделирование производительности - это метод моделирования поведения системы в электронной таблице. Модель снабжена измерениями потребностей транзакций в ресурсах (ЦПУ, дисковый ввод / вывод, LAN, WAN ), взвешенный по совокупности транзакций (бизнес-транзакции в час). Взвешенные потребности транзакций в ресурсах суммируются для получения почасовых потребностей в ресурсах и делятся на почасовую мощность ресурсов для получения нагрузок ресурсов. Используя формулу времени отклика (R = S / (1-U), R = время отклика, S = время обслуживания, U = нагрузка), время отклика может быть рассчитано и откалибровано с результатами тестов производительности. Аналитическое моделирование производительности позволяет оценить варианты дизайна и размер системы на основе фактического или предполагаемого использования в бизнесе. Следовательно, это намного быстрее и дешевле, чем тестирование производительности, хотя и требует глубокого понимания аппаратных платформ.

Задачи, которые нужно предпринять

Задачи для выполнения такого теста будут включать:

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

Методология

Тестирование производительности веб-приложений

Согласно Microsoft Developer Network, методология тестирования производительности состоит из следующих действий:

  1. Определите тестовую среду. Определите физическое тестовая среда производственная среда, а также инструменты и ресурсы, доступные команде тестирования. Физическая среда включает оборудование, программное обеспечение и сетевые конфигурации. Тщательное понимание всей тестовой среды с самого начала позволяет более эффективно дизайн теста а также планирование и помощь в выявлении проблем тестирования на ранней стадии проекта. В некоторых ситуациях этот процесс необходимо периодически пересматривать на протяжении всего проекта. жизненный цикл.
  2. Определите критерии приемки производительности. Определите время отклика, пропускную способность, цели и ограничения использования ресурсов. В общем, время ответа - это проблема пользователя, пропускная способность - это проблема бизнеса, а использование ресурсов - проблема системы. Кроме того, определите критерии успеха проекта, которые могут не соответствовать этим целям и ограничениям; например, использование тестов производительности для оценки того, какая комбинация параметров конфигурации приведет к наиболее желательным характеристикам производительности.
  3. План и дизайн тестов. Определить ключ сценарии, определить вариативность среди репрезентативных пользователей и как моделировать этой изменчивости, определяют тестовые данные и устанавливают показатели, которые необходимо собрать. Объедините эту информацию в одну или несколько моделей использования системы, которые будут реализованы, выполнены и проанализированы.
  4. Настройте тестовую среду. Подготовьте тестовую среду, инструменты и ресурсы, необходимые для реализации каждой стратегии, когда функции и компоненты станут доступны для тестирования. Убедитесь, что среда тестирования оснащена необходимыми инструментами для мониторинга ресурсов.
  5. Реализуйте тестовый дизайн. Разработайте тесты производительности в соответствии с дизайном теста.
  6. Выполните тест. Запускайте и следите за своими тестами. Подтвердите тесты, тестовые данные и сбор результатов. Выполняйте проверенные тесты для анализа, наблюдая за тестированием и тестовой средой.
  7. Анализируйте результаты, настраивайте и повторно тестируйте. Анализируйте, объединяйте и делитесь данными о результатах. Внесите изменения в настройку и повторите тестирование. Сравните результаты обоих тестов. Каждое сделанное улучшение даст меньшее улучшение, чем предыдущее. Когда ты остановишься? Когда вы достигаете узкого места в ЦП, вы можете либо улучшить код, либо добавить больше ЦП.

Смотрите также

внешние ссылки