- PVSM.RU - https://www.pvsm.ru -

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

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

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

Вот почему нагрузочное тестирование так важно. Кроме коммерческих инструментов, также доступны варианты с открытым исходным кодом.

В этом руководстве рассмотрим:

  • Важность нагрузочного тестирования;

  • Лучшие бесплатные инструменты с открытым исходным кодом для нагрузочного и стресс-тестирования;

  • Ключевые особенности каждого из инструментов.

Что такое нагрузочное тестирование?

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

Нагрузочное тестирование используется, чтобы определить:

  • Является ли время отклика, возвращаемое критическими действиями в приложении, приемлемым в соответствие со спецификацией, требованиями или KPI?

  • Правильно ли ведет себя бизнес-функционал при большой нагрузке?

  • Рассчитана ли инфраструктура на масштабирование в условиях стресс-теста?

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

Список лучших инструментов нагрузочного тестирования на 2022 год

1. JMeter 

JMeter — пожалуй, самый популярный open-source инструмент, помогающий измерять время загрузки.

Apache JMeter [1] позиционирует себя как Java-приложение, разработанное специально для проведения нагрузочного тестирования с возможностью измерять производительность приложения и времени отклика.

JMeter был создан как open-source альтернатива LoadRunner и обладает множеством сложных функций. Это Java-приложение вида «толстый клиент», которое управляется в значительной степени кликами мышки — что бывает несколько необычно, но инструмент достаточно мощный. Кроме того, в JMeter доступны все функции, необходимые для проведения нагрузочного тестирования.

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

  • Возможность проводить тестирование производительности для множества технологий с использованием ряда протоколов, таких как Java Objects, Web HTTP/HTTPS, SOAP и Rest Services, FTP, базы данных с JDBC.

  • Хорошая IDE, которую можно использовать для записи, сборки и отладки тестов производительности.

  • Начиная с JMeter 3.1, языком программирования по умолчанию является Groovy.

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

  • Можно использовать для тестирования производительности мобильных приложений.

  • Используя jmeter-java-dsl, можно писать тесты производительности на Java и пользоваться автодополнением IDE и встроенной документацией.

В настоящее время у него более 6k звезд на GitHub.

Минусы

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

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

Вот где вам может помочь инструмент с открытым исходным кодом от BlazeMeter [2]— Taurus.

2. Taurus 

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

Сила Taurus заключается в том, что он позволяет писать тесты в YAML.

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

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

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

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

  • Taurus гораздо эффективнее встраивает тестирование производительности в пайплайн CI/CD.

  • Taurus предоставляет уровень абстракции поверх JMeter и некоторых других инструментов, таких как Locust, Gatling, Grinder и Selenium [4].

В настоящее время у него 1.7k звезд на GitHub.

3. Locust

Locust [5]— это простой в использовании распределенный инструмент для нагрузочного тестирования, который помогает фиксировать время отклика. Итак, какие скриптовые языки он использует? Лучший — это Python. Он используется для тестирования производительности веб-сайтов и других приложений.

Locust vs. JMeter

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

Рахул Соланки (Rahul Solanki [6]), технический руководитель BlueConch Technologies, как-то в нашем разговоре упомянул, что он сравнивал Locust с JMeter и обнаружил, что Locust отнимает примерно на 70 процентов меньше ресурсов.

Если вы знакомы с термином «генераторы нагрузки», Locust использует термин «рой» — в том смысле как если бы вы насылали рой саранчи для того, чтобы нагрузить сайт (прим. переводчика: игра слов, в англ. “swarm of locusts”).

Для каждого из экземпляров Locust можно определить желаемое поведение. Это также дает возможность отслеживать процесс нагрузки в веб-интерфейсе в реальном времени.

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

  • Возможность создавать тестовые сценарии с использованием Python

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

  • Приятный интерфейс

  • Расширяемый

  • Подходит для тестирования API

Минусы

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

В настоящее время у него 15.7k звезд на GitHub.

4. Fiddler с BlackWidow и Watcher 

В списке инструментов повышения производительности веб-сайта это может показаться странной комбинацией.

Но эксперт по производительности Тодд ДеКапуа (Todd DeCapua) на предыдущей конференции PerfGuild рекомендовал использовать Fiddler с Watcher и BlackWidow для создания решения быстрого запуска автоматизированного тестирования производительности.

Fiddler [7]предоставляет множество возможностей, но, вероятно, лучше всего его следует описать как средство захвата сетевых пакетов.

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

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

  • Устранение неполадок с веб-приложением

  • Тестирование безопасности

  • Оценка производительности

  • Отладка веб-трафика с большинства компьютеров и устройств

  • Множество функций интеграции

  • Удобен для поиска узких мест производительности

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

Watcher — это надстройка безопасности для Fiddler, которая позволяет быстро получить результаты тестирования на уязвимости в безопасности. BlackWidow — это веб-краулер, который дает возможность направить его на веб-адрес, а затем детализировать результаты.

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

Тодд продемонстрировал этот подход на прошлой онлайн-конференции PerfGuild [8].

5. nGrinder 

На странице nGrinder на GitHub написано, что он был разработан как решение для повышения производительности на уровне предприятия. Он был разработан, чтобы упростить процесс стресс-тестирования и предоставить тестировщикам платформу, позволяющую создавать, выполнять и отслеживать тесты.

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

  • Можно писать свои тесты, используя Jython или Groovy, чтобы создать тестовые сценарии и создать нагрузку на JVM с помощью нескольких агентов.

  • Он может расширять тесты с помощью клиентских библиотек, таких как jar и py.

  • Позволяет отслеживать состояние генерации нагрузки агентов производительности.

  • Заботится об автоматическом сборе результатов тестов с распределенных агентов после тестов

В настоящее время у него 1.3k звезд на GitHub.

6. The Grinder

The Grinder [9] — это фреймворк на основе Java. Он предоставляет простые в создании и использовании распределенные решения для тестирования, использующие множество машин-генераторов нагрузки для регистрации времени отклика конечных пользователей, что позволяет не беспокоиться о каких-либо ограничениях виртуальных пользователей.

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

  • Можно выполнять нагрузочное тестирование в любой системе с Java API

  • Хорошая консоль с графическим интерфейсом

  • Автоматически обрабатывает управление клиентскими подключениями и файлами cookie

7. Gatling

Gatling — это инструмент для стресс-тестирования, разработанный на Scala [10], Akka [11]и Netty [12].

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

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

  • У него простой, но мощный DSL

  • Его легко расширить

  • Если вы знакомы со Scala, то это лучший инструмент для нагрузочного тестирования.

  • Есть инструмент для записи сценариев.

  • Позволяет использовать стратегию shift left в тестировании производительности.

В настоящее время у него 5.1k звезд на GitHub.

Чтобы узнать больше о Gatling, ознакомьтесь с докладом [8] основателя Gatling Стефана Ланделла (Stephane Landelle) PerfGuildsession.

8. k6

k6 [13] — это open-source инструмент нагрузочного тестирования для проверки производительности серверной инфраструктуры.

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

k6 создан с использованием Go [14] и JavaScript и хорошо интегрируется в рабочий процесс.

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

  • Простой и понятный api для сценариев

  • Обеспечивает распределенное и облачное исполнение

  • Отличная возможность оркестрации REST API

В настоящее время у него 11.7k звезд на GitHub.

9. Tsung

Tsung [15]— это многопротокольный инструмент распределенного нагрузочного тестирования с открытым исходным кодом.

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

  • Может контролировать CPU, память и сетевой трафик клиента

  • Имеет HTTP-рекордер

  • Включает HTML-отчеты и графики

  • Имеет поддержку таких протоколов, как HTTP, XMPP, LDAP и т. д.

В настоящее время у него 2.1k звезд на GitHub.

10. Siege 

Siege [16] — это утилита командной строки для нагрузочного тестирования и измерения скорости работы для http. Он был разработан, чтобы помочь разработчикам измерять производительность работы своего кода.

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

  • Поддерживает базовую аутентификацию, файлы cookie, протоколы HTTP, HTTPS и FTP.

  • Позволяет пользователям подключаться к серверу с настраиваемым количеством имитируемых клиентов. Эти клиенты ставят сервер «в осаду» (прим переводчика: игра слов от англ. “under siege”).

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

В настоящее время у него 4k звезд на GitHub.

11. Bees with Machine Guns 

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

Bees with Machine Guns [17] описывает себя как утилиту для вооружения (создания) множества пчел (микроэкземпляров Amazon EC2 [18]) для атаки (нагрузочного теста) целей (веб-приложений).

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

В настоящее время у него 6k звезд на GitHub.

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

12. Fortio

Fortio — классная библиотека для нагрузочного тестирования, инструмент командной строки, продвинутый эхо-сервер и веб-интерфейс на go (golang).

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

Плюсы

  • Быстрый

  • Небольшой размер (Docker-образ 3 МБ, минимум зависимостей)

  • Многократно используемый

  • Встраиваемая библиотека go

  • Может записывать гистограммы задержки и другую ценную статистику.

В настоящее время у него 1.8k звезд на GitHub.

13. puppeteer-webperf

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

Не игнорируйте производительность интерфейса.

Можно использовать Puppeteer WebPerf [19]для сбора статистики веб-производительности, такой как трассировка загрузки страницы, получение трассировки инструментов разработчика со снимками экрана, получение показателей производительности во время выполнения и многое другое.

Чтобы узнать об этом больше, ознакомьтесь с моим полным руководством [20] по тестированию производительности фронтенда.

В настоящее время у Puppeteer WebPerf 1.4k звезд на GitHub.

14. Flood Element

Хотите проверить реальную загрузку браузера?

The Flood создал это open-source решение, чтобы дать возможность имитировать поведение пользователей с помощью нагрузочного тестирования с настоящим браузером. 

Element [21]— это Playwright с открытым исходным кодом, который использует инструмент нагрузочного тестирования на основе браузера.

Тестовые сценарии создаются с помощью Typescript.

Плюсы

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

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

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

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

Читайте об этом в моей статье [22] «Тестирование производительности на уровне браузера с использованием Element».

В настоящее время у него 204 звезды на GitHub.

15. Artillery.io

Artillery.io — это open-source приложение для создания нагрузочных тестов, премиум-версия которого предлагает возможность имитации нагрузки от тысяч пользователей.

  • задержка

  • запросы в секунду

  • параллелизм

  • фиксация среднего времени отклика

  • и пропускная способность.

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

  • Позволяет создавать пиковые нагрузки для бэкенда для проверки стабильности и надежности.

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

  • Поддерживает несколько протоколов, включая HTTP, Web Socket, Socket.IO, Kinesis и HLS.


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

Автор: Ксения Мосеенкова

Источник [24]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/testirovanie/380259

Ссылки в тексте:

[1] Apache JMeter: https://jmeter.apache.org/

[2] BlazeMeter : https://www.blazemeter.com/

[3] Taurus : https://github.com/Blazemeter/taurus

[4] Selenium: https://testguild.com/selenium-webdriver/

[5] Locust : https://github.com/locustio/locust

[6] Rahul Solanki: https://www.linkedin.com/in/rahul-solanki-9066a519/

[7] Fiddler : https://www.telerik.com/fiddler

[8] PerfGuild: https://guildconferences.com/

[9] The Grinder: http://grinder.sourceforge.net/

[10] Scala: https://testguild.com/podcast/performance/p39-zubair/

[11] Akka : https://akka.io/

[12] Netty: https://netty.io/

[13] k6: https://k6.io/

[14] Go: https://golang.org/

[15] Tsung : https://github.com/processone/tsung

[16] Siege: https://github.com/JoeDog/siege

[17] Bees with Machine Guns: https://github.com/newsapps/beeswithmachineguns

[18] Amazon EC2: https://aws.amazon.com/ec2/

[19] Puppeteer WebPerf : https://github.com/addyosmani/puppeteer-webperf

[20] руководством: https://testguild.com/front-end-performance-guide/

[21] Element : https://element.flood.io/

[22] статье: https://testguild.com/load-testing-browsers/

[23] по ссылке.: https://otus.pw/khy9/

[24] Источник: https://habr.com/ru/post/697494/?utm_source=habrahabr&utm_medium=rss&utm_campaign=697494