Тестовая нагрузка. Обзор инструментов нагрузочного тестирования. Инструменты для нагрузочного тестирования

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

Бесплатные инструменты для проведения нагрузочного тестирования.

Наш обзор мы начнём с инструментов, которые предоставляются в открытом доступе.

Apache JMeter, наверное, один из наиболее популярных и часто используемых инструментов нагрузочного тестирования. Изначально JMeter был разработан для тестирования web и FTP приложений. В наше время, он также часто используется для функционального тестирования, тестирования серверов баз данных и т.п. Для JMeter не требуется современная инфраструктура для тестирования нагрузки. Он обеспечивает поддержку нескольких инжекторов нагрузки, управляемых одним контроллером.

Давайте рассмотрим как обычно работает JMeter. На рисунке внизу Вы можете увидеть завершённый рабочий процесс JMeter.

Основные функции и преимущества JMeter.

Цена . JMeter – бесплатный инструмент, и кто угодно может использовать его ресурсы в своей разработке и тестировании.

Независимость платформы. Так как JMeter является 100% Java десктопным приложением, он может быть запущен на многих платформах.

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

Дружественный GUI (графический интерфейс пользователя). На данный момент, он может использоваться в 3 режимах: GUI Mode, Server Mode, и Command Line Mode. Для тесного ознакомления с JMeter требуется совсем немного времени.

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

Многопотоковый фреймворк . JMeter обеспечивает параллельную и одновременную выборку различных функций отдельной группой потоков.

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

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

Поддержка большого количества протоколов. Он поддерживает все основные протоколы – HTTP, SOAP, LDAP, JDBC, JMS, и FTP.

Тестирование скриптов. Jmeter интегрируется с Selenium и Bean Shell для проведения автоматического тестирования.

Опции “Record” и “Playback Record”. Активность пользователя в браузере может быть записана и смоделирована в веб-приложении с помощью JMeter.

Интегрированная поддержка в режиме реального времени. Коллекторы Apache Tomcat позволяют осуществлять мониторинг в режиме реального времени.

Лёгкая интеграция с бесплатными библиотеками . JMeter интегрирован с бесплатными библиотеками Jenkins, Maven и Gradle.

У JMeter имеются также некоторые недостатки:

  • Нет возможности для записи HTTPS-связи.
  • Нет возможности для перехвата трафика AJAX.
  • Ограниченные возможности создания отчётов.

The Grinder ещё один популярный фреймворк для нагрузочного тестирования, написанный на Java. По умолчанию основным языком для написания скриптов в The Grinder является Jython, специальная реализация Java в Python. Тестовые сценарии также могут быть написаны на языке Clojure.

Основные составные части The Grinder:

  • The Grinder Console – это базовая интерактивная среда разработки (IDE), которая используется для создания и редактирования тест наборов. Она осуществляет мониторинг результатов в режиме реального времени, а также контролирует различные агенты The Grinder.
  • The Grinder Agents – специальные бесголовочные генераторы нагрузки. Они могут иметь несколько рабочих элементов (Workers ) для создания.

На рисунку внизу изображена система, находящаяся в процессе нагрузочного тестирования в The Grinder.

Ключевые характеристики The Grinder :

  • The Grinder – кроссплатформенный инструмент. Его можно запускать где угодно, где запускается виртуальную машину Java (Java Virtual Machine).
  • Подержка большого количества протоколов.
  • Быстрая и мощная разработка сценариев
  • Простые графики производительности для всех транзакций в одной вкладке.
  • Пользователь может писать собственные плагины для документированного интерфейса.
  • Гибкая настройка параметров.
  • У пользователя есть возможность загрузки Java API в качестве тест кейса из сервера HTTP, SOAP и REST сервисов.
  • The Grinder обеспечивает большая гибкость при загрузке и выполнении сторонних библиотек.
  • Интеграция с .

Недостатки The Grinder:

  • Случаются сбои памяти в сценариях загрузки больших файлов.
  • Консоль Grinder не может динамически регулировать уровни нагрузки, создаваемой агентами.
  • Отстутсвуюют специальные инструменты дополнительного анализа.
  • Требуются специальные знания языков Jython или Clojure.

Gatling – мощное оружие для проведения нагрузочного тестирования, написанное на языке Scala. Существуют два исполняемых файла в Gatling: один для записи тест кейсов, а другой для их выполнения. Структурно можно выделить четыре части Gatling:

  • HTTP protocol configuration помогает определить базовый URL, с которым вы будете запускать свои тесты. Кроме того, могут быть определены такие параметры: пользовательский агент, языковой заголовок и соединение.
  • Headers definition предоставляет заголовки для отправляемого на сервер запроса.
  • Scenario definition определяет набор действий, выполняемых для имитации взаимодействия пользователя с вашим приложением.
  • Simulation definition предназначен для определения количества пользователей, которые будут одновременно выполнять сценарий загрузки в течение определенного периода времени.

Основные преимущества Gatling:

  • Он работает с любой операционной системой и любым браузером.
  • Gatling поддерживает красочные и информативные графические отчеты, содержащие ценную информацию для анализа.
  • Он может выполнять свои сценарии в разных облаках для тестирования.
  • Gatling легко интегрируется с Jenkins через Jenkins-plugin, а также запускает ваши тесты через Gradle и Maven с помощью плагинов Maven и Gradle.
  • Gatling использует небольшой объем памяти.
  • Он сокращает время отладки тест кейсов.
  • Gatling позволяет легко обнаружить ошибки и недостатки в начале цикла разработки.

Недостатки Gatling:

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

Locust – свободно распространяемый набор тестовых инструментов для нагрузочного тестирования, управляемый кодом на Python. Он часто используется для тестирования веб сайтов (или других систем), показывая, сколько пользователей одновременно может обрабатывать система в условиях нагрузки.

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

Основные преимущества

  • Любая система может быть протестирована с помощью Locust
  • Это кроссплатформенный инструмент с легко расширяющимися возможностями.
  • Код Locust удобен для многократного использования.
  • Высокий уровень кастомизации. Существует возможность объединять несколько запросов в один сценарий, группируя запросы с определенными кастомными параметрами.

Недостатки

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

ApacheBench, наверное, один из самых простых инструментов нагрузочного тестирования. Первоначально она разрабатывалась как программа для тестирования Apache HTTP Server с помощью командной строки. На самом деле, ApacheBench может быть эффективным для тестирования любого веб-сервера.

Если вы пользователь macOS или Linux, ApacheBench уже установлен на вашем компьютере. Если же вашей операционной системой является Windows, просто инсталлируйте Apache и вы увидите ab . exe в папке apache / bin .

Основные преимущества ApacheBench:

  • Он лёгок в использовании и изучении.
  • Не требуется установка никакого дополнительного ПО.
  • ApacheBench – инструмент, который экономит ваше время и деньги.
  • В ApacheBench существует возможность установить общее количество запросов, количество параллельно выполняемых запросов и ограничение по времени для всех запросов.

Недостатки

  • Ограниченное число функций.
  • Отсутствует возможность полноценной и всесторонней оценки производительности приложения.
  • Нет поддержки HTPS протокола.

Siege – специальная утилита для нагрузочного тестирования HTPP и HTPS протоколов. Он также может использоваться в качестве инструмента для тестирования веб-серверов. Siege является GNU/Linux-инструментом, но сейчас он был успешно перенесен в AIX, Solaris, HP-UX и BSD.

Ключевые характеристики Siege:

  • Поддержка HTTP, HTTPS, FTP протоколов, кукис, а также простых проверок подлинности.
  • Он легко компилируется с операционными системами, созданными на базе Unix.
  • Siege – многопотоковый инструмент
  • Существует возможность эмуляции пользователей.
  • Он может запускаться с несколькими IP-адресами с одного компьютера.
  • Поддерживается выполнение простых тестовых сценариев.

Некоторые недостатки Siege:

  • Он не может быть запущен на Windows. Хотя, вы можете решить эту проблему с помощью Cygwin .
  • Siege – ресурсоёмкий инструмент.
  • Он не подходит для серьезных и масштабных испытаний с сотнями тысяч потоков.

Taurus – открытая для использования, мультифункциональная платформа, разработанная BlazeMeter. Taurus расшифровывается как T est Au tomation Ru nning S moothly (Автоматизация тестов запускается гладко). Одной из основных идей создания Taurus, было усиление возможностей таких бесплатных инструментов как JMeter, Selenium, Grinder, и Gatling.

Преимущества

  • У Taurus простая настройка и обновления.
  • YAML или JSON упрощают управление версиями тестовых сценариев
  • Taurus легко совмещается с JMeter, Selenium, Grinder, и Gathling, существенно расширяя их производительность.
  • Отчёты в режиме реального времени доступны во время исполнения тест кейсов.
  • Уже существующие сценарии могут быть повторно использованы в Taurus.
  • Тесная интеграция с BlazeMeter.
  • Простой способ определения гибких критериев прохождения / отказа.
  • Taurus запускается всюду, где можно запустить Python и Java
  • Taurus интегрирован с CI инструментами, такими как Jenkins.

Некоторые недостатки

  • Taurus поглощает много ресурсов.
  • Изменение конфигурации оборудования выходит за пределы его возможностей.
  • Не поддерживаются долговременные тесты на выносливость.

Коммерческие инструменты нагрузочного тестирования, которые имеют бесплатные версии.

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

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

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

WebLOAD распространяется на бесплатной и коммерческой основе. Следует упомянуть, что WebLOAD Free Edition (бесплатная версия) включает в себя почти все характеристики коммерческой версии. Ограничения касаются максимального количества виртуальных пользователей (максимум 50 человек), некоторых исключений из Oracle Forms, Flex/AMF, а также потоковых и мультимедиа характеристик.

То есть, и небольшие команды могут использовать преимущества WebLOAD. Вот некоторые из них:

  • Поддержка основных веб-технологий.
  • У пользователя есть возможность генерировать нагрузку в заданном месте или в облаке.
  • Мастер интерфейса помогает улучшить скрипт.
  • Аналитические панели WebLOAD предоставляют более 80 настраиваемых шаблонов отчетов.
  • Пользователь может автоматически распространять результаты тест кейсов между членами своей команды.
  • WebLOAD легко интегрируется с такими популярными инструментами: Selenium, Jenkins, Perfecto Mobile, New Relic, Dynatrace и т.д.
  • Автоматическое определение потенциально уязвимых мест.
  • Широкий набор средств для мобильного тестирования
  • Комбинация локальной и виртуальной пользовательской нагрузки.
  • Высокоуровневая пользовательская поддержка.
  • Мощный корреляционный механизм.

Недостатки

  • Отсутствует поддержка Citrix.
  • WebLOAD в большей степени сфокусирован на разработчиках, а не на специалистах по QA. Поэтому для его конфигурации требуются специальные технические навыки.
  • Обновление не позволяет использовать предыдущие сценарии.
  • Не поддерживается SAP GUI.

LoadRunner, продукт компании Hewlett Packard Enterprise, один из самых широкого используемых инструментов для проведения нагрузочного тестирования.

Компоненты

  • Virtual User Generator (VuGen ) предназначен для записи тестовых сценариев. Позволяет разрабатывать сценарии поведения виртуальных пользователей (Vuser) для различных типов приложений и протоколов.
  • Controller является основным компонентом для управления имитацией нагрузки.
  • Agents Machines (Load Generators или Load Injectors ) – виртуальные машины, через которые происходит распределение виртуальных пользователей.
  • Analysis and Monitoring обеспечивает детальный анализ результатов исполнения тест кейсов.
  • Books Online полноценная подборка материалов для изучения HP LoadRunner.

Основные этапы процесса тестирования с LoadRuner:

  • Планирование нагрузочного теста
  • Создание скрипта для виртуального пользователя
  • Определение сценария
  • Запуск сценария
  • Анализ результатов

Преимущества LoadRunner:

  • Интерактивное моделирование активности пользователя.
  • Широкий набор инструментов поддержки приложения.
  • Мощный инструментарий для проведения мобильного нагрузочного тестирования.
  • Сокращает системные требования и минимизирует вмешательство человека.
  • LoadRunner предоставляет возможность записи, воспроизведения или создания сценариев.
  • Эффективный инструмент для отслеживания использования.
  • Возможность использования из одного пункта
  • Оптимальное использование генератора нагрузки.
  • LoadRunner быстро и точно определяет основную причину проблем производительности приложений.

Некоторые недостатки

  • Невозможно запустить несколько сценариев из командной строки.
  • Необходима постоянная техническая поддержка во время исполнения тест кейсов.
  • Для установки LoadRunner требуется немало места на жёстком диске.
  • The Controller и VUGen работают только в Windows

BlazeMeter – популярная платформа для проведения нагрузочного тестирования. Предлагается бесплатная, а также различные платные версии. В бесплатной версии можно проводить запуск не более 10 тест кейсов с максимальным количеством не более 50 пользователей для каждого случая. Также в бесплатной версии предлагается только один нагрузочный генератор.

Ключевые характеристики

  • Blazemeter на 100% совместима с Apache JMeter.
  • Легко интегрируется с другими популярными бесплатными инструментами: Selenium, Locust, и Gatling.
  • Возможность запускать тест кейсы с количеством виртуальных пользователей до одного миллиона.
  • Прямой Интернет доступ к Blazemeter.
  • Blazemeter может моделировать трафик с мобильных устройств с различными уровнями сигнала и различными сетями.
  • Масштабируемое тестирование из любого места.
  • Есть возможность загрузки результатов тестирования для использования их офлайн.
  • Поддержка Sandbox тестов для проверки подлинности сценариев для ограниченного числа пользователей в течение ограниченного времени.
  • В Blazemeter имеются высоко кастомизированные и хорошо иллюстрированные отчёты, которые легко распространяются между членами команды.

Недостатки :

  • Отсутствует возможность изменения пользовательской нагрузки во время исполнения тест кейса.
  • Blazemeter нельзя использовать с Flex, Silverlight или Multimedia протоколами.
  • Не поддерживаются тест кейсы на выносливость с временем исполнения более 3 часов.

Rational Performance Tester (RPT) – инструмент тестирования производительности и нагрузки, разработанный IBM Corporation. Его можно использовать для тестирования веб и серверных приложений, где присутствует процесс ввода и вывода. RPT создает демонстрацию исходного процесса взаимодействия между пользователем и веб-службой.

Ключевые характеристики Rational Performance Tester:

  • Поддержка большого количества приложений: HTTP, SAP, Siebel, SIP, TCP Socket и Citrix.
  • Не требуется никаких специальных знаний в программировании.
  • Поддерживает диагностику серверов Websphere и Weblogic приложений.
  • Возможность запуска тест кейсов с огромным количеством пользователей.
  • Генерирует отчёты в режиме реального времени для немедленной идентификации проблемы производительности.
  • Гибкий графический планировщик тестов, в котором нагрузка может быть пропорционально распределена между группами пользователей.
  • Поддержка различных платформ и среды тестирования
  • Широкий набор инструментов для анализа первичных причин возникновения ошибок.

Некоторые недостатки Rational Performance Tester:

  • Отсутствует возможность уменьшение или наращивания ресурсов.
  • Не поддерживает тестирование приложений на Java Applet.
  • Отсутствует возможность планирования.

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

Ключевые характеристики и преимущества NeoLoad:

  • Поддержка самых современных мобильных и веб технологий.
  • Кросcплатформенные возможности NeoLoad позволяют генерировать нагрузку на различных платформах – Unix, Windows, Linux.
  • NeoLoad получает резюме выполнения тест кейса, а затем изучает его детали, используя графики и статистические таблицы. Статистика поступает с ваших серверов, процессора, памяти и т.п.
  • Реалистические тестовые сценарии помогают быстрее выявить проблемы с производительностью.
  • Облачная интеграция, мониторинг в режиме реального времени, интеграция с реальными устройствами поддерживаются не только на Android или iOS, но также на Windows Phone и Blackberry.
  • Эргономичный графический интерфейс, сокращающий время выполнения теста.
  • Существует возможность моделировать поведение виртуального пользователя и устанавливать параметры сценария, такие как политика загрузки (постоянная, нарастающая, максимальная или пользовательская) или число виртуальных пользователей, которые будут смоделированы в тест кейсе.
  • Поддерживает преобразование скриптов Selenium
  • Мониторы производительности (процессор, память, использование диска и т. д.) настроены для ваших серверов.
  • Содержимое страницы проверяется под нагрузкой.
  • Предоставляет возможность записывать любое мобильное приложение непосредственно с любого мобильного устройства с использованием режима прокси или туннеля DNS.
  • Осуществляется запись HTTP траффика между браузером и сервером.

Недостатки

  • Не функционирует в Mac OSX.
  • Нет страницы доступа DOM
  • Нет средств для создания начальных и конечных действий, чтобы фиксировать время отклика.

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

Основные преимущества LoadUI:

  • Большое количество стратегий исполнения тест кейсов.
  • Интерактивный интерфейс.
  • Поддержка API.
  • Параллельное и обособленное исполнение тест кейсов.
  • Фидбек по результам исполнения тест кейсов в режиме реального времени.
  • Возможность добавлять новые данные даже при тестировании приложения.
  • Автоматически обновляемый интерфейс.
  • Функционирует во всех основных операционных системах.
  • Визуальные отчеты LoadUI представлены в графическом формате, очень удобном для понимания.
  • Возможность создавать, настраивать и изменять тест кейсы во время выполнения.

Некоторые недостатки LoadUI:

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

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

CloudTest Lite – бесплатная версия. Конечно, в этой версии есть много ограничений:

  • Отстуствует круглосуточная поддержка
  • Отсутствует глобальная облачная генерация нагрузки.
  • Максимальное количество виртуальных пользователей – 100 человек.
  • Может использоваться только один генератор нагрузки.

Основные преимущества CloudTest:

  • Обеспечивает завершённое тестирование производительности мобильных устройств.
  • Аналитика в режиме реального времени.
  • Тест кейсы быстро создаются, редактируются, выполняются и анализируются.
  • CloudTest легко интегрируется с JMeter и другими часто используемыми инструментами автоматического тестирования.
  • Высокая точность моделирования сетевого и мобильного пользовательского трафика.
  • Полноценные отчёты о поведении пользователей.
  • Возможность добавлять или удалять пользователей во время выполнения тест кейса.

Недостатки CloudTest:

  • Бесплатная версия довольно таки ограничена.
  • SLA конфигурация недоступна в CloudTest.
  • Нет контроля за изменениями возможностей оборудования.
  • Отсутствует возможность использовать CloudTest для приложений Flex, Multimedia или Silver light.

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

Основные преимущества LoadStorm:

  • Не требуется специальная установка.
  • Для записи сценария требуется всего несколько минут.
  • Распространённая по всему миру, облачная платформа для запуска тест кейсов.
  • Хорошо настраиваемые отчёты.
  • Формирование аналитических отчётов в режиме реального времени.
  • Анализ производительности во время использования тест кейсов.
  • Постоянная он-лайн поддержка.
  • Обеспечивает географическое распределение трафика.

Недостатки LoadStorm:

  • С помощью LoadStorm можно тестировать только веб-приложения, доступные из облака Amazon.
  • Обязательно наличие OS Windows для его использования.

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

Также у вас есть 2 генератора нагрузки для тестирования.

Основные преимущества SmartMeter:

  • Отчёты о тестировании формируются автоматически, и содержат всю необходимую информацию о результатах исполнения тест кейсов.
  • Многофункциональный регистратор сценариев тестирования.
  • Возможность проведения нагрузочного тестирования из различных локаций.
  • Легко интегрируется с Jenkins, Bamboo, и Maven.
  • Несколько мониторов отображают результаты выполнения тест кейсов в режиме реального времени.
  • Возможность комбинирования тест кейсов с Selenium.
  • Постоянный мониторинг среды тестирования.

Недостатки SmartMeter:

  • Сложный в изучении инструмент.
  • Максимальное время исполнения тест кейса в бесплатной версии ограничено 15 минутами.

Полностью коммерческие инструменты

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

Silk Performer (ранее известный как Borland) является мощным инструментом для тестирования нагрузки веб-приложений, мобильных и корпоративных приложений.Он помогает выявить уязвимые места приложения под пиковой пользовательской нагрузкой, используя встроенные средства диагностики и трендовые отчеты.

Ключевые характеристики Silk Performer:

  • Поддерживает все основные сетевые среды: HTML5, AJAX, Responsive Web Design, Adobe Flash/Flex, и Microsoft Silverlight.
  • Широкий спектр инструментов тестирования мобильных, нативных и веб-приложений.
  • Для моделирования поведения виртуальных пользователей требуются минимальные технические ресурсы.
  • Он генерирует хорошо настроенные отчеты с таблицами и графиками.
  • Silk Performer имеет удобную корреляцию и параметризацию.
  • Поддержка мониторинга интегрированных серверов.
  • Визуальный анализ первичных причин ошибок помогает выявить уязвимые места.
  • Неограниченная облачная масштабируемость.
  • Возможность тестировать ваши приложения на различных мобильных платформах и стандартах связи: iOS, Android, BlackBerry, GPRS, HSPA+, EDGE, и LTE.

Некоторые ограничения Silk Performer:

  • Недостаточная интеграция с инструментами глубокой диагностики для полноценного мониторинга производительности.
  • Разработан только для Windows.
  • Для тестирования нагрузки с Silk Performer требуется много памяти.
  • Возможны, проблемы с настройкой паттерна замедления.

WAPT – популярный инструмент, который одинаково эффективен для нагрузочного тестирования веб сервисов, мобильных приложений, а также всех типов веб сайтов, от интернет-магазинов до корпоративных ERP и CRM систем.

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

Основные преимущества WAPT:

  • Простая установка.
  • Быстрая запись тест кейсов и дизайн.
  • WAPT поддерживает RIA технологии и тестирование мобильных приложений.
  • Расширенные сообщения об ошибках на основе разных индикаторов: ошибки сетевого уровня, коды ответа HTTP, тайм-ауты, задержки на сервере и проверка ответа по содержимому страницы.
  • Тестирование безопасности сайта.
  • Возможность включать выполнение кода JavaScript в виртуальные профили пользователей.
  • Хорошо иллюстрированные и подробные отчеты доступны даже во время исполнения тест кейсов.
  • Встроенное средство просмра журналов позволяет вам поэтапно просматривать каждую выполненную сессию.

Недостатки WAPT:

Testing Anywhere соредоточена на нагрузочном тестировании веб сайтов, элементов управления и контроля, GUI.

Существует 5 методов создания тест кейса в Testing Anywhere:

  • Веб-запись
  • Запись объектов
  • Распознавание образов
  • Интеллектуальная запись
  • Редактирование

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

  • Не требуется знание программирования для работы с Testing Anywhere.
  • Тест кейсы легко создаются и редактируются.
  • Возможность проведения миграционного тестирования
  • Автоматизация визуальных тестов
  • Автоматическая идентификация языка программирования. Testing Anywhere работает с Java, Net, WPF, Silverlight, HTML, Flash, и Flex.
  • Testing Anywhere предлагает единую платформу для тестирования.

Недостатки Testing Anywhere:

  • Поддерживает только Windows
  • Могут возникнуть проблемы с тестированием iOS приложений.
  • Тестируемая платформа не предоставляется для приложений, написанных на старых языках.

StormRunner Load – это самый новый из инструментов для тестирования нагрузки среди продуктов, предлагаемых Hewlett Packard Enterprise. Его можно использовать как для для мобильного, так и для веб тестирования. StormRunner – сервис, основанный на облачных SaaS технологиях, что делает его простым и доступным в использовании.

Преимущества :

  • Легок и прост в использовании.
  • Поддержка HTTP/HTML (как веб, так и мобильного), SAP Web, Java, Flex, TruClient Web, TruClient Native Mobile и TruClient Mobile Web протоколов.
  • Минималистичный и отзывчивый интерфейс.
  • Высокая масштабируемость. Существует возможность запускать тест кейсы с более чем миллион, географически распределенных, веб-и мобильных пользователей.
  • Возможность добавления/удаления виртуальных пользователей во время исполнения тест кейсов
  • Автоматическое развёртывание инфраструктуры тестирования.
  • Легко интегрируется с Jenkins, Dynatrace, Gatling, Docker, AWS Code Pipeline и New Relic.
  • Возможность моделирование выведения серверов из строя.
  • Предлагает генераторы нагрузки, расположенные в нескольких разных географических точках.
  • Быстрое обнаружение проблемы.
  • Настраиваемый аналитический отчет с помощью Network Virtualization.

Недостатки

  • Нет возможности использовать сетевую аналитику в сценариях JMeter.
  • Отсутствует возможность объёмной нагрузки FTP сервера.
  • Невозможно запланировать запуск тестов на более позднюю дату.
  • Активы, отличные от скриптов, не могут быть присоединены.

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

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

Мы продолжаем рассказывать о компаниях-разработчиках решений (ISV), использующих облачные технологии. В этом выпуске мы расскажем про применение облачных сервисов Visual Studio Team Services, Azure, Application Insights и других для профессионального нагрузочного тестирования коммерческих продуктов на примере AdvantShop – решения для электронной коммерции, разработанном на базе ASP.NET. Предыдущие статьи цикла вы всегда можете найти на Хабре по ссылке #isvcloudstory . - Владимир Юнев

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

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

Специалисты компании "Логрокон" производят тщательную подготовку к тестированию, которая включает:

  1. Анализ требований и сбор информации о тестируемой системе
  2. Определение целей нагрузочного тестирования
  3. Конфигурация тестового стенда для нагрузочного тестирования
  4. Разработка модели нагрузки (Профиль НТ)
  5. Выбор инструмента для нагрузочного тестирования
  6. Разработка методики нагрузочного тестирования.
  7. Создание и отладка тестовых скриптов

Результаты тестирования оформляются в отчете, который содержит:

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

Перед нами была поставлена задача тестирования производительности интернет-магазина AdvantShop . На сегодняшний день рынок ИТ предоставляет большое разнообразие средств для проведения нагрузочного тестирования ПО. И первый вопрос, который необходимо было решить для себя – какому из инструментов проведения нагрузочного тестирования отдать предпочтение?

Вероятно, многие из вас слышали о таком средстве тестирования производительности как Load runner. Наличие большого числа Web-протоколов объясняется желанием разработчиков охватить большой спектр технологий и уровней «захвата» данных. Выбирая этот инструмент для проведения нагрузочного тестирования нужно определиться, что для нас важнее: нетребовательность к ресурсам или удобство создания, поддержки и использования скрипта. Оба критерия для нас важны при проведении нагрузочных испытаний, поэтому продолжим поиск подходящего для нас средства проведения тестирования производительности.

Помимо платных утилит для проведения тестирования производительности рынок предлагает и ряд бесплатных. Под обзор попал такой из бесплатных инструментариев как Apache JMeter. К сожалению, этот инструмент имеет достаточно много проблем и ограничений: он может не поддерживать необходимые протоколы; в нём отсутствуют удобные средства мониторинга; выдаваемые им результаты требуют дополнительной обработки. А поскольку специалисты «Логрокон» отвечают не только за качество услуг, но и за сроки их оказания - такому инструменту как Apache JMeter мы не отдали предпочтение для помощи в проведении работ по тестированию производительности интернет-магазина.

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

Тестирование «у себя» вызывает определенные трудности:

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

Однако с этими проблемами помогает справиться облачная служба Microsoft Azure , при использовании которой можно выделить очевидные преимущества перед тестированием «у себя» и использованием других доступных средств:

  • Быстрый выход качественного продукта на рынок
  • Цена. Отсутствие и устранение капитальных расходов при доступе к тестовому окружению в облаке, которое масштабируется лучше, чем собственное.
  • Использование знакомых инструментов
  • Лучшее тестирование с “бесконечным” облаком
  • Изолирование продакшн-серверов . Предотвращение влияния процесса разработки и тестирования и тестовых приложений на серверы работающие в коммерческой эксплуатации в компании
  • Доступ из облака к существующим мощностям в компании
  • Размещение в любом месте без лок-ина

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

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

Безусловным преимуществом для выбора Microsoft Azure при тестировании производительности интернет-магазина AdvantShop является тот факт, что сервер приложений и сервер БД развернуты в Azure - это существенно упрощает развертывание инфраструктуры нагрузочного тестирования.

Средства Microsoft Azure позволяют выполнять нагрузочное тестирование с помощью Visual Studio Team Services (ранее сервис назывался Visual Studio Online), либо с помощью Virtual Machine.

Нагрузочное тестирование с помощью Visual Studio Team Services (VSTS) позволяет автоматически создавать и конфигурировать всю необходимую инфраструктуру в облаке, разворачивая контроллер и необходимое количество агентов с определенными настройками. Результаты прогона того или иного теста всегда остаются в облачной базе VSTS, и к ним в любой момент можно получить доступ. Помимо доступного развертывания инфраструктуры нагрузочного тестирования стоит обратить внимание на мониторинг приложений, поскольку при проведении нагрузочных испытаний тестировщик обращается к нему снова и снова. VSTS позволяет прямо в процессе нагрузочного тестирования динамически подгружать необходимые счетчики производительности из телеметрии Application Insights . Возможности Application Insights выходят далеко за рамки снятия метрик, настроенных в Performance Monitor непосредственно на серверах приложения. Имея доступ непосредственно к коду приложения, можно передавать в Application Insights данные об отслеживании событий, метрик, трассировки, зависимостей и тому подобное. Посредством такого подхода можно вычислить, к примеру, как часто пользователи выбирают определенный компонент, как часто они достигают определенной цели или как часто возникают те или иные ошибки.

И все-таки при выборе между VSTS и развертыванием Virtual Machine мы отдали предпочтение более знакомой нам классической инфраструктуре с агентами и контроллером, хотя средства VSTS ничем не уступают. При этом подходе помимо имеющихся серверов IIS и DB необходимо создать виртуальные машины для контроллера и агентов тестирования. На отдельную виртуальную машину имеет смысл вынести Visual Studio, поскольку при использовании VS локально можем столкнуться с проблемой нехватки ресурсов для обеспечения необходимой нагрузки на приложение.

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

При развертывании VM для контроллера

  • TCP порт 445 для удаленного сборка счетчиков производительности
  • UDP порт 1434 для SQL Browser и TCP 1433 для подключения к SQL серверу
  • TCP порт для подключения к Test Controller`y 6901
  • Remote Destop.

После настройки VM подключаемся к ней через RDP и устанавливаем TestController. Затем запускаем Test Controller Configuration Tools и указываем аккаунт, с которым подключались к виртуальной машине, отмечаем галочку Configure test controller for load testing. В строке SQL Server instance указываем полное DNS-имя VM (не localhost, а, к примеру, adv5controller.cloudapp.net\SQLExpress чтобы была возможность сохранять результаты теста при запуске VS с другой VM).

Загружаем и устанавливаем дистрибутив SQL Server Express по ссылке на UI.

Запускаем SQL Server Configuration Manager и включаем Pipe и TCP/IP протоколы. В настройках TCP/IP включаем все доступные IP адреса Enabled и для IPAll устанавливаем статический порт 1433.

В настройках Firewall`a разрешаем подключения на следующие порты:

  • исходящие подключения на агент (порт 6910)
  • входящие подключения к службе контроллера 6901
  • входящие подключения к службе RPC для сбора счетчиков производительности – порт 445
  • подключения к студии (фреймворку LoadTest), исходящий порт 6915
  • входящие подключения на TCP порт 1433 и UDP 1434

Возвращаемся в Test Controller Configuration Tools и нажмаем Apply settings. Начнется процесс конфигурирования контроллера тестирования. В последнем сообщении будет warning, на который не стоит обращать внимания.

При развертывании VM для агента в настройках открываем следующие порты:

  • TCP порт 445 для удаленного сбора счетчиков производительности
  • TCP порт для подключения к Test Agent`y 6910
  • Remote Desktop

После настройки VM подключаемся к ней через RDP и устанавливаем TestAgent.

В настройках Firewall`a следует разрешить подключения на следующие порты:

  • Входящие подключения к службе контроллера 6910
  • Исходящие подключения к контроллеру тестирования 6901
  • Входящие подключения к службе RPC для сбора счетчиков производительности – порт 445

Запускаем Test Agent Configuration Tools, в настройках указываем свой аккаунт и прописываем строку подключения к контроллеру. После нажатия Apply Settings запустится процесс конфигурирования агента тестирования.

После успешного его завершения отобразится окно статуса подключения агента

Перейдем к настройке виртуальной машины с Visual Studio .

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

После настройки VM подключаемся к ней по RDP и в настройках Firewall’a прописываем следующие подключения:

  • Открываем порт 6915 для входящих соединений
  • Открываем порт 6901 для исходящих на контроллер
  • Исходящие порты UDP 1434 и TCP 1433 для подключения к базе SQL
  • Исходящий 445 для подключения к RPC

Создаем новое решение Web performance And Load Test Project. Добавляем в него UnitTestProject1. В SolutionItems добавляем новый файл типа TestSettings и открываем его. На вкладке Roles устанавливаем RemoteExecution и прописываем вручную DNS имя виртуальной машины контроллера.

В меню Load Test выбераем вкладку Manage Test Controller и проверяем, что студия может подключиться к контроллеру:

Затем создаем новый Load Test, на вкладке Counter Sets добавляем для снятия метрик машину, на которой установлено тестируемое приложение и выбираем хотя бы один из доступных по умолчанию наборов счетчиков.

Внутри созданного нагрузочного теста добавим необходимые счетчики производительности для сервера приложения. Для этого два раза нажимаем на созданный нагрузочный тест, правой кнопкой мыши добавляем Add counters в созданном ранее Counter Set’e. Аналогичную процедуру проделаем с сервером БД.

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

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

Цель первого прогона: определение максимального числа одновременно работающих пользователей при сохранении времен отклика в пределах значения х4 от единичного прогона (в данном случае 5 секунд)

Для определения максимального числа одновременно работающих пользователей были определены следующие параметры сценария нагрузки: нагрузка плавно подается на протяжении 10 часов для фиксированного числа пользователей, начиная со значения 500 пользователей и увеличивается каждые 30 минут на 500 пользователей до значения 10 000 одновременно работающих пользователей.

По итогам этого теста можно заключить, что по истечении 1 часа 30 минут приложение начинает деградировать. Сопоставив эти данные с графиком количества активных виртуальных пользователей, делаем вывод, что времена откликов начинают превышать значение 5 секунд при одновременной работе 1 500 пользователей. Однако на протяжении всего теста, продолжительностью 10 часов, не было зафиксировано таймаутов, что свидетельствует о возможности приложения выдерживать нагрузку до 10 000 одновременно работающих пользователей с увеличением времени отклика.

Проведя второй тест с условиями одновременной работы 1 500 пользователей (по итогам предыдущего теста) на протяжении 3 часов, мы получили следующий график времен отклика, который говорит о том, что приложение интернет-магазин AdvantShop выдерживает нагрузку в 1 500 виртуальных пользователей без деградации.

Мониторинг утилизации ресурсов позволяет сделать вывод, что имеет смысл пересмотреть конфигурацию сервера БД с целью снижения CPU, однако и текущая конфигурация обеспечивает одновременную бесперебойную работу 1 500 пользователей.

Средствами облачной службы Microsoft Azure было проведено нагрузочное тестирование интернет-магазина AdvantShop, так же развернутого в облаке. Приняв во внимание рекомендации по оптимизации работы приложения, коллеги из AdvantShop выпустят новую версию приложения. А благодаря тому, что инфраструктура нагрузочного тестирования была развернута в облаке, мы обеспечили себе возможность в любой момент повторить нагрузочные испытания с минимальным временем на подготовку и развертыванием стенда с новой конфигурацией – достаточно перенастроить и запустить VM облаке.

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

Все идет по плану

Прежде чем бросаться в бой, вначале следует разобраться, что мы хотим
получить в результате тестирования. Ведь проверка, как и любая другая работа,
требует предварительной подготовки. При неправильно сформулированной задаче
могут получиться результаты, которые будут не полностью отражать реальное
положение дел. Исходя из предполагаемой нагрузки веб-сервера, необходимо
определиться с критериями испытания. Установить, что будет считаться как успех,
а что как неприемлемая работа сервиса (например, время ответа, загрузка
сервера). Различают три варианта теста:

  • Нагрузочный (Load-testing) – определяется работоспособность системы
    при некоторой строго заданной заранее (планируемой, рабочей) нагрузке.
  • Устойчивости (Stress) – применяется для проверки параметров системы
    в анормальных и экстремальных условиях, основная задача во время этого теста -
    попытаться нарушить работу системы. Позволяет определить минимально
    необходимые величины системных ресурсов для работы приложения, оценить
    предельные возможности системы и факторы, ограничивающие эти возможности.
    Также определяется способность системы к сохранению целостности данных при
    возникновении внештатных аварийных ситуаций.
  • Производительности (Performance) комплексная проверка, включающая
    предыдущие два теста, предназначена для оценки всех показателей системы.

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

Во время тестирования имитируется одновременная работа нескольких сотен
или тысяч посетителей
. Для большей правдивости каждый из виртуальных
пользователей может «ходить» по сайту по индивидуальному сценарию и иметь личные
параметры. Также в процессе тестирования можно имитировать кратковременные пики
нагрузки, когда количество посетителей скачкообразно увеличивается, что очень
актуально для сайтов с неравномерной аудиторией. Итак, чтобы полноценно провести
тестирование, необходимо знать:

  • сколько посетителей планируется принимать в среднем, в пиковой нагрузке,
    время пиковой нагрузки;
  • могут ли несколько пользователей иметь один и тот же IP-адрес и/или
    логин/пароль;
  • среднее количество страниц, просматриваемых одним пользователем, есть ли
    различия в поведении между зарегистрированными и анонимными пользователями,
    количественное соотношение между такими пользователями, посещаемые страницы и
    время нахождения пользователя на узле;
  • наличие динамических страниц и страниц, изменяемых в течение определенного
    периода, и как часто это происходит;
  • задействуется ли электронная почта, например, для подтверждения полномочий
    пользователя;
  • какая еще дополнительная информация используется для проверки статуса
    пользователя (cookies);
  • требуется ли подтверждение полномочий пользователя сторонней организацией
    или удаленным сервером (например, номер кредитной карточки), и будет ли
    представлена информация для тестирования;
  • доступная пропускная способность канала, средняя его ширина для одного
    пользователя;
  • может ли работа нескольких пользователей вызывать коллизию;
  • используется ли защищенное HTTPS-соединение;
  • используется ли Java-апплеты, потоковое медиа, специальные плагины, что
    требуется с клиентской стороны для их поддержки;
  • используется ли кэширование страниц;
  • плановые технические мероприятия, которые могут повлиять на работу
    сервера, и время их проведения (синхронизация, архивирование и пр.).

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

Open Systems Testing Architecture

OpenSTA (www.opensta.org)
- больше чем приложение для тестов, это открытая архитектура, проектируемая
вокруг открытых стандартов. Проект создан в 2001 году группой компаний CYRANO ,
которая поддерживала коммерческую версию продукта, но CYRANO распался, и сейчас
OpenSTA распространяется как приложение с открытым кодом под лицензией
GNU GPL, работает в Windows NT 4.0SP5/2000/XP. Для работы требует Microsoft Data
Access Components (MDAC), который можно скачать сайта корпорации.

Текущий инструментарий позволяет провести нагрузочное испытание HTTP/HTTPS
сервисов, хотя его архитектура способна на большее. OpenSTA позволяет
создавать тестовые сценарии на специализированном языке SCL (Script Control
Language). Для упрощения создания и редактирования сценариев используется
специальный инструмент Script Modeler. Выбираем Tools – Canonicalize URL,
запустится веб-браузер. Просто ходим по сайту, собирая ссылки, которые будут
сохранены в скрипт. Все параметры запроса поддаются редактированию, возможна
подстановка переменных. Структура теста и заголовки будут выводиться во вкладках
в панели слева. Тесты удобно объединять в наборы. Настройки прокси задаются в
самом скрипте, поэтому можно указать несколько серверов. Реализована возможность
организации распределенного тестирования, что повышает реалистичность, или когда
с одного компьютера не получается нагрузить мощный сервер. Каждая из машин такой
системы может выполнять свою группу заданий, а repository host осуществляет сбор
и хранение результатов. После установки на каждой тестирующей системе
запускается сервер имен, работа которого обязательна. Поддерживается
аутентификация пользователей на веб-ресурсе и установление соединений по
протоколу SSL. Параметры работы нагружаемой системы можно контролировать с
помощью SNMP и средств Windows NT. Результаты тестирования, включающие время
откликов, количество переданных байт в секунду, коды ответа для каждого запроса
и количество ошибок выводятся в виде таблиц и графиков. Использование большого
числа фильтров позволяет отобрать необходимые результаты. Результат можно
экспортировать в CSV-файл. Возможности по выводу отчетов несколько ограничены,
но по ссылкам на сайте можно найти скрипты и плагины, упрощающие, в том числе,
анализ полученной информации.

Apache JMeter

Apache JMeter (jakarta.apache.org/jmeter)
является Java-приложением с открытым кодом, предназначен для нагрузочного
тестирования не только веб-приложений и их отдельных компонентов (скрипты,
сервлеты, Java объекты и др.), но также FTP-серверов, баз данных (с
использованием JDBC) и сети. Функциональность расширяется с помощью плагинов.
Поддерживается SSL (через Java Secure Sockets Extension). Возможно проведение
тестов как с использованием графического интерфейса, так и из командной строки.
Использование Java подразумевает кроссплатформенность, поэтому JMeter
уверенно работает в различных *nix-системах, в Windows от 98 и некоторых других
ОС. Распространяется под Apache License.

В JMeter предусмотрены механизмы авторизации виртуальных
пользователей, поддерживаются пользовательские сеансы, шаблоны, кэширование и
последующий offline анализ результатов теста, функции позволяют сформировать
следующий запрос, основываясь на ответе сервера на предыдущий. Есть возможность
проводить распределенные тесты. В этом случае один из компьютеров является
сервером (bin/jmeter-server.bat), который управляет клиентами и собирает
итоговую информацию.

Для работы достаточно запустить ApacheJMeter.jar или в консоли jmeter.bat
(Windows) или jmeter.sh (*nix).

JMeter имеет встроенный прокси-сервер, который предназначен для записи
сессий, но можно использовать и внешний. Перед началом тестирования необходимо
составить тестовый план, описывающий серию заданий, которые необходимо выполнить
JMeter . Он должен содержать одну или несколько групп потоков (Thread
Groups) и другие элементы:

  • Логические контроллеры (Logic controllers);
  • Типовые контроллеры (Sample generating controllers);
  • Слушатели (Listeners);
  • Таймеры (Timers);
  • Соответствия (Assertions);
  • Конфигурационные элементы (Configuration elements).

Первым делом добавляем группу потоков (Edit - Add - Thread Group). В ее
настройках указываем название, количество запускаемых потоков, то есть
виртуальных пользователей (Number of threads), время задержки между запуском
потоков (Ramp-Up Period), количество циклов выполнения задания (Loop Count),
здесь же можно определить выполнение задания по расписанию (Sheduler). Далее,
щелкая в созданную группу, необходимо добавить образец запроса (Sampler), выбрав
его из списка. Для нагрузочного тестирования или проверки работоспособности
сервера достаточно выбрать HTTP Request (Add -Sampler - HTTP Request). Здесь
указываем название, IP-адрес и порт веб-сервера, протокол, метод передачи данных
(GET, POST), параметры переадресации, передачу файлов на сервер. Настраиваем и
жмем на Run. Вывод результата осуществляется с помощью Listeners, каждый
по-своему выводит результат. Например, Aggregate Graph выводит суммарные
результаты теста в виде таблицы и графика.

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

WAPT – Web Application Testing

WAPT (www.loadtestingtool.com)
позволяет испытать устойчивость веб-сайта и других приложений, использующих
веб-интерфейс, к реальным нагрузкам. Разрабатывается новосибирской компанией
SoftLogica LLC. Это одна из самых простых в использовании программ обзора. Для
проведения простого теста даже не нужно заглядывать в документацию, интерфейс
прост, но не локализован. Работает под управлением Windows от 98, поддерживается
и Vista. Для проверки WAPT может создавать множество виртуальных
пользователей, каждый с индивидуальными параметрами. Поддерживается несколько
видов аутентификации и куки. Сценарий позволяет изменять задержки между
запросами и динамически генерировать некоторые испытательные параметры,
максимально имитируя таким образом поведение реальных пользователей. В запрос
могут быть подставлены различные варианты HTTP-заголовка, в настройках можно
указать кодировку страниц. Параметры User-Agent, X-Forwarded-For, IP указываются
в настройках сценария. Значения параметров запроса могут быть рассчитаны
несколькими способами, в том числе, определены ответом сервера на предыдущий
запрос, используя переменные и функции. Поддерживается работа по защищенному
протоколу HTTPS (и все типы прокси-серверов). Созданные сценарии, сохраняемые в
файле XML-формата, можно использовать повторно. Кроме стандартных Performance и
Stress, в списке присутствуют несколько других тестов, позволяющих определить
максимальное количество пользователей и тестировать сервер под нагрузкой в
течение долгого периода.

Для проведения теста необходимо выбрать New – Scenario, в результате
запустится мастер создания теста. На первом шаге указывается тип теста и далее в
каждом окне заполняются параметры будущего теста. Здесь можно указать
фиксированное количество виртуальных пользователей, либо ступенчатое увеличение
с указанием минимального и максимального числа и временного интервала, выставить
таймер проведения теста. На следующем шаге задается время между кликами (think
time), скорость соединения, указывается диапазон IP-адресов, который будет
использован виртуальными пользователями. Нажатие на IP Adress List позволит
составить список таких адресов. Также выставляется HTTP-параметр User-Agent и
включается эмуляция прокси. Если требуется, чтобы виртуальные пользователи имели
индивидуальные настройки, на следующем шаге мастера для каждого из них
необходимо создать свой профиль, нажав New или загрузив сохраненный. В следующем
окне программы необходимо выставить параметры профилей.

После нажатия на кнопку Готово сценарий сохраняется. Теперь, чтобы указать на
объект тестирования, создаем профиль New – Profile и заполняем все параметры на
вкладках. Здесь же доступны для редактирования некоторые параметры, задаваемые
раннее с помощью мастера. Также указывается загрузка рисунков виртуальным
пользователем, параметры аутентификации, использование Cookies и другие.
На вкладке Recorder указываем адрес сайта, доступность которого можно тут же
проверить, нажав Go. Одновременно последует запрос на запуск Recorder, который
будет отслеживать посещенные страницы и записывать URI (они будут выводиться в
панели слева). Когда вся информация собрана, нажимаем Run Test. Подробные отчеты
в форме графика выводятся по ходу проведения теста, по окончании будет
сформирована HTML-страница. В результате можно получить информацию о времени
ответа сервера с возрастанием нагрузки, по количеству ошибок, переданных и
принятых байт и т.д.

NeoLoad

NeoLoad (www.neotys.com)
- еще одна система, позволяющая провести нагрузочное тестирование
веб-приложений. Написана на Java, работает на компьютерах, работающих под
управлением Windows NT/2000/XP, Linux и Solaris. В отчете можно получить
подробную информацию по каждому загруженному файлу. NeoLoad весьма удобен для
оценки работы отдельных компонентов (AJAX, PHP, ASP, CGI, Flash, апплетов и
пр.). Возможна установка времени задержки между запросами (thinktime) глобально
и индивидуально для каждой страницы. Тестирование проводится как с
использованием весьма удобной графической оболочки, так и с помощью командной
строки (используя заранее подготовленный XML-файл). Поддерживает работу с
протоколом HTTPS, с HTTP и HTTPS прокси, basic веб-аутентификацию и cookies,
автоматически определяя данные во время записи сценария, и затем проигрывает во
время теста. Для работы с различными профилями для регистрации пользователей
могут быть использованы переменные. При проведении теста можно задействовать
дополнительные мониторы (SNMP, WebLogic, WebSphere, RSTAT и Windows, Linux,
Solaris), позволяющие контролировать и параметры системы, на которой работает
веб-сервер.

При помощи NeoLoad можно проводить и распределенные тесты. Один из
компьютеров является контролером, на остальные устанавливаются генераторы
нагрузки (loadGenerator). Контролер распределяет нагрузку между loadGenerator и
собирает статистику.

Очень удобно реализована работа с виртуальными пользователями. Пользователи
имеют индивидуальные настройки, затем они объединяются в Populations (должна
быть создана как минимум одна Populations), в Populations можно задать общее
поведение (например, 40% пользователей популяции посещают динамические ресурсы,
20% читают новости). Виртуальные пользователи могут иметь индивидуальный
IP-адрес, полосу пропускания и свой сценарий теста.

Сценарий будущего теста создать очень просто. Запускаем приложение (при
первом запуске потребуется ввести регистрационный ключ, 30-дневная версия после
регистрации будет отправлена по почте), выбираем New Project, вводим название
проекта. После этого будет показана небольшая подсказка по поводу дальнейших
действий, нажатие Start Recording запустит веб-браузер, все перемещения будут
записаны. По окончании нажимаем Stop Recording или закрываем браузер.
Запускается мастер, который поможет создать виртуальных пользователей и
произведет автоматический поиск динамических параметров в записанных страницах,
выставит среднее значение thinktime. Компоненты страницы (HTML, images, CSS)
сохраняются отдельно. Для получения результата требуется пройти три шага:

  • Design - настройка проекта, здесь три вкладки. В Repository указываются
    веб-страницы и параметры запросов, в Virtual User создаются виртуальные
    пользователи, указываются URL, которые они должны "посетить", и дополнительные
    условия из левой вкладки поля Actions. В Populations – задания каждой из групп
    пользователей. В Actions могут быть выбраны следующие действия: Delay
    (установка задержки), Loop (повтор запроса), While (цикл), If...Then...Else
    (условие), Container и Random Container (групповые действия), Try...Catch
    (обработка ошибок), Stop virtual user (останов работы виртуального
    пользователя).
  • Runtime – указываются параметры теста, проводится тест. Здесь же в
    отдельных вкладках по ходу проведения теста выводится статистика.
  • Results – отвечает за вывод различной статистики в виде таблиц и графиков.

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

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

Продукты от Microsoft

Корпорация Microsoft предлагает целых два продукта, позволяющих
протестировать веб-сервер под нагрузкой. Это Microsoft Application Stress
Tool
и Web Capacity Analysis Tool . Первый распространяется как
отдельный продукт и имеет графический интерфейс. Второй входит в состав
комплекта инструментов Internet Information Services 6.0 Resource Kit Tools ,
работает из командной строки. MAST более наглядный, в создании теста
поможет простой мастер создания тестов, возможна работа с cookies, регулировка
нагрузки по разным URL. Сценарий тестирования может быть создан вручную или
записан с помощью веб-браузера и при необходимости отредактирован. В WAST
уровень нагрузки (stress level) регулируется путем задания количества нитей,
осуществляющих запросы к серверу, а число виртуальных пользователей
рассчитывается как произведение числа нитей на число сокетов, открытых каждой из
нитей. По окончании теста получаем простой отчет в текстовой форме, в котором
дана информация по числу обрабатываемых запросов в единицу времени, среднему
времени задержки, скорости передачи данных на сервер и с сервера, количеству
ошибок и т.д. Отчет можно экспортировать в CSV-файл. Никаких возможностей по
статистической обработке не предусмотрено, то есть с его помощью можно только
оценить работу при определенных условиях.

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

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

Что уже сделано?

  • Можно тестировать задания из списка url, до 20 штук
  • Каждая url может содержать один или несколько случайных параметров, задаваемых с помощью функции $RND
  • Тест запускается с множества серверов, на каждом из которых работает только 8 потоков
  • Тестирование можно проводить из 5 регионов AWS - Дублин, Франкфурт, Восток/Запад США, Токио
  • Тесты до 200 потоков мы готовы предоставлять бесплатно
Для теста открываем форму , где указываем email, заполняем URL, выбираем количество потоков тестирования, регион и начинаем тест.

*** UPDATE ***
Я вижу много смелых хабравчан ставит задание на 200 потоков. Если предположить, что 1 страница выдается за 1 секунду то это соответствует посещаемости >100К посетителей в час. Обычные проекты, в том числе наши, умирают от таких тестов.

Через минуту будет готов ваш результат (для примера посмотрите отличный результат - тестирование example.net). Как видим, 200 потоков позволяет генерировать более 1000 запросов в секунду - все зависит от скорости связи с тестируемым сервисом, и. собственно, скорости ответа.

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

Что тестировать?
Статические ресурсы, картинки, скрипты должны отдаваться с CDN. Тестировать их скорость отдачи имхо не имеет смысла, нужно тестировать только общую скорость загрузки страницы, к примеру с помощью старого доброго http://tools.pingdom.com/fpt/

Loadme сосредотачивается на тестировании кода страниц / методов api и т.п… Тестировать nginx отдающий 1x1.gif с помощью этого инструмента конечно можно, но практической пользы нет, и nginx от этого даже не согреется.

Чтобы определиться, какие же страницы являются самым узким местом, лучше всего воспользоваться newrelic. В отличие от популярного google analytics он также позволяет отслеживать статистику запросов ботов, и строить запросы по количеству операций, приходящихся на ту или иную страницу, а также какая из страниц больше всего портила впечатление пользователей по индексу apdex .
Как известно, ложка дегтя бочку меда портит, и если ваше приложение будет тормозить на каких-то даже относительно редких действиях это вполне может влиять и на популярные легковесные операции.

Как работают редиректы?
Редиректы выполняются; мы их активно используем это для тестирования одного из наших сайтов wikiart.org, реализовав на нем функцию «перейти на случайную картину».

Почему важно тестировать несколько url?
Для тестирования взаимного влияния популярных быстрых страниц и медленных (к примеру, поиска)

Зачем нужен $RND?
Синтаксис - $RND(from,to).
К примеру, http://someshop.com/search?from=$RND(0,1000)&to=$RND(1000,10000) будет генерировать произвольные запросы по поиску товаров по цене начиная от 0 до 1000 и заканчивая от 1000 до 10000. Это дает возможность оценить реальную мощность поиска.
К примеру, популярный украинский магазин Rozetka тратит в среднем 5 секунд на поиск смартфонов по случайной цене:
http://loadme.socialtalents.com/Result/ViewById/56108a645b5f1700481cc21d , что является весьма далеким от идеала результатом.
Амазон справляется с этой задачей принципиально лучше - значительное количество ошибок в результате, скорее всего, является защитой от ddos

Дальнейшие планы

Post, put, delete запросы
Нужная штука, однозначно, есть в планах.

Авторизация
Достаточно ли будет поддержки куки, с тем чтобы первый запрос логинил тест под случайным пользователем (для чего понадобится поддержка со стороны сервера), и дальнейшая работа пойдет от имени этого пользователя?

Ступенчатые тесты
Скажем, провести серию тестов: 25%, 50%, 75% и 100%, и увидеть разницу в скорости.


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

Регулярный тест по расписанию
Повторять тест каждый день / неделю и высылать отчет на email.
Также можно предоставиьт какой-нибудь webhook для иницирования существующего теста из кода (к примеру, после обновления)

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

Подтверждение собственности домена
Ограничение не более 200 агентов на 1 домен существует ровно для того чтобы никто не поверг в ddos чужой сайт. Для своего сайта вы можете создать еще один поддомен и протестировать его еще раз.
В будущем, однако, нужно будет сделать подтверждение доменов с помощью CNAME записи или файла с определённым именем.

Существующие конкуренты
Loadimpact.com - для нормального нагрузочного теста, хотя бы 100 запросов в секунду, потребуется 1500 так называемых «виртуальных юзеров» - каждый из них загружает страницу 1 раз в 15 секунд. Стоит такой пакет на данный момент $299 в месяц.

Loader.io - отличный сервис, платный пакет всего $99 в месяц. Очень гибкие настройки URL - можно завать методы, куки, хедеры, но нам не хватило рандомизации теста.