Тестирование производительности
Тестирование производительности - это процесс тестирования программного обеспечения, используемый для проверки скорости, времени отклика, стабильности, надежности, масштабируемости и использования ресурсов программного приложения при определенной рабочей нагрузке. Основная цель тестирования производительности - выявить и устранить узкие места производительности в программном приложении. Это подмножество проектирования производительности, также известное как «тестирование производительности».
Основное внимание при тестировании производительности уделяется проверке программного обеспечения.
- Скорость - определяет, будет ли приложение быстро реагировать.
- Масштабируемость - определяет максимальную пользовательскую нагрузку, которую может выдержать программное приложение.
- Стабильность - определяет, стабильно ли приложение при различных нагрузках.
В этом руководстве вы узнаете:
- Что такое тестирование производительности?
- Зачем нужно тестирование производительности?
- Типы тестирования производительности
- Общие проблемы с производительностью
- Процесс тестирования производительности
- Метрики тестирования производительности: отслеживаемые параметры
- Примеры тестов производительности
- Инструменты тестирования производительности
- Часто задаваемые вопросы
Зачем нужно тестирование производительности?
Возможности и функциональность, поддерживаемые программной системой, - это не единственная проблема. Производительность программного приложения, такая как время отклика, надежность, использование ресурсов и масштабируемость, имеет значение. Целью тестирования производительности является не обнаружение ошибок, а устранение узких мест в производительности.
Тестирование производительности проводится для предоставления заинтересованным сторонам информации об их приложении, касающейся скорости, стабильности и масштабируемости. Что еще более важно, тестирование производительности выявляет, что необходимо улучшить, прежде чем продукт выйдет на рынок. Без тестирования производительности программное обеспечение, вероятно, будет страдать от таких проблем, как: медленная работа, когда несколько пользователей используют его одновременно, несоответствия между разными операционными системами и плохое удобство использования.
Тестирование производительности определит, соответствует ли их программное обеспечение требованиям к скорости, масштабируемости и стабильности при ожидаемых рабочих нагрузках. Приложения, отправленные на рынок с низкими показателями производительности из-за отсутствия или плохого тестирования производительности, скорее всего, получат плохую репутацию и не смогут достичь ожидаемых целей продаж.
Кроме того, критически важные приложения, такие как программы космических запусков или спасательное медицинское оборудование, должны быть протестированы на производительность, чтобы гарантировать, что они работают в течение длительного периода без отклонений.
По данным Dunn & Bradstreet, 59% компаний из списка Fortune 500 испытывают примерно 1,6 часа простоя каждую неделю. Учитывая, что средняя компания из списка Fortune 500 с минимум 10 000 сотрудников платит 56 долларов в час, трудозатраты на время простоя для такой организации составят 896 000 долларов в неделю, что составляет более 46 миллионов долларов в год.
Всего лишь 5-минутный простой Google.com (19 августа 13) обойдется поисковому гиганту в 545 000 долларов.
По оценкам, компании потеряли продажи на 1100 долларов в секунду из-за недавнего сбоя Amazon Web Service.
Следовательно, тестирование производительности важно.
Типы тестирования производительности
- Нагрузочное тестирование - проверяет способность приложения работать при ожидаемых пользовательских нагрузках. Цель состоит в том, чтобы выявить узкие места в производительности до того, как программное обеспечение будет запущено.
- Стресс-тестирование - включает тестирование приложения при экстремальных нагрузках, чтобы увидеть, как оно справляется с высоким трафиком или обработкой данных. Цель состоит в том, чтобы определить критический момент приложения.
- Тестирование на выносливость - проводится для того, чтобы убедиться, что программное обеспечение может выдерживать ожидаемую нагрузку в течение длительного периода времени.
- Пиковое тестирование - тестирует реакцию программного обеспечения на внезапные большие скачки нагрузки, создаваемые пользователями.
- Объемное тестирование - Под объемным тестированием большой нет. из. Данные заносятся в базу данных, и отслеживается общее поведение программной системы. Цель состоит в том, чтобы проверить производительность программного приложения при различных объемах базы данных.
- Тестирование масштабируемости . Целью тестирования масштабируемости является определение эффективности программного приложения при «масштабировании» для поддержки увеличения пользовательской нагрузки. Это помогает спланировать добавление емкости к вашей программной системе.
Общие проблемы с производительностью
Большинство проблем с производительностью связаны со скоростью, временем отклика, временем загрузки и плохой масштабируемостью. Скорость часто является одним из самых важных атрибутов приложения. Медленно работающее приложение потеряет потенциальных пользователей. Тестирование производительности проводится, чтобы убедиться, что приложение работает достаточно быстро, чтобы удерживать внимание и интерес пользователя. Взгляните на следующий список распространенных проблем с производительностью и обратите внимание на то, что скорость является общим фактором для многих из них:
- Длительное время загрузки - обычно время загрузки - это начальное время, необходимое приложению для запуска. Обычно это должно быть сведено к минимуму. Хотя некоторые приложения невозможно загрузить менее чем за минуту, время загрузки должно быть меньше нескольких секунд, если это возможно.
- Плохое время отклика. Время отклика - это время, которое проходит с момента ввода пользователем данных в приложение до того, как приложение выдаст ответ на этот ввод. Как правило, это должно быть очень быстро. Опять же, если пользователю приходится ждать слишком долго, он теряет интерес.
- Плохая масштабируемость - программный продукт страдает плохой масштабируемостью, когда он не может обрабатывать ожидаемое количество пользователей или когда он не вмещает достаточно широкий круг пользователей. Необходимо провести нагрузочное тестирование, чтобы убедиться, что приложение может обрабатывать ожидаемое количество пользователей.
- Узкие места - узкие места - это препятствия в системе, которые ухудшают общую производительность системы. Узкое место - это когда либо ошибки кодирования, либо проблемы с оборудованием вызывают снижение пропускной способности при определенных нагрузках. Узкие места часто возникают из-за одного ошибочного раздела кода. Ключ к решению проблемы узких мест - найти раздел кода, который вызывает замедление, и попытаться исправить это там. Узкие места обычно устраняются путем исправления плохо работающих процессов или добавления дополнительного оборудования. Некоторые общие узкие места производительности :
- Загрузка ЦП
- Использование памяти
- Использование сети
- Ограничения операционной системы
- Использование диска
Процесс тестирования производительности
Методология, принятая для тестирования производительности, может широко варьироваться, но цель тестов производительности остается той же. Это может помочь продемонстрировать, что ваша программная система соответствует определенным заранее определенным критериям производительности. Или это может помочь сравнить производительность двух программных систем. Он также может помочь идентифицировать части вашей программной системы, которые ухудшают ее производительность.
Ниже приведен общий процесс проведения тестирования производительности.
- Определите свою среду тестирования - знайте свою физическую среду тестирования, производственную среду и доступные инструменты тестирования. Перед тем, как начать процесс тестирования, изучите детали аппаратного, программного обеспечения и сетевых конфигураций, используемых во время тестирования. Это поможет тестировщикам создавать более эффективные тесты. Это также поможет определить возможные проблемы, с которыми тестировщики могут столкнуться во время процедур тестирования производительности.
- Определите критерии приемлемости производительности - сюда входят цели и ограничения по пропускной способности, времени отклика и распределению ресурсов. Также необходимо определить критерии успеха проекта за пределами этих целей и ограничений. Тестировщики должны иметь право устанавливать критерии и цели производительности, потому что часто спецификации проекта не включают достаточно широкий спектр тестов производительности. Иногда может и вовсе не быть. Если возможно, найти похожее приложение для сравнения - это хороший способ установить цели производительности.
- Планирование и проектирование тестов производительности - определите, как использование может варьироваться среди конечных пользователей, и определите ключевые сценарии для тестирования всех возможных вариантов использования. Необходимо смоделировать различных конечных пользователей, спланировать данные тестирования производительности и наметить, какие метрики будут собраны.
- Настройка тестовой среды - Подготовьте тестовую среду перед выполнением. Также разложите инструменты и другие ресурсы.
- Внедрить дизайн теста - Создайте тесты производительности в соответствии с вашим дизайном теста.
- Запустить тесты - Выполнить и контролировать тесты.
- Анализируйте, настраивайте и повторно тестируйте - объединяйте, анализируйте и делитесь результатами тестирования. Затем выполните точную настройку и снова проверьте, есть ли улучшение или снижение производительности. Поскольку улучшения обычно становятся меньше с каждым повторным тестом, остановитесь, когда узкое место вызвано ЦП. Тогда вы можете рассмотреть вариант увеличения мощности процессора.
Метрики тестирования производительности: отслеживаемые параметры
Основные параметры, отслеживаемые во время тестирования производительности, включают:
- Использование процессора - время, затрачиваемое процессором на выполнение неактивных потоков.
- Использование памяти - объем физической памяти, доступной процессам на компьютере.
- Время диска - время, в течение которого диск занят выполнением запроса на чтение или запись.
- Пропускная способность - показывает количество бит в секунду, используемое сетевым интерфейсом.
- Частные байты - количество байтов, выделенных процессом, которые не могут использоваться другими процессами. Они используются для измерения утечек и использования памяти.
- Выделенная память - объем используемой виртуальной памяти.
- Страниц памяти в секунду - количество страниц, записываемых на диск или считываемых с диска для устранения аппаратных ошибок страниц. Сбои аппаратной страницы - это когда код не из текущего рабочего набора вызывается из другого места и извлекается с диска.
- Ошибок страниц в секунду - общая скорость, с которой страницы ошибок обрабатываются процессором. Это снова происходит, когда процессу требуется код извне его рабочего набора.
- Число прерываний процессора в секунду - это средн. количество аппаратных прерываний, которые процессор принимает и обрабатывает каждую секунду.
- Длина дисковой очереди - средн. нет. запросов на чтение и запись, поставленных в очередь для выбранного диска в течение интервала выборки.
- Длина сетевой выходной очереди - длина очереди выходных пакетов в пакетах. Значение больше двух означает, что необходимо прекратить задержку и возникновение узких мест.
- Всего сетевых байтов в секунду - скорость, с которой байты отправляются и принимаются интерфейсом, включая символы кадрирования.
- Время ответа - время с момента ввода пользователем запроса до получения первого символа ответа.
- Пропускная способность - скорость получения компьютером или сетью запросов в секунду.
- Количество пулов соединений - количество запросов пользователей, которые удовлетворяются объединенными соединениями. Чем больше запросов будет выполнено подключениями в пуле, тем выше будет производительность.
- Максимальное количество активных сессий - максимальное количество сессий, которые могут быть активны одновременно.
- Коэффициенты совпадений - это связано с количеством операторов SQL, которые обрабатываются кэшированными данными вместо дорогостоящих операций ввода-вывода. Это хорошее начало для решения проблем, связанных с узкими местами.
- Хитов в секунду - нет. посещений веб-сервера в течение каждой секунды нагрузочного теста.
- Сегмент отката - объем данных, который можно откатить в любой момент времени.
- Блокировки баз данных - блокировку таблиц и баз данных необходимо отслеживать и тщательно настраивать.
- Верхние ожидания - отслеживаются, чтобы определить, какое время ожидания можно сократить при работе с тем, как быстро данные извлекаются из памяти.
- Количество потоков. Состояние приложения можно измерить по количеству потоков . потоков, которые работают и в настоящее время активны.
- Сборка мусора - это связано с возвратом неиспользуемой памяти обратно в систему. Необходимо отслеживать эффективность сборки мусора.
Примеры тестов производительности
- Убедитесь, что время ответа не более 4 секунд при одновременном доступе к сайту 1000 пользователей.
- Убедитесь, что время отклика приложения под нагрузкой находится в допустимом диапазоне при медленном сетевом подключении.
- Проверьте максимальное количество пользователей, с которыми приложение может справиться, прежде чем оно выйдет из строя.
- Проверить время выполнения базы данных при одновременном чтении / записи 500 записей.
- Проверьте использование ЦП и памяти приложением и сервером базы данных в условиях пиковой нагрузки.
- Проверьте время отклика приложения в условиях низкой, нормальной, средней и высокой нагрузки.
Во время фактического выполнения теста производительности расплывчатые термины, такие как допустимый диапазон, большая нагрузка и т. Д., Заменяются конкретными цифрами. Инженеры по производительности устанавливают эти числа в соответствии с бизнес-требованиями и техническим ландшафтом приложения.
Инструменты тестирования производительности
На рынке доступно множество инструментов для тестирования производительности. Выбор инструмента для тестирования будет зависеть от многих факторов, таких как типы поддерживаемого протокола, стоимость лицензии, требования к оборудованию, поддержка платформы и т. Д. Ниже приводится список широко используемых инструментов тестирования.
- LoadNinja - революционизирует способ нагрузочного тестирования. Этот облачный инструмент нагрузочного тестирования позволяет командам записывать и мгновенно воспроизводить комплексные нагрузочные тесты без сложной динамической корреляции и запускать эти нагрузочные тесты в реальных браузерах в любом масштабе. Команды могут увеличить охват тестированием. & сократить время нагрузочного тестирования более чем на 60%.
- NeoLoad - это платформа тестирования производительности, разработанная для DevOps, которая легко интегрируется в ваш существующий конвейер непрерывной доставки. С NeoLoad команды тестируют в 10 раз быстрее, чем с традиционными инструментами, чтобы соответствовать новому уровню требований на протяжении всего жизненного цикла Agile-разработки программного обеспечения - от компонентов до общесистемных нагрузочных тестов.
- HP LoadRunner - это самый популярный инструмент для тестирования производительности, представленный сегодня на рынке. Этот инструмент способен моделировать сотни тысяч пользователей, подвергая приложения реальной нагрузке, чтобы определить их поведение при ожидаемых нагрузках. В Loadrunner есть виртуальный генератор пользователей, который имитирует действия живых пользователей.
- Jmeter - один из ведущих инструментов, используемых для нагрузочного тестирования веб-серверов и серверов приложений.
Часто задаваемые вопросы
Какие приложения следует тестировать на производительность?
Тестирование производительности всегда выполняется только для систем клиент-сервер. Это означает, что любое приложение, не являющееся клиент-серверной архитектурой, не должно требовать тестирования производительности.
Например, Microsoft Calculator не является клиент-серверным и не запускает несколько пользователей; следовательно, он не подходит для тестирования производительности.
В чем разница между тестированием производительности и проектированием производительности
Важно понимать разницу между тестированием производительности и проектированием производительности. Понимание представлено ниже:
Тестирование производительности - это дисциплина, связанная с тестированием и составлением отчетов о текущей производительности программного приложения при различных параметрах.
Инжиниринг производительности - это процесс, с помощью которого программное обеспечение тестируется и настраивается с целью достижения требуемой производительности. Этот процесс направлен на оптимизацию наиболее важной характеристики производительности приложения, то есть взаимодействия с пользователем.
Исторически сложилось так, что тестирование и настройка были четко отдельными и часто соперничающими областями. Однако за последние несколько лет несколько групп тестировщиков и разработчиков независимо друг от друга объединились для создания групп настройки. Поскольку эти команды добились значительного успеха, концепция сочетания тестирования производительности с настройкой производительности прижилась, и теперь мы называем ее проектированием производительности.
Вывод
В программной инженерии тестирование производительности необходимо перед маркетингом любого программного продукта. Это обеспечивает удовлетворенность клиентов и защищает вложения инвестора от сбоя продукта. Затраты на тестирование производительности обычно более чем компенсируются повышением удовлетворенности, лояльности и удержания клиентов.