Вступление

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

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

JMeter

На первом месте конечно же многим хорошо известный JMeter. Это один из наиболее популярных и в то же время достаточно простых инструментов. JMeter бесплатный и опен-сорсный инструмент, с большим комьюнити и поддержкой. Он разработан на языке программирования Java и поддерживает тестирование нагрузки как веб приложений, так и различных сервисов бекенда, серверов баз данных и так далее. У JMeter есть своя среда разработки, где вы можете создать свой тест план тестирования нагрузки. Существует возможность взаимодействовать с Jenkins для непрерывной интеграции с разработкой. Вообще, несмотря на то что этот инструмент первоначально проектировался для нагрузочного тестирования, он довольно таки многофункциональный и может использоваться не только для нагрузки, но и для многих других задач, начиная от ручного тестирования и заканчивая средствами управления и мониторинга.

K6

Следующий по популярности идет инструмент K6 от разработчиков Grafana Labs. Здесь уже существует два варианта использования, это оупен-сорс для платформ Linux, MacOS, и Windows и платные варианты тестирования в облаке с возможностью попробовать эту функциональность на пятидесяти бесплатных тестах. Тесты пишутся с использованием языка программирования JavaScript. Тесты можно запускать из 21-й локации по всему миру, тем самым имитирую нагрузку из различных стран. У K6 так же существуют различные интеграции и расширения, что позволяет проводить различные виды тестирования и не ограничивается только нагрузкой.

Locust

Еще один инструмент для тестирования нагрузки это Locust. Все ваши тесты вы пишете на языке программирования Python, при этом не задействуется пользовательский интерфейс и XML. У Locust есть вэб-интерфейс, с помощью которого можно следить за ходом выполнения тестов и менять их по ходу дела. Locust создан в основном для тестирования нагрузки веб-сайтов и сервисов, но возможность расширения его функциональности так же присутствует, в силу его небольшого размера и гибкости.

Gatling

Инструмент для тестирования нагрузки Gatling спроектирован для непрерывного нагрузочного тестирования и интегрируется с CI/CD через Jenkins. У Gatling есть два варианта, бесплатный и различные платные планы для крупных компаний с триал периодами. Они разработали собственный предметно-ориентированный язык (Domain Specific Language, DSL) для того, чтобы можно было при создании тестов использовать любой язык программирования.

Tsung

Tsung - это еще один бесплатный инструмент распределенного нагрузочного тестирования с открытым исходным кодом, поддерживающий множество различных протоколов. Он был написан на языке Erlang, разработанном компанией Ericsson, которая ассоциировалась когда-то с надежностью и отказоустойчивостью. Его можно использовать для нагрузки на серверы HTTP, WebDAV, SOAP, PostgreSQL, MySQL, LDAP, MQTT и Jabber/XMPP. Он может быть распределен на несколько клиентских машин и способен одновременно симулировать сотни тысяч виртуальных пользователей. Tsung имеет вэб-интерфейс для просмотра статистики в режиме реального времени во время тестов и командную строку для интеграции в CI/CD.

Fortio

Достаточно молодой, но перспективный инструмент для нагрузочного тестирования Fortio. Он очень маленький, с минимальными зависимостями и не требует много ресурсов (docker имидж занимает всего 4 мегабайта). По сути, это встраиваемая библиотека языка программирования Go, а также инструмент командной строки и серверный процесс. Но он так же имеет не сложный вэб-интерфейс и REST API для запуска и просмотра графического представления результатов.

Заключение

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

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

Комментарии (12)


  1. Luchnik22
    00.00.0000 00:00
    +4

    Яндекс.Танк очень хороший, как минимум лучше k6

    https://habr.com/ru/company/pt/blog/204224


    1. SergeiShaikin Автор
      00.00.0000 00:00

      Он бесплатный?


      1. Luchnik22
        00.00.0000 00:00
        +1

        Да, Open Source


    1. MrVodinn
      00.00.0000 00:00
      +1

      Да, вещь не плохая, но её забросили, что нельзя сказать о K6.
      Подскажите, пожалуйста, также чем лучше?


      1. Luchnik22
        00.00.0000 00:00
        +1

        VUs (virtual users) абстрактная единица измерения используемая в к6, RPS вполне конкретная единица, которую можно померить на проде и её использует Яндекс.Танк

        Да, стоит добавить, что k6 также можно настроить на RPS, но выдерживает конкретный RPS он хуже танка (при значениях от ~120 на виртуалке за 5$)

        На счёт забросили - честно сказать не знаю, что там ещё улучшать можно, только если версии питона, но я бы добавил поддержку gRPC (есть форк)


    1. nik_savchenko
      00.00.0000 00:00
      +1

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

      Время от старта разработки до запуска теста для приложения до 5-7 ручек, исходя из опыта, у k6 быстрее+нет заморочки с патронами и, соответственно, авторизацией+достаточно большое кол-во доп.модулей и возможность расширения с совсем небольшими затратами+есть grpc

      Понятно, что и с Танком, разобравшись, можно все это заводить оперативно, но тут нюанс именно во времени освоения)

      Также есть классная статья https://habr.com/ru/company/vk/blog/563446/ с примером переезда с Танка на k6 и причинами.

      Но Яндекс.Танк крут, с этим вообще не спорю)


  1. Shersh
    00.00.0000 00:00
    +2

    1. SergeiShaikin Автор
      00.00.0000 00:00

      Надо будет глянуть. Спасибо


  1. ExNet
    00.00.0000 00:00
    +2

    + В копилку PragmaticFlow/NBomber


    1. SergeiShaikin Автор
      00.00.0000 00:00

      Посмотрю. Спасибо


  1. otchgol
    00.00.0000 00:00
    +4

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


    1. SergeiShaikin Автор
      00.00.0000 00:00

      Возможно кому-то будет полезно