Топ-15 бесплатных инструментов для нагрузочного тестирования

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

(О том, как именно производится нагрузочное тестирование, можно почитать в статье «Планируем нагрузочное тестирование», — прим. ред.).

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

Apache JMeter (5.1к на GitHub)

Apache JMeter — самый популярный инструмент с открытым исходным кодом в области тестирования производительности.

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

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

Особенности

  • Возможность тестирования производительности множества технологий с использованием ряда протоколов, таких как HTTP/HTTPS, SOAP и Rest Services, FTP, базы данных с JDBC.
  • Хорошая IDE, которую вы можете использовать для написания и отладки тестов производительности.
  • Начиная с JMeter 3.1 языком программирования по умолчанию стал Groovy.
  • Есть настройки для тестирования производительности мобильных приложений.

Несмотря на популярность этого инструмента, у него есть и некоторые недостатки.

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

Taurus (1.4к на GitHub)

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

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

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

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

Особенности

  • Использование YAML позволит большему количеству членов вашей команды участвовать в тестировании производительности. Кроме того, тест-кейсы будут куда читабельнее, что упрощает код-ревью.
  • По сути, Taurus гораздо эффективнее вписывает тестирование производительности в ваш конвейер CI/CD.
  • Taurus предоставляет своего рода слой абстракции поверх JMeter, так же, как и некоторые другие инструменты (например, Locust, Gatling, Grinder и Selenium).

Locust (15.7к на GitHub)

Locust — это простой в использовании распределенный инструмент нагрузочного тестирования. Он может помочь вам определить время отклика и выяснить, сколько пользователей способна обрабатывать система одновременно. В качестве языка сценариев используется Python.

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

Для тех, кто знает, что такое «генераторы нагрузки»: Locust использует такую вещь, как «swarm» (англ. locust — «саранча», а swarm — «рой»). То есть вы направляете рой саранчи, чтобы создать нагрузку на ваш сайт.

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

Особенности

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

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

Fiddler с BlackWidow и Watcher

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

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

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

С помощью Fiddler можно:

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

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

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

BlackWidow — это веб-краулер. Вы можете указать ему веб-адрес и получить подробную информацию по этому адресу.

nGrinder (1.3к на GitHub)

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

Особенности

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

The Grinder

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

Особенности

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

Gatling (5.1к на GitHub)

Gatling — это инструмент нагрузочного тестирования, написанный на Scala и построенный на базе Akka и Netty.

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

Особенности

  • Простой, но мощный DSL
  • Легкая расширяемость
  • Если вы знакомы со Scala и его преимуществами, этот инструмент нагрузочного тестирования — для вас.
  • Имеется запись скриптов
  • Инструмент позволяет применять shift-left  подход к тестированию производительности.

k6 (11.7к на GitHub)

k6 — это ориентированный на разработчиков инструмент нагрузочного тестирования для  вашей внутренней инфраструктуры. Его также можно использовать для включения тестирования производительности в CI/CD-пайплайны

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

Особенности

  • Обеспечивает распределенное и облачное исполнение.
  • Возможность оркестровки REST API.

Tsung (2.1к на GitHub)

Tsung — это распределенная система нагрузочного тестирования, написанная на Erlang.

Особенности

  • Высокая производительность. Tsung может симулировать огромное число пользователей (тысячи на одном CPU).
  • Нагрузка может быть распределена на кластер клиентских машин.
  • Динамические сценарии. Вы можете получать динамические данные с сервера под нагрузкой (без написания какого-либо кода) и использовать их в последующих запросах.
  • Поддерживаются протоколы HTTP, XMPP, LDAP и т. д.
  • В ходе одного замера можно симулировать разные типы пользователей, определив в сценарии их пропорциональное количество.

Siege (4к на GitHub)

Siege — это утилита командной строки для нагрузочного тестирования HTTP и тестирования производительности. Она призвана помочь разработчикам в оценке производительности их кода в условиях стрессовой нагрузки.

  • Поддерживает базовую аутентификацию, файлы cookie, протоколы HTTP, HTTPS и FTP.
  • Позволяет своим пользователям подключаться к серверу с настраиваемым количеством симулированных клиентов. Эти клиенты берут сервер в «осаду» (англ. siege — осада).
  • Отлично подходит для простого брут-форс тестирования.

Bees with Machine Guns (6к на GitHub)

Название этого инструмента для тестирования производительности, пожалуй, самое крутое в нашем списке. Bees with Machine Guns переводится как «пчелы с пулеметами». Это разработка Chicago Tribune.

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

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

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

Fortio (1.8к на GitHub)

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

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

Особенности

  • Быстрый.
  • Компактный (Docker-образ 3 МБ, минимальные зависимости).
  • Пригоден для многоразового использования.
  • Развитый и надежный инструмент (нет известных мажорных багов; а вот если хотите принять участие в разработке, возможностей для улучшения — масса!)

Puppeteer

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

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

Puppeteer — это библиотека Node, предлагающая высокоуровневый API для управления браузером Chrome или Chromium без пользовательского интерфейса, поверх протокола DevTools

В репозитории Puppeteer WebPerf вы найдете рецепты для автоматизации замеров веб-производительности с помощью Puppeteer.

Flood Element (0.2к на GitHub)

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

Flood Element генерирует нагрузку путем запуска тысяч экземпляров Chromium, Firefox или Webkit.

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

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

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

Artillery (4.4к на GitHub)

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

С помощью Artillery вы сможете получить подробные отчеты о разных показателях производительности:

  • задержках
  • запросах в секунду
  • конкурентности
  • среднем времени отклика
  • пропускной способности.

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

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

Итоги

Итак, мы представили вам 15 самых лучших (на наш взгляд) инструментов нагрузочного тестирования, имеющих опции для бесплатного использования.

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

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас