Самоучитель по тестированию производительности

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

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

Содержание

Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ

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

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

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

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

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

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

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

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

Тестирование на выносливость

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

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

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

Объемное тестирование

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

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

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

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

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

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

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

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

  1. Запустите приложение.
  2. Время ожидания.
  3. Введите правильные учетные данные и нажмите на кнопку “Войти”.
  4. Время ожидания.
  5. Выполните какое-либо действие на главной странице.
  6. Время ожидания.
  7. Нажмите на кнопку “Выход”.

Здесь время ожидания – это время, затрачиваемое пользователем на просмотр веб-страницы после ее загрузки или на заполнение форм (форма входа в систему, форма регистрации пользователя, ввод данных в поля поиска и т. д.). Это время зависит от выполняемого действия. Например, время ожидания при заполнении большой формы может составлять более 10 секунд, тогда как при простом заполнении учетных данных хватит 2-3 секунд.

2. Распределение пользователей

После того как сценарии определены, мы распределяем пользователей по сценариям. Например, при проведении тестирования производительности почтового приложения мы можем распределить пользователей по таким сценариям:

  • “Пользователь читает непрочитанное письмо” – 50% пользователей
  • “Пользователь составляет письмо” – 30% пользователей
  • “Пользователь удаляет письмо” – 18% пользователей
  • “Регистрация пользователей” – 2% пользователей

3. Создание скриптов

Сценарий выполняется с помощью инструментов нагрузочного тестирования, таких как Load Runner, JMeter, Silk Performer и т. д. Эти инструменты имитируют действия, выполняемые пользователями. Мы создаем скрипты и назначаем пользователей в соответствии с их распределением.

4. Пробный запуск

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

5. Запуск теста и анализ результатов

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

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

Как выбрать инструмент для тестирования производительности?

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

  • Тип приложения. Одним из основных моментов, которые необходимо учитывать при выборе инструмента, является тип тестируемого приложения – сайт, веб-сервис (REST/SOAP) или протокол (HTTP, FTP, LDAP, JDBC). Например, для тестирования производительности веб-сервиса SOAP мы можем выбрать такой инструмент, как LoadUI, который специально разработан для нагрузочного тестирования веб-сервисов SOAP.
  • Бюджет проекта. Исходя из бюджета, выделенного на тестирование производительности, мы должны выбрать между различными бесплатными и платными инструментами.
  • Тестирование специфических требований. При выборе инструмента тестирования также учитываются специфические требования. Например, может быть требование выполнения нагрузочного тестирования с 10000 пользователей. Многие доступные инструменты не эффективно поддерживают такую нагрузку. Таким образом, нужно выбрать такой инструмент, который способен эффективно выполнять требования теста производительности.
  • Опыт программирования для создания скриптов. Знание любого языка программирования, как и опыт программирования в целом, также имеют значение при выборе инструмента. Некоторые инструменты работают по принципу записи и воспроизведения, но остальные требуют небольших знаний программирования.

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

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

  • Apache JMeter. JMeter является одним из наиболее популярных инструментов тестирования производительности. Поскольку он является бесплатным и имеет открытый исходный код, его используют в самых разных организациях – от стартапов до крупных предприятий. Единственный недостаток – он немного более сложен в изучении по сравнению с другими инструментами.
  • LoadRunner. Инструмент для тестирования производительности, разработанный компанией Micro Focus. Он платный, но также есть и в бесплатной версии, которая поддерживает до 50 виртуальных пользователей.
  • WebLOAD. Инструмент тестирования производительности от компании RadView. Это опять же платный инструмент, и, как и LoadRunner, он предоставляет бесплатную версию с 50 виртуальными пользователями.
  • LoadNinja. Еще один платный инструмент для тестирования производительности. В отличие от большинства других платных и бесплатных инструментов, он очень прост и быстр, поскольку не требует сложных скриптов, а работает с реальными браузерами в облаке.
  • Locust. Бесплатный инструмент с открытым исходным кодом, требующий написания скриптов на Python. Он поддерживает выполнение тестов производительности на нескольких распределенных машинах.
  • NeoLoad. Платный инструмент для тестирования производительности. Он значительно сокращает время и сложность написания скриптов благодаря функциям перетаскивания, записи и воспроизведения. Кроме того, он также поддерживает сценарии Selenium, что опять же помогает, если вы используете Selenium для автоматизации тестирования.

Перевод статьи «Performance Testing Tutorial».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *