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

производительности 101 Изучение

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

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

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

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

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

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

Eliyahu M. Goldratt

 

Зачем нужно тестирование производительности?

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

Читайте также:  Экспорт фреймов данных в несколько листов Excel в R

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

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

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

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

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

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

Мыслительное упражнение по масштабируемости

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

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

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

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

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

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

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

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

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

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

Шаг 2. Определите свои ключевые показатели эффективности и целевые показатели эффективности

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

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

Вот несколько вопросов, которые следует учитывать при определении контрольных показателей 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 — это гибкий инструмент для тестирования производительности, который будет хорошим выбором для малых, средних и крупных предприятий. Он способен имитировать сотни тысяч одновременных пользователей.

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

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

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

  • 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, прежде чем переходить к оптимизации.

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