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

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

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

Нагрузочное и цели

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

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

Программы для нагрузочного тестирования и их задачи

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

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

Тест процессора

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

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

При использовании утилиты для начала рекомендуется закрыть все активные приложения и отключить автоматический (сна), чтобы компьютер ненароком не отключился в процессе проверки. Теперь нужно смоделировать процессору самые жесткие условия (а программа может это сделать, как никакая другая, действительно ставя чипы в самые тяжелые условия). Сам тест активируется из меню опций, где выбирается раздел Torture Test. Там будут указаны виды проводимых операций. Наиболее интересными здесь представляются тесты Blend (одновременная нагрузка и на процессор, и на «оперативку»), а также Small FFT и Large FFT (увеличение нагрузки на процессор за счет выгрузки оперативной памяти).

Как определить, что нагрузочное тестирование прошло успешно? Единого мнения здесь нет, но считается, что если в течение хотя бы 4 часов ошибок или сбоев в работе чипа не наблюдалось, этот компонент достаточно устойчив к чрезмерным нагрузкам. Но бывает и такое, что сбои могут появиться намного позже, поэтому, если у вас имеется изрядный запас времени, лучше увеличить период тестирования до 24 часов (ошибки могут появиться и через полдня работы).

Проверка работы оперативной памяти

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

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

Определение поведения графического адаптера

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

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

Кроме того, можно использовать и специальные утилиты, разработанные под конкретные игры. Например, очень хорошо подойдут тестовые приложения типа Alien vs Predator, S.T.A.L.K.E.R. или еще что-то в этом роде. Как правило, распространяются они совершенно бесплатно, а с их помощью можно точно установить, как будет вести себя система после установки оригинального игрового пакета.

Для чего нужно тестирование серверов и сайтов

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

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

Вопросы теста веб-серверов (программного обеспечения) и создаваемых Интернет-ресурсов

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

В данном случае (и для сайта, и для веб-сервера) многие советуют использовать мощнейший пакет под названием OpenSTA (System Architecture Test), который позволяет не только провести проверку, но и разбить задачи на составляющие для каждого отдельно взятого элемента структуры с использованием инструмента создания и моделирования скриптов Script Modeler. Примечательно, что после создания такой модели можно проверить даже соединение по протоколу SSL (обязательно должен быть запущен так называемый сервер имен). Кроме того, результаты можно сохранять в разделе Repository Host, а тесты объединять в соответствующие группы.

Что в итоге?

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

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

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

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

Основные понятия

Для начала нужно ознакомиться с базовыми терминами и понятиями.

  • Задержка – это показатель того, насколько быстро сервер реагирует на запросы клиента. Обычно измеряется в миллисекундах (мс). Задержка также часто называется временем отклика. Чем ниже этот показатель, тем быстрее сервер обрабатывает запрос. Задержка измеряется на стороне клиента с момента отправки запроса до получения ответа. В этот показатель включены затраты сетевых ресурсов.
  • Пропускная способность – это количество запросов, которые сервер может обрабатывать в течение определенного промежутка времени. Обычно этот показатель измеряется в запросах в секунду.
  • Процентиль – это способ группировки результатов по проценту от всего набора данных.

Основы нагрузочного тестирования

Нагрузочное тестирование – это технология измерения производительности сервера, которая заключается в отправке имитируемого HTTP-трафика на сервер. Это позволяет найти ответы на такие вопросы:

  • Достаточно ли у сервера ресурсов (памяти, CPU и т. п.), чтобы обработать ожидаемый трафик?
  • Достаточно ли быстро реагирует сервер, чтобы обеспечить хороший пользовательский опыт?
  • Эффективно ли работает приложение?
  • Нужно ли серверу вертикальное или горизонтальное масштабирование?
  • Есть ли особо ресурсозатратные страницы или вызовы API?

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

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

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

Как определить разумный показатель задержки?

Время загрузки веб-сайта в диапазоне 2-5 секунд – обычное дело, но часть времени, связанная с задержкой веб-сервера, обычно составляет около 50-200 миллисекунд. Идеальный показатель задержки индивидуален для каждого сайта. Он зависит от большого количества факторов (аудитории, рынка, целей сайта, наличия пользовательского интерфейса или API и т. д.). Имейте в виду: большинство исследований показывают, что в производительности учитывается каждый маленький бит скорости, и даже совсем незаметные улучшения приводят к улучшению результатов в целом.

Планирование нагрузочного тестирования

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

1: Мониторинг ресурсов

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

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

Если у вас уже есть система мониторинга типа Prometheus, Graphite или CollectD, вы сможете собрать все необходимые данные.

Читайте также :

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

Для мониторинга доступной памяти используйте команду free. В комбинации с командой watch данные будут обновляться каждые 2 секунды.

Флаг -h выводит числа в удобочитаемом формате.

total used free shared buffers cached
Mem: 489M 261M 228M 352K 7.5M 213M
-/+ buffers/cache: 39M 450M
Swap: 0B 0B 0B

Выделенное число в выводе представляет свободную память после вычитания буфера и кэша. Новые версии free выводят другие результаты:

Total used free shared buff/cache available
Mem: 488M 182M 34M 14M 271M 260M
Swap: 0B 0B 0B

Новый столбец available вычисляется по-разному, но обычно представляет одну и ту же метрику: текущий объем доступной памяти для приложений.

Для мониторинга использования CPU в командной строке есть утилита mpstat, которая выводит количество свободных ресурсов CPU. По умолчанию утилита mpstat не установлена в Ubuntu. Вы можете установить ее с помощью следующей команды:

sudo apt-get install sysstat

При запуске mpstat нужно задать интервал обновления данных в секундах:

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

Linux 4.4.0-66-generic (example-server) 08/21/2017 _x86_64_ (4 CPU)
08:06:26 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
08:06:28 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
08:06:30 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

Столбец %idle показывает, какой процент ресурсов ЦП не используется. Загрузка процессора часто разделяется на разные категории (user CPU и system CPU).

2: Определение максимальной скорости отклика

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

Конкурентность – это показатель, который отображает количество параллельных подключений, которое может обрабатывать сервер. Значение по умолчанию 100 подходит в большинстве случаев, но вы можете выбрать индивидуальное значение. Для этого нужно проверить MaxClients, MaxThreads сервера и другие подобные параметры.

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

Некоторое программное обеспечение для нагрузочного тестирования позволяет сразу указать несколько URL-адресов, которые нужно проверить. Это позволяет более точно имитировать реальный трафик. Если у вас есть данные об использовании сайта (из аналитического программного обеспечения или логов сервера), вы можете применить эти данные в тестировании.

Отобрав URL-адреса, запустите тестирование. Убедитесь, что программное обеспечение очень быстро отправляет запросы. Если программное обеспечение разрешает выбрать скорость запроса, выберите значение, которое почти наверняка будет слишком высоким для вашего сервера. Если программное позволяет установить задержку между запросами, уменьшите это значение до нуля.

Использование ресурсов процессора и памяти будет увеличиваться. Свободные ресурсы процессора могут достигать 0%, и клиент может получить ошибку соединения. Это нормально, поскольку сервер работает на пределе возможностей.

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

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

3: Определение максимальной пропускной способности

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

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

Возьмите максимальную скорость запросов, которую вы определили на предыдущем этапе, и разделите ее на 2. Запустите еще один тест с новыми данными и обратите внимание на время ответа. Находится ли показатель в приемлемом диапазоне?

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

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

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

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

Инструмент ab

(или ApacheBench) – это простой однопоточный инструмент командной строки для тестирования HTTP-серверов. Изначально он разрабатывался как часть HTTP-сервера Apache, но его можно использовать для тестирования любого HTTP- или HTTPS-сервера.

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

Базовый вызов команды ab выглядит следующим образом:

ab -n 1000 -c 100 http://example.com/

Флаг –n задает количество запросов. Флаг –с задает конкурентность. Затем нужно указать URL, который нужно протестировать. Вывод (выдержка из которого приведена ниже) указывает количество запросов в секунду, время запроса и список процентилей времени ответа:

. . .
Requests per second: 734.76 [#/sec] (mean)

Time per request: 136.098 (mean)

Time per request: 1.361 (mean, across all concurrent requests)
Transfer rate: 60645.11 received
Percentage of the requests served within a certain time (ms)
50% 133

66% 135

75% 137

80% 139

90% 145

95% 149

98% 150

99% 151

100% 189 (longest request)

JMeter

JMeter – это мощное и многофункциональное приложение для нагрузочного и функционального тестирования от Apache Software Foundation. Функциональное тестирование – это проверка вывода приложения.

JMeter предлагает графический интерфейс Java для настройки тестовых планов.

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

JMeter может выводить информацию о процентилях в отчетах HTML и других форматах.

Siege

Siege – еще один инструмент командной строки для нагрузочного тестирования. Он похож на ab, но имеет несколько дополнительных функций. Siege – многопоточный инструмент, что обеспечивает относительно высокую пропускную способность. Он также позволяет указать сразу несколько URL-адресов для нагрузочного тестирования. Базовый вызов выглядит так:

siege -c 100 -t 30s http://example.com/

Флаг –с указывает конкурентность. Флаг -t определяет продолжительность тестирования (в данном случае – 30 секунд). Siege выводит среднее время отклика и скорость запроса:

. . .
Transactions: 5810 hits
Availability: 100.00 %
Elapsed time: 29.47 secs
Data transferred: 135.13 MB
Response time: 0.01 secs

Transaction rate: 197.15 trans/sec

Throughput: 4.59 MB/sec
Concurrency: 2.23
. . .

Siege не предоставляет процентилей для статистики задержек.

Locust

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

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

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

Locust может предоставить подробную статистику в CSV-файлах, которые можно загрузить.

Инструмент wrk2

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

wrk2 вызывается командой wrk:

wrk -t4 -c100 -d30s -R100 --latency http://example.com/

Параметр -t определяет количество потоков (в данном случае их 4, здесь нужно использовать количество процессорных ядер вашего сервера). Параметр -c указывает количество одновременных запросов (здесь 100). Флаг –d определяет продолжительность тестирования (30 секунд). Флаг –R указывает частоту запросов в секунду (100). Подробный вывод задержки предоставит флаг —latency.

. . .
Latency Distribution (HdrHistogram - Recorded Latency)
50.000% 5.79ms
75.000% 7.58ms
90.000% 10.19ms
99.000% 29.30ms
99.900% 30.69ms
99.990% 31.36ms
99.999% 31.36ms
100.000% 31.36ms
. . .

Заключение

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

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

Мы продолжаем рассказывать о компаниях-разработчиках решений (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 облаке.

В этой статье мы рассмотрим 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:

  • Для установки WAPT необходима операционная система Windows.
  • Отсутствует возможность создание сценариев.

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 сервера.
  • Невозможно запланировать запуск тестов на более позднюю дату.
  • Активы, отличные от скриптов, не могут быть присоединены.

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

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

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

  • Если это сервис - для серьезной нагрузки цена слишком высока
  • Если это утилита - результат зависит от скорости канала компьютера/сервера с которого проводился тест
  • Повторяющиеся запросы не отражают реальной скорости, так как кэширование есть на самых разных уровнях начиная от 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 - можно завать методы, куки, хедеры, но нам не хватило рандомизации теста.

Поддержите проект — поделитесь ссылкой, спасибо!
Читайте также
Что такое расширение файла DOC? Что такое расширение файла DOC? Как установить и пользоваться Как установить и пользоваться Как зарегистрироваться вконтакте без номера телефона Как зарегистрироваться вконтакте без номера телефона