Эта статья является гостевым постом, написанным Ragnar Lönn.
Сравнивая лучшие инструменты тестирования нагрузки на открытый исходный код с 2017 года!
Это Прошло почти три года с тех пор, как мы впервые опубликовали наши Первое сравнение и тестовые статьи которые стали очень популярными, и мы думали, что обновление, казалось, просроченным, поскольку некоторые инструменты много изменились за последние пару лет. Для этого обновления мы решили поставить все в одну огромную статью — делая его больше руководства для тех, кто пытается выбрать инструмент.
Во-первых, отказ от ответственности: Я, автор, попытался быть беспристрастным, но учитывая, что я помог создать один из инструментов в обзоре (K6), я обязан иметь некоторую смещение к этому инструменту. Не стесняйтесь читать между линиями и быть подозрительным в любых положительных вещах, я пишу о K6;)
Об обзоре
Список инструментов, на которых мы смотрим, не сильно изменилось. Мы оставили Шлибка Из обзора, потому что, несмотря на то, что нам нравится компетентный инструмент, который нам нравится, он, похоже, больше не будет активно развиваться, что делает его более неприятным для установки (требует старых версий Java), и это также не имеет много пользователей там Отказ Коллега, работающая с K6, предложила, мы бы добавили инструмент, построенный с ржавчиной и мыслью Дрель Казалось хорошим выбором, поэтому мы добавили это к обзору. Вот полный список тестированных инструментов и какие версии мы проверили:
- Apachebench 2.3
- Артиллерия 1.6.0
- Учера 0.5.0 (новый)
- Gatling 3.3.1
- Привет 0.1.2
- JMeter 5.2.1
- K6 0.26.0
- Саранча 0.13.5.
- Siege 4.0.4
- Tsung 1.7.0
- Вегета 12.7.0
- WRK 4.1.0
Так что мы тестировали тогда?
В основном это рассмотрение центров вокруг двух вещей:
1. Производительность инструментов Насколько эффективным является инструмент для генерации трафика и насколько точным является его измерения? 2. Разработчик ux Насколько легко и удобно использовать инструмент для использования, для разработчика, как я?
Автоматизация Тесты нагрузки становятся все больше и больше внимания для разработчиков, которые делают тестирование нагрузки, и хотя не было времени, чтобы правильно интегрировать каждый инструмент в тестовый набор CI, автор попытался выяснить, насколько хорошо подходит инструмент для автоматического тестирования путем загрузки, установки и запуска каждого инструмента из командной строки и через сценарию выполнения.
Обзор содержит как жесткие числа для E.G. Производительность инструментов, но и множество очень субъективных мнений от автора по различным аспектам или поведению инструментов.
Все чисто? Давай сделаем это! Остальная часть статьи написана в формате от первого лица, чтобы он, надеюсь, больше привлечь (или, по крайней мере, вы будете знать, кто виноват, когда вы не согласны с чем-то).
Главы
Глава 1: История и статус, откуда взялись инструменты, и какие из них активно развиваются/поддерживаются? Глава 2: Обзор использования возможностей, какую функциональность у них есть и Насколько они легко использовать для разработчика? Лучшие несовместимые инструменты The Top Trancable Tools Остальные инструменты
Глава 3: Обзор производительности и ориентиры, насколько эффективны инструменты при создании трафика и насколько точными являются их измерения? Максимальная точность измерения возможностей для образования трафика. Точность измерения памяти
Конечное резюме
Глава 1: История и статус
Обзор инструмента
Вот таблица с какой-то основной информацией о инструментах в обзоре.
Создан | Ferran Basora | Гатлинг Corp. | Shoreditch Ops Ltd. | Фонд Apache |
Лицензия | GPL3 | Apache 2.0 | Mpl2. | Apache 2.0 |
Написано | Ржавчина | Варенье | Nodejs | C |
Ссылки | Нет | Да: Scala. | Да: js. | Нет |
Многоподобный | да | да | Нет | Нет |
Распределенная нагрузка Генерация | Нет | Нет (премиум) | Нет (премиум) | Нет |
Веб-сайт | github.com/fcsonline | gatling.io | artillery.io | httpd.apache.org |
Исходный код | github.com/fcsonline | github.com/gatling | github.com/artilleryio | svn.apache.org |
Воздействие нагрузки | Jaana B Dogan | Создан | Фонд Apache | Джонатан Хейман |
AGPL3 | Apache 2.0 | Лицензия | Apache 2.0 | Мит |
Идти | Идти | Написано | Ява | Питон |
Да: js. | Нет | Ссылки | Limited (XML) | Да: Питон |
да | да | Многоподобный | да | Нет |
Нет (премиум) | Нет | Распределенная нагрузка Генерация | да | да |
k6.io | github.com/rakyll | Веб-сайт | jmeter.apache.org | locust.io |
LoadimT @ github. | github.com/rakyll | Исходный код | github.com/apache | locustio @ github. |
Будет ГЛОЗЕР | Создан | Джефф Флмера | Николас Никлаусс | Tomás Senart. |
Modified Apache 2.0 | Лицензия | GPL3 | GPL2. | Мит |
C | Написано | C | Erlang | Идти |
Да: Луа | Ссылки | Нет | Limited (XML) | Нет |
да | Многоподобный | да | да | да |
Нет | Распределенная нагрузка Генерация | Нет | да | Ограниченное |
WG @ Github | Веб-сайт | joedog.org | erland-projects.org | ЦЕНАРТ @ Github |
WG @ Github | Исходный код | JoeDog @ Github | Процесс @ github | ЦЕНАРТ @ Github |
Статус развития
Хорошо, Так какие инструменты активно развиваются сегодня, начале 2020 года?
Я посмотрел на репозитории программного обеспечения различных инструментов и подсчитал коммиты и освобождает от позднего 2017 года, когда я сделал последний обзор инструментов. Apachebench не имеет своего репо, но является частью Apache httpd Поэтому я пропустил его здесь, так как Apachebench довольно мертв, в любом случае.
Это положительно, чтобы увидеть, что несколько проектов, похоже, двигаются быстро! JMeter может сделать с более частыми релизами, возможно? Кажется, что саранча забрал скорость прошлого года, так как в 2018 году он имел только 100 коммиентов и один выпуск в 2018 году, но в 2019 году у него было 300 коммитов и 10 выпусков. И глядя на огромное количество коммитов, гатлинга, Jmeter и K6, кажется, движется очень быстро.
Глядя на артиллерию, дает мне ощущение, что версия с открытой исходной исходной комиссией становится намного меньше внимания, чем премиальная версия. Чтение артиллерии про Changelog (Кажется, нет изменений для артиллерийского исходного кода), выглядит как будто артиллерия Pro получила много новых функций за последние два года, но при проверке коммитских сообщений в Github Refo о артиллерии с открытым исходным кодом я вижу, что выглядит в основном Как случайные исправления ошибок.
Афачбенч
Этот старый таймер был создан как часть инструментального набора для Apache httpd веб сервер. Он был рядом с конца 90-х годов и был, по-видимому, был в ответ на аналогичный инструмент, созданный Zeus Technology, чтобы проверить веб-сервер Zeus (старый конкурент до веб-серверов Apache и Microofts). Не очень много происходит с Apachebench в наши дни, мудрые разработки, но благодаря ему доступны для всех, кто устанавливает инструмент для инструментов для Apache httpd, это очень доступно и, скорее всего, используется многими, многие люди для быстрого и грязного тесты производительности против, например, недавно установленный HTTP-сервер. Это также может быть использовано в довольно нескольких автоматизированных тестовых люксах.
Артиллерия
Shoreditch Ops Ltd в Лондоне создал артиллерию. Эти ребята немного анонимны, но я помню, как они были каким-то стартапом, которые поворачиваются в тестирование нагрузки либо до, либо после того, как артиллерия стала популярной там. Конечно, я также помню другие вещи, которые никогда не случались, так кто знает. В любом случае, проект, похоже, начал когда-нибудь в 2015 году и был назван «MiniGun», прежде чем он получил свое текущее имя.
Артиллерия написана в JavaScript, а использование Nodejs как его двигатель.
Дрель
Сверла — самый новый новичок куча. Он появился в 2018 году и является единственным инструментом, написанным в Ржавчина Отказ Видимо, автор — Ferran Basora — написал его как боковой проект, чтобы выучить ржавчину.
Потрясающий
Gatling был впервые выпущен в 2012 году кучей бывших консультантов в Париже, Франции, который хотел создать инструмент тестирования нагрузки, который был лучше для автоматизации тестирования. В 2015 году был основан Gatling Corp, а в следующем году премиум-саас-продукт «Frontline FrontLine» был выпущен по Гетлингом Corp. На своем веб-сайте они говорят, что они видели более 3 миллионов загрузок на сегодняшний день — я предполагаю, что это загрузки версии OSS.
Гатлинг написан в Scala , что немного странно, конечно, но, похоже, все равно работает довольно хорошо.
Привет
Эй, раньше называли Boom, после Инструмент тестирования нагрузки на Python Из этого имени, но автор, видимо, устал от путаницы, вызванного, поэтому она изменила его. Новое имя продолжает заставлять меня думать «лошадь едой», когда я ее слышу, поэтому я все еще запутался, но инструмент вполне нормально. Это написано в фантастическом Идти Язык, и довольно близко к апарачке с точки зрения функциональности. Автор заявил, что одна цель, когда она написала инструмент, должен был заменить апараччч.
Jmeter.
Это старый гигант куча. Он также поступает из программного обеспечения Apache Software, является большим, старым приложением Java и имеет тонна функциональности, плюс он все еще активно развивается. Последние два года он видел больше коммит к его кодовой базе, чем любой Другой инструмент в обзоре. Я подозреваю, что JMeter постепенно теряет долю рынка до новых инструментов, таких как гатлинг, но учитывая, как долго это было вокруг, и насколько он еще имеет импульс, это верна ставка, что это будет здесь долгое время. Существует так много интеграций, дополнений и т. Д. Для Jmeter, а все услуги SaaS, построенные на его вершине (например Blazemeter ), плюс люди потратили так много времени, узнав, как его использовать, что он будет сильным еще много лет.
к6.
Супер-потрясающий инструмент! Ну, хорошо, как я писал ранее, я здесь несколько предвзятый. Но объективные факты это: K6 был выпущен в 2017 году, так что вполне новый. Он написан в ходу, и забавная вещь, которую я только что понял, что у нас тогда есть галстук между Go и C — три инструмента в обзоре написаны в C, а три в ходе. Мои два любимых языка — это совпадение или шаблон?!
K6 был изначально построен, и поддерживается, Воздействие нагрузки — Служба тестирования нагрузки SaaS. Воздействие нагрузки имеет несколько человек, работающих на полную ставку на K6 и что вместе с взносами сообщества означает, что разработка средств является очень активным. Менее известное, почему этот инструмент называется «K6», но я рад утечке эту информацию здесь: после длительного внутреннего имени битва, которая закончилась в противостоянии, у нас было 7-буквенное имя, начиная с «К», что большинство людей ненавидели Поэтому мы сократили его до «К6», и это, казалось, решало проблему. Вы должны любить первые мировые проблемы!
Сапуль
Самодан — это очень популярный инструмент для тестирования нагрузки, который был рядом с не менее 2011 года, глядя на историю выпуска. Это написано в Python , что похоже на милый щенок программирования языков — все это любит! Эта любовь сделала Python огромной, и саранча также стала очень популярной, так как не на самом деле никаких других компетентных инструментов тестирования нагрузки, которые на основе Python (и саранча тоже есть в Python!)
Саранчу был создан кучей шведов, которые нуждались в сами инструмент. Он по-прежнему поддерживается главным автором, Джонатан Хейманом, но теперь имеет много внешних участников. В отличие от Е.Г. Artillery, Gatling и K6, нет коммерческого бизнеса, управляющего развитием саранчи — это (насколько я знаю) истинные усилия общины. Развитие саранчи чередуется между очень активным и не так активным — я предполагаю, что это зависит от уровня взаимодействия Джонатана в основном. После усыпления в 2018 году проект видел довольно несколько коммит и выпускает последние 18 месяцев или около того.
Осадка
Осадьте также довольно некоторое время — с начала 2000-х годах. Я не уверен, насколько он используется, но он наносится во многих местах онлайн. Он был написан Джефом Фулмером и все еще поддерживается им. Разработка продолжается, но длительное время может пройти между новыми релизами.
Цунс
Наше единственное соперник Эрланг! Цун был написан Nicolas NiClausse и основан на более старом инструменте IDX-цунами. Это также старое — то есть с начала 2000-х годов и как например, Осада все еще развивалась, но в подобной улитки.
Вегетация
Вегета, видимо, какая-то манга супергероя или что-то в этом роде. Черт возьми, теперь люди поймут, сколько мне лет. Несмотря на самом деле, не все эти агрессивные имена звучания и варианты слов, используемые для программного обеспечения для тестирования нагрузки довольно глупо? Вроде, ты делаешь Вегета Атака ...
начать тест нагрузки. И не добивай меня на «артиллерии», «осаду», «Гатлинг» и остальное. Мы пытаемся произвести впечатление на аудиторию пятилетних? » Саранча «по крайней мере немного лучше (хотя« вылупление »и« рояние »он продолжает делать, довольно сырное)
Видеть? Теперь я ушел с тангентом здесь. Медицинский удар! ОК, обратно снова. Вегета, кажется, была около 2014 года, она также написана в Go и кажется очень популярным (почти 14 тысяч звезд на Github! Очень популярное саранча, для справки, имеет около 12 тысяч звезд). Автор «Вегета» Tomás Senart, и развитие кажется довольно активной.
Спутник
WRK написан в C, по желанию GLOZER. С 2012 года было совсем не совсем новое, но я использовал его как вида ориентира производительности, потому что он смешно быстрый/эффективный и кажется очень твердым продуктом программного обеспечения в целом. Он на самом деле имеет более 23 тысяч звезд на GitHub, поэтому он, вероятно, имеет пользовательскую базу, которая довольно большая, даже если она менее доступна, чем многие другие инструменты (вам нужно будет компилировать его). К сожалению, WRK не так активно развивается. Новые релизы редки.
Я думаю, что кто-то должен разработать логотип для работы. Это заслуживает одного.
Глава 2: Обзор использования Юзабилити
Я Разработчик, и я вообще не люблю точка-щелчок приложениями. Я хочу использовать командную строку. Мне также нравится автоматизировать вещи через сценарию. Я нетерпеливый и хочу сделать вещи. Я своего рода старый, который в моем случае означает, что я часто немного не доверяю новым технологиям и предпочитаю битва-проверенные вещи. Вы, вероятно, разные, поэтому постарайтесь выяснить, что вы можете принять, что я не могу, и наоборот. Тогда вы можете получить что-то из читать мои мысли на инструментах.
То, что я сделал, это управлять всеми инструментами вручную, в командной строке, и интерпретированные результаты либо печатаются на STDOUT, либо сохраняются в файл. Затем я создал сценарии Shell для автоматического извлечения и сопоставления результатов.
Работа с инструментами дала мне некоторое представление о каждом инструменте и каковы его сильные и слабые стороны, для моего конкретного случая использования. Я представляю, что то, что я ищу, аналогично тому, что вы ищете при настройке автоматических тестов нагрузки, но я не могу рассмотреть все аспекты, так как я действительно не интегрировал каждый инструмент в какой-то тестовый набор CI (что Может быть следующая статья для записи). Просто отказ от ответственности.
Кроме того, обратите внимание, что Производительность Из инструментов окрашены обзор юзабилити. Если вы хотите Детали О производительности вам придется прокрутить вниз к тестам производительности.
RPS.
Вы увидите термин RPS Используется либерально на протяжении всего статья в блоге. Это аббревиатура означает «запросы в секунду», измерение того, сколько трафика генерируется инструмент тестирования нагрузки.
Вулки
Это еще один термин, используемый довольно много. Это (нагрузка) тестирование аббревиатуры, которое коротко для «виртуального пользователя». Виртуальный пользователь является симулированным человеком/браузером. В тесте нагрузки VU обычно означает параллельное выполнение потока/контекстом, который самостоятельно отправляет HTTP-запросы, что позволяет вам симулировать множество одновременных пользователей в тесте нагрузки.
Инструменты для сценариев против скриптуальных
Я решил сделать ведущий список моих фаворитов как для инструментов, которые поддерживают скрипты, так и для тех, которые этого не сделают. Причина этого заключается в том, что нужно ли вам сценарию или не очень зависит от вашего случая использования, и есть пара очень хороших инструментов, которые не поддерживают сценарию, которые заслуживают упомянутых здесь.
В чем разница между сценарием и неинтересовым инструментом?
Ссылки на сценарие поддерживает реальный язык сценариев, который вы используете для записи ваших тестовых случаев в E.g. Python, JavaScript, Scala или Lua. Это означает, что вы получаете максимальную гибкость и мощность при разработке ваших тестов — вы можете использовать расширенную логику для определения того, что происходит в вашем тесте, вы можете вытащить библиотеки для дополнительных функций, вы часто можете разделить свой код в несколько файлов и т. Д. Это, действительно, «способ разработчика» делать вещи.
Инструменты, не связанные с скриптами, с другой стороны, часто проще начать работать, поскольку они не требуют, чтобы вы изучали какие-либо конкретные API сценариев. Они часто также имеют тенденцию быть немного менее потребляемыми ресурсами, чем с помощью сценариев, поскольку им не нужно иметь сценарию языкового времени выполнения и контексты выполнения для потоков сценариев. Таким образом, они быстрее и потребляют меньше памяти (вообще, не правда во всех случаях). Отрицательная сторона — это они более ограничены в том, что они могут сделать.
Хорошо, давайте попадем в тематический обзор инструментов!
Лучшие неписанные инструменты
Вот мои любимые не написанные инструменты, в алфавитном порядке.
Привет
Эй, это простой инструмент, написанный в Go, с хорошей производительностью и наиболее распространенными функциями, которые вам нужно будет запустить простые статические тесты URL. Его не хватает любого вида сценариев, но может быть хорошей альтернативой инструментам, такими как Apachebench или WRK, для простых тестов нагрузки. Эй, поддерживает http/2, что ни WRK или Apachebench не делает, и пока я не думал, что поддержка http/2 была большая сделка в 2017 году, сегодня мы видим, что проникновение http/2 намного выше, чем тогда, поэтому сегодня это Больше преимущества для эй, я бы сказал.
Еще одна потенциальная причина использовать эй вместо апачечка, это то, что эй, мульти-резьба, пока апачечка не. Apachebench очень быстро, поэтому часто вам не понадобится более одного ядра CPU для создания достаточного количества трафика, но если вы будете делать, то вы будете счастливее, используя Hey, поскольку его емкость генерации нагрузки будет в значительной степени линейно линейно. на твоей машине.
Эй, имеет ограничение скорости, которое можно использовать для запуска тестов с фиксированными ставками.
Эй, помогите вывод
Эй, резюме
Эй, просто, но это делает то, что это делает очень хорошо. Это стабильно, среди более выгодных инструментов в обзоре, и имеет очень хороший выход с помощью гистограмм времени отклика, процентилями и материалами. Он также имеет ограничение скорости, что является чем-то, не хватает многих инструментов.
Вегетация
Вегета имеет много крутых функций, таких как тот факт, что его режим по умолчанию должен отправлять запросы с постоянной скоростью, и он адаптирует параллелизм, чтобы попытаться достичь этой ставки. Это очень полезно для регрессии/автоматического тестирования, где вы часто хотите запустить тесты, которые настолько одинаковы, насколько это возможно, так как это сделает более вероятно, что любые результаты отклонения являются результатом регрессии в недавно совершенном кодексе.
Вегета написана в Go (yay), очень хорошо работает, поддерживает HTTP/2, имеет несколько выходных форматов, гибкую отчетность и может генерировать графические графические участки отклика.
Если вы посмотрите на скриншот времени выполнения выше, вы увидите, что вполне очевидно, что вегетация была разработана, чтобы запустить в командной строке; Это читает из stdin
Список транзакций HTTP для генерации и отправки результатов бинарный Формат в STDOUT, где вы должны перенаправлять в файл или трусить их непосредственно к другому вегетационному процессу, который затем генерирует отчет от данных.
Эта конструкция обеспечивает большую гибкость и поддерживает новые случаи использования, такие как E.G. Базовое распределение нагрузки с помощью удаленного выполнения раковины вегетации на разных хостах, а затем копирование двоичного выхода из каждой вегетации «раб» и трубопроводит все в одном процессе в одном вегетаре, который генерирует отчет. Вы также «кормить» (через stdin) Вегета его список URL-адресов, что означает, что у вас может быть возможность выполнять комплексную логику программного обеспечения, которая генерирует этот список URL (хотя эта программа не будет иметь доступа к результатам транзакций, поэтому сомнительно, насколько полезно такая установка Я думаю).
Слегка негативная сторона состоит в том, что командная строка UX — это не то, к которой вы можете использовать, если вы использовали другие инструменты тестирования нагрузки, и ни один простых возможных, если вы просто хотите запустить быстрый тест в командной строке один URL с некоторым трафиком.
Regeta Help Exputed
Сводка вегета
В целом, VEGEA — действительно сильный инструмент, который обслуживает людям, которые хотят, чтобы инструмент тестировать простые, статические URL-адреса (возможно, конечные точки API), но также хотят немного более функциональности. Или Люди, которые хотят собрать свое собственное решение для тестирования нагрузки и нуждаются в гибкой генераторной компоненте нагрузки, что они могут использовать по-разному. Вегета может даже использоваться в качестве библиотеки/пакета Golang, если вы хотите создать свой собственный инструмент тестирования нагрузки.
Самый большой недостаток (когда я пользователь) — отсутствие программируемости/сценариев, что делает его немного менее разработчиком.
Я бы определенно использовал вегетацию для простых, автоматизированного тестирования.
Спутник
WRK может быть немного датирован, и в наши дни не получают много новых функций, но это такое! # И% € Сплошной кусок кода. Он всегда ведет себя так, как вы ожидаете, и он работает круги вокруг всех других инструментов с точки зрения скорости/эффективности. Если вы используете WRK, вы сможете генерировать в 5 раз больше трафика, поскольку вы будете с K6, на одном оборудовании. Если вы думаете, что делает K6 звук плохого, подумайте еще раз, потому что это не так, чтобы К6 медленный. Это просто эта работа так чертовски быстро. Сравнивая его с другими инструментами, WRK в 10 раз быстрее, чем гатлинг. 15-20 раз быстрее, чем саранча, а более чем в 100 раз быстрее, чем артиллерия.
Сравнение немного несправедливо, как несколько инструментов, пусть их потоки Vu работают гораздо более сложным кодом сценария, чем то, что позволяет, но все же. Вы бы подумали, что WRK не предложил никаких скриптов вообще, но на самом деле позволяет выполнять код LUA в потоках Vu и теоретически, вы можете создать тестовый код, который довольно сложный. Однако на практике API WRK Scripting API на основе обратного вызова и не очень подходит для написания сложной тестовой логики. Но это тоже очень быстро. Я не выполнил код LUA при тестировании WRK на этот раз — я вместо этого я использовал однорегулированный тестовый режим, но предыдущие тесты показали производительность WRK, чтобы быть минимально задействующими только при выполнении кода LUA.
Тем не менее, быть быстрым и измерением правильно обо всем, что делает WRK. Он не имеет поддержки HTTP/2, нет фиксированного режима скорости запроса, нет параметров вывода, отсутствие простых способов генерации PAST/FAY приводит к настройке CI и т. Д. Короче говоря, это довольно уместно.
Вывод помощи WRK
Сводка WRK
WRK включена среди лучших неплатущих инструментов, потому что если ваша единственная цель состоит в том, чтобы генерировать грузовик на простую дорогу на сайт, нет инструмента, который делает это более эффективно. Это также даст вам точные измерения времени отклика транзакций, что является чем-то многими другими инструментами, когда они вынуждены создавать много трафика.
Лучшие сценаривные инструменты
Для меня это самая интересная категория, потому что здесь вы найдете инструменты, которые могут быть запрограммировано вести себя в любых странных способах, которые вы желаете!
Или, чтобы положить его более скучным способом, вот инструменты, которые позволяют писать тестовые случаи как чистый код, как будто вы используете, если вы разработчик.
Обратите внимание, что я перечислю лучшие инструменты в алфавитном порядке — я не буду ранствовать их, потому что списки глупы. Прочитайте информацию, а затем используйте этот комок, который сидит на верхней части шеи, чтобы выяснить, какой инструмент вы должны использовать.
Потрясающий
Gatling не на самом деле мой фаворит мой, потому что это приложение Java, и мне не нравятся приложения Java. Apps Java, вероятно, легко использовать для людей, которые проводят весь свой день, работающие в среде Java, но для других они определенно не дружественный интерфейс. Всякий раз, когда что-то не удается в приложении, написанном в основном любым другим языком, вы получите сообщение об ошибке, которое часто помогает вам выяснить, в чем проблема. Если приложение Java не удается, вы получите 1000 строк трассировки стека и повторяющиеся, общие сообщения об ошибках, которые имеют абсолютно нулевую помощь. Кроме того, запущенные приложения Java часто требуют ручной настройки параметров выполнения JVM. Возможно, Java хорошо подходит для большого программного обеспечения Backend Enterprise Backend, но не для приложений командной строки, таких как инструмент тестирования нагрузки, поэтому приложение Java является ясным минусом в моей книге.
Если вы посмотрите на скриншот выше, вы отметите, что вы должны добавлять параметры в свой тест внутри переменной среды «Java_opts», которая затем прочитана из вашего сценария Gatling Scala. Нет никаких параметров, которые вы можете дать Gatling, чтобы повлиять на параллелизм/VUS, продолжительность или аналогичный, но это должно произойти из самого Scala Code. Этот способ делать вещи приятно, когда вы запускаете только что-то в автоматизированном моде, но вроде больно, если вы хотите запустить пару ручных тестов на командной строке.
Несмотря на Java-steptricity (или это «резидент-центризм»?), Я должен сказать, что Gatling — это довольно хороший инструмент тестирования нагрузки. Его производительность не велика, но, вероятно, адекватна для большинства людей. Он имеет приличную среду сценариев, основанную на Scala. Опять же, Scala не моя вещь Но если вы в нем в нее, или Java, вам должно быть довольно удобно для вас, чтобы сценарировать тестовые случаи с помощью гатлинга.
Вот что может выглядеть очень простой скрипт снимки:
import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ class GatlingSimulation extends Simulation { val vus = Integer.getInteger("vus", 20) val duration = Integer.getInteger("duration", 10) val scn = scenario("Scenario Name") // A scenario is a chain of requests and pauses .during (duration) { exec(http("request_1").get("http://192.168.0.121:8080/")) } setUp(scn.inject(atOnceUsers(vus))) }
API сценариев кажется способен, и он может генерировать результаты Pass/Fail, основанные на определенных пользователем условиях.
Мне не нравится текстовая система меню, которую вы получаете по умолчанию при запуске Gatling. К счастью, что можно пропустить с помощью правильных параметров командной строки. Если вы копаете это чуть немного, Gatling довольно прост для запуска из командной строки.
Документация для Gatling очень хорошая, которая является большим плюсом для любого инструмента.
У Gatling есть инструмент записи, который выглядит компетентным, хотя я не пробовал сам, так как я больше интересую сценарии сценариев для тестирования отдельных конечных точек API, а не записать «Пользовательские путешествия» на веб-сайте. Но я представляю, что многие люди, которые управляют сложными сценариями тестирования нагрузки, моделируясь поведением конечного пользователя, будет счастлив, что рекордер существует.
Gatling будет по умолчанию отчет о результатах stdout и генерирует приятные отчеты HTML (используя мою любимую библиотеку Charting — HighCharts ) после завершения теста. Приятно видеть, что он в последнее время также получил поддержку для результатов вывода на графит/вторжку и визуализацию с использованием графана.
Вывод помощи Gatling
Сводное изложение
В целом, Gatling — это очень компетентный инструмент, который активно поддерживается и разработан. Если вы используете JMeter сегодня, вы должны определенно взглянуть на Gatling, просто чтобы увидеть, что вам не хватает (подсказка: удобство использования!).
к6.
Когда я был вовлечен в создание K6, не странно, что мне нравится выбор, который сделал этот проект. Идея позади K6 состояла в том, чтобы создать высококачественный инструмент тестирования нагрузки для современного разработчика, который позволил вам написать тесты в виде чистого кода, имел простую и последовательную командную строку UX, имел полезные параметры вывода результатов и имели достаточно хороших результатов. Отказ Я думаю, что все эти цели были в значительной степени выполнены, и что это делает K6 очень убедительный выбор для инструмента тестирования нагрузки. Особенно для разработчика, как я.
K6 является сценарием в простых JavaScript и имеет то, что я думаю, это самые красивые API сценариев всех инструментов, которые я тестировал. Это API, которое позволяет легко выполнять общие операции, проверьте, что вещи ведут себя как ожидалось, и контроль Pass/Fail поведение для автоматизированного тестирования. Вот что может выглядеть очень простой скрипт K6:
import http from 'k6/http'; import { check } from 'k6'; export default function() { var res = http.get('http://192.168.0.121:8080/'); check(res, { 'is status 200': r => r.status === 200 }); }
Приведенный выше скрипт сделает каждый Vu генерировать транзакцию HTTP, а затем убедитесь, что код ответа был 200. Состояние чека, как это напечатано на STDOUT, и вы можете настроить пороговые значения, чтобы выйти из строя, если большой процент ваших чеков неисправен. API Scripting K6 заставляет писать автоматические испытания производительности очень хорошим опытом, IMO.
Интерфейс командной строки K6 прост, интуитивно понятен и последовательно — оно чувствует себя современно. K6 входит в число более быстрых инструментов в этом обзоре, он поддерживает все базовые протоколы (HTTP 1/2/Websocket), имеет несколько вариантов вывода (текст, JSON, NINCUXDB, STATSD, DataDog, Kafka). Запись трафика из браузера довольно прост, поскольку K6 может преобразовать HAR файлы в скрипт K6, а основные браузеры могут записывать сеансы и сохранять их как Har Files. Кроме того, есть варианты преобразования E.G. Коллекции почтальона к коду скрипта K6. О да, и документация — это звездочка в целом (хотя я просто говорил с парнем, работающим на документах, и он был недовольным государством, которое они сегодня, которые я думаю, великолепно. Когда разработчик продукта удовлетворен, продукт стагниты)
Что тогда не хватает K6? Ну, распределение генерации нагрузки не включено, поэтому, если вы хотите запустить действительно масштабные тесты, вам придется купить версию Premium SaaS (которая распределена поколебание нагрузки). С другой стороны, его производительность означает, что вы не очень, скорее всего, закончите емкость генерации нагрузки на одной физической машине в любом случае. Это не приходит с каким-либо веб-интерфейсом, если вы в такие вещи. Я не.
Одно людям может ожидать, но которого k6 не имеет, является совместимостью Nodejs. Многие (возможно, даже больше всего?) Nodejs библиотеки могут не использоваться в скриптах K6. Если вам нужно использовать Nodejs Libs, артиллерия может быть вашим единственным безопасным выбором (о Ну нет!).
В противном случае единственное Я Не нравится k6, это тот факт, что я должен сценарию свои тесты в JavaScript! JS — это не мой любимый язык, а лично я бы предпочел использовать Python или Lua — последнее, будущее воздействие на нагрузку на сценариев, используемое в течение многих лет, чтобы проверить тесты нагрузки скриптов, а также очень ресурсовыше. Но с точки зрения проникновения на рынок, Луа представляет собой фруктовую лету, тогда как JS — слон, поэтому выбирая JS Over Lua. И, честно говоря, до тех пор, пока сценарии не делают в XML (или Java), я счастлив.
Как упоминалось ранее, версия открытой исходности K6 является Очень Активно разработано, с новыми функциями добавляются все время. Проверить Отпустите ноты/Changelog Что, кстати, являются одними из лучших написанных, которые я когда-либо видел (благодаря сопровождающему @ Na— этому туз на написание этих вещей).
k6 Справка вывода
K6 также заслуживает криктата для его встроенной помощи, что приятнее, чем у любого другого инструмента в этом обзоре. У него есть докер, многоуровневый К6 Помощь
Команда, где вы можете дать аргументы для отображения справки для определенных команд. Например. K6 поможет запустить
даст вам обширный текст помощи, показывающий, как использовать Беги
команда.
K6 Summary
Не то чтобы я предвзялся или что-нибудь, но я думаю, что K6 — это путь перед другими инструментами, когда вы смотрите на весь опыт для разработчика. Есть более быстрые инструменты, но нет быстрее, что также поддерживает сложные сценарии. Есть инструменты, которые поддерживают больше протоколов, но K6 поддерживает самые важные. Есть инструменты с дополнительными вариантами вывода, но K6 имеет больше, чем больше всего. Практически каждый Категория, K6 — это среднее или лучше. В некоторых категориях (документация, API сценариев, командная строка Ux) это выдающееся.
Сапуль
Опыт сценариев с саранчой очень хороший. API Scripting Scripting API довольно хороши, хотя несколько базовых и не хватает некоторых полезных вещей, которые имеют другие API, такие как пользовательские метрики или встроенные функции для генерации результатов Pass/Fail, когда вы хотите запустить тесты нагрузки в среде CI.
Большая вещь с скриптами саранча, хотя это — вы попадаете в скрипт в Python Действительно Ваш пробег может варьироваться, но если бы я мог выбрать любой язык сценариев для использования для Мой Тесты нагрузки я бы, вероятно, выбрал Python. Вот что может выглядеть сценарий саранча:
from locust import TaskSet, task, constant from locust.contrib.fasthttp import FastHttpLocust class UserBehavior(TaskSet): @task def bench_task(self): while True: self.client.get("/") class WebsiteUser(FastHttpLocust): task_set = UserBehavior wait_time = constant(0)
Хорошо, да? Возможно, даже приятнее, чем внешний вид скрипта K6, но API не хватает некоторых вещей, таких как встроенная поддержка результатов Pass/Fail ( Blazemeter имеет статью о том, как вы можете реализовать свои собственные утверждения для Саранча, который включает в себя генерацию исключения Python и получение трассировки стека — звучит немного похоже на грубую местность). Кроме того, новый класс FasthttPlocust (Подробнее об этом ниже) кажется немного ограниченным в функциональности (например, не уверен, что есть поддержка http/2?)
Саранча Имеет хороший веб-интерфейс Command-and-Control Web, который показывает, что вы проживаете обновления статуса для ваших тестов и где вы можете остановить тест или сбросить статистику. Кроме того, он имеет простое в использовании распределение генерации нагрузки. Начало распределенного теста на нагрузку с саранчой так же просто, как начать один процесс саранча с - мастер
Переключатель, затем несколько процессов с - Осплав
Переключите и укажите их на машине, где находится мастер.
Вот скриншот из интерфейса UI при запуске распределенного теста. Как вы можете видеть, я испытал какой-то проблема пользовательского интерфейса (используя Chrome 79.0.3945.130), что вызвало данные о состоянии живого состояния для печати сверху навигационной панели меню (возможно, Host String была слишком длинной?) Но в противном случае этот веб-интерфейс аккуратный и функциональный. Даже если бы я написал где-нибудь еще, что я не в веб-интерфейсе веб-интерфейса, иногда они могут быть довольно хорошими, когда вы пытаетесь контролировать количество генераторов ведомого нагрузки и оставаться на топ, что происходит.
Python на самом деле как самая большая вверх головой и самый большой недостаток с саранчой. Нижняя часть этого связана с тем, что саранча написана в Python. Python код медленный, и это влияет на способность саранда генерировать трафик и обеспечивает надежные измерения.
Первый раз, когда я оценил саранчу, обратно в 2017 году, производительность была ужасной. Самодал использовал больше времени процессора для генерации одного HTTP-запроса, чем любой Другой инструмент, который я проверен. Что сделало еще хуже, было то, что саранчон был однопоточным, поэтому, если вы не запускали несколько процессов саранча, саранча можно использовать только один CPU CORE и не смогут вообще генерировать много трафика. К счастью, садвижимость имела поддержку для распределенной генерации нагрузки даже тогда, и что заставило его идти от худшего исполнителя во второй худший, с точки зрения того, сколько движения он мог генерировать из одной физической машины. Еще одна негативная вещь о саранчем, тогда была то, что она имела тенденцию добавить огромное количество задержки для измерения времени отклика, что делает их очень ненадежными.
Прохладно это то, что с тех пор разработчики саранда сделали некоторые изменения и действительно ускорили саранчу. Это уникально, поскольку все остальные инструменты оставались еще или регрессированы в исполнении за последние два года. Саранча представила новый класс Python/lib под названием FastHttPlocust, что намного быстрее, чем старый класс HTTPlocust (который был построен на библиотеке запросов). В моем тестах теперь я вижу ускорение 4-5x с точки зрения возможностей генерации RAW запросов, и это соответствует тому, что авторы саранчи также описывают в документах. Это означает, что типичный, современный сервер с 4-8 ядрами процессорами должен быть в состоянии генерировать 5-10 000 RPS Runing Forute в распределен режим. Примечание Это распределенное исполнение часто все равно будет необходимо, поскольку саранча все еще однопоточная. В тестах ориентира я также обратите внимание, что точность измерений на саранчой ухудшается более изящно с повышенной рабочей нагрузкой при запуске его в распределенном режиме.
Однако приятная вещь с этими улучшениями заключается в том, что теперь шансы — это многие люди, найдут, что один физический сервер обеспечивает достаточно мощности для их потребностей нагрузки, когда они запускают саранчу. Они смогут насыщать самые внутренние системы постановки, или, возможно, даже в производственной системе (или реплике). Саранча по-прежнему среди более низких инструментов в обзоре, но теперь ощущается, как производительность больше не делает его непригодным для использования.
Лично, Я немного шизофреник о саранче. Я люблю, что вы можете скрипт в Python (и использовать миллион библиотек Python!). Это намного крупнейшая точка продажи для меня. Мне нравятся встроенные распределение поколений нагрузки, но не доверяло бы, чтобы он вел в по-настоящему масштабные тесты (я подозреваю, что один - Master
процесс станет узким местом довольно быстро — было бы интересно проверить) Отказ Мне нравятся API сценариев, хотя бы не повредило бы, если бы она была лучше поддержка результатов Pass/Fail, а поддержка HTTP с FastHttPlocust кажется базовой. Мне нравится встроенный веб-интерфейс. Я не люблю общую низкую производительность, которая может заставить меня запускать саранчу в распределенном режиме, даже когда на одном хосте — на необходимость обеспечения нескольких экземпляров саранчи является дополнительное осложнение, которое я действительно не хочу, особенно для автоматических тестов. Мне так много не нравится командная строка UX.
О распределенном исполнении на одном хозяине — я не знаю, как тяжело было бы запускать саранчу —владелец режим по умолчанию, а затем у него автоматически отключается несколько —раб Дочерные процессы, один на выявленный CPU Core? (Все, конечно, настраивается, если пользователь хочет его контролировать), сделайте его больше, как E.G. Nginx. Это приведет к более хорошему пользователю, IMO, с менее сложным процессом предоставления — по крайней мере, когда вы работаете на одном хосте
Вывод помощи на саранке
Сводка саранчи
Если бы это не было для K6, саранча будет моим главным выбором. Если вы действительно в Python, вы должны абсолютно взглянуть на саранчу сначала и посмотреть, работает ли он для вас. Я просто убедился, что API сценариев позволяет вам делать то, что вы хотите сделать простым способом, и что производительность достаточно хороша, прежде чем идти.
Остальные инструменты
Вот мои комментарии о остальных инструментах.
Афачбенч
Apachebench не очень активно развивается и становится старым. Я в том числе в основном, потому что там так распространено, являясь частью вложенных утилит для Apache httpd. Apachebench быстро, но однопоточный. Это не поддерживает HTTP/2 И нет возможности сценариев.
Резюме Apachebench
Apachebench — это хорошо для простого удара одного URL. Его единственным конкурентным для этого случая использования будет эй (который является многопоточным и поддерживает HTTP/2).
Артиллерия
Артиллерия серьезно медленная, очень ресурсово-голодная и, возможно, не очень активно разработана инструмент тестирования нагрузки на открытый исходный код. Не очень лестное резюме, которое я думаю, но читаю дальше.
Он написан в JavaScript, используя Nodejs как его двигатель. Приятная вещь о здании на вершине Nodejs — совместимость на нодей. K6 не может сделать, несмотря на то, что K6 также связан с сценарием в обычный JavaScript. Плохая вещь о том, чтобы быть приложением Nodejs, однако, является производительностью: В тестах-тестах 2017 года артиллерия оказалась второго худшего исполнителя, после саранча. Он использовал тонну процессора и памяти, чтобы генерировать довольно немыслевые номера RPS и измерения времени отклика, которые вообще не были очень точными.
Мне грустно сказать, что вещи не изменились здесь с 2017 года. Во всяком случае, артиллерия сегодня кажется немного медленнее.
В 2017 году Артиллерия может генерировать вдвое больше трафика в качестве саранча, работает на одном CPU Core. Сегодня артиллерия может генерировать только 1/3 саранда трафика, можно производить, когда оба инструмента также ограничены использованием одного ядра CPU. Отчасти это потому, что саранча улучшилось в производительности, но изменение больше, чем ожидалось, поэтому я уверен, что Артиллерийская производительность также упала. Другая точка данных, которая поддерживает, что теория — артиллерия против Цун. В 2017 году Цун был в 10 раз быстрее, чем артиллерия. Сегодня Цун в 30 раз быстрее. Я считаю, что Цун вообще не изменился в производительности, что тогда означает артиллерию намного медленнее, чем раньше (и это было не совсем быстрое возвращение).
Выступление артиллерии, безусловно, является проблемой, а усугубивающий фактор заключается в том, что артиллерия с открытым исходным кодом по-прежнему не имеет никакого вида распределенной поддержки генерации нагрузки, поэтому вы застряли с Очень Невыполнительное решение, если вы не покупаете премию Саас продукт.
Artillery.io Сайт не очень четко о том, какие различия есть между артиллерией с открытым исходным кодом и артиллерией про, но там, кажется, Changelog Только для артиллерии про, и глядя на Github repo Номер версии для Artillery Open Source составляет 1,6,0, а Pro находится на 2.2.0 в соответствии с изменением изменений. Сканирование коммитских сообщений артиллерии с открытым исходным кодом, похоже, есть в основном исправленные ошибки, а не слишком много обязуется в течение 2+ лет.
Артиллерийская команда должна приложить лучшее усилие в документировании различий между артиллерией с открытым исходным кодом и премиальным продуктом Artillery Pro, а также написать что-то об их намерениях с продуктом с открытым исходным кодом. Это медленно прекращено? Это уверенно выглядит таким образом.
Другое, что следует отметить, связанные с производительностью, заключается в том, что в наши дни артиллерии будут печатать «High-CPU» предупреждения, когда использование ЦП идет выше 80% (одного ядра), и рекомендуется никогда не превышать эту сумму, чтобы не «снизить производительность». Я обнаруживаю, что если я останусь около 80% использования ЦП, чтобы избежать этих предупреждений, артиллерия будет производить намного меньше трафика — около 1/8 Количество запросов в секунду, которую может сделать саранчу. Если я игнорирую предупреждающие сообщения и позвольте артиллерии использовать 100% одного ядра, он увеличит RPS до 1/3 из того, что может сделать саранчу. Но по стоимости довольно огромной ошибки измерения.
Все проблемы с производительностью в стороне, артиллерия также имеет хорошие стороны. Вполне подходит для CI/Automation, так как его легко использовать в командной строке, имеет простой и краткий формат конфигурации на основе YAML, плагины для генерации результатов Pass/Fail, выводы результаты в формате JSON и т. Д. И, как и ранее упомянутое, он может использовать регулярные библиотеки Nodejs, которые предлагают огромное количество функциональности, которое просто импортирует. Но все это неактуально для меня, когда инструмент выполняет путь артиллерии. Единственная ситуация, когда я бы даже Рассмотрим Использование артиллерии было бы, если мои испытательные случаи пришлось к Положитесь на несколько библиотек Nodejs, которые K6 не может использовать, но артиллерию может.
Артиллерийская резюме
Только когда-либо использую его, если вы уже продали свою душу на Nodejs (то есть, если у вас есть использовать библиотеки Nodejs).
Дрель
Сверло написано в Ржавчина Отказ Я избегал ржавчины, потому что я напуган, мне нравится это И я не хочу ничего пойти между мной и Голангом. Но это, вероятно, не в пределах объема этой статьи. То, что я хотел написать, это то, что ржавчина должна быть быстрой, поэтому мое предположение состоит в том, что инструмент тестирования нагрузки, написанный в ржавении, тоже будет быстрым.
Однако некоторые тесты, однако, быстро становится очевидным, что этот конкретный инструмент является невероятно медленный! Возможно, мне не должно было быть так быстро, чтобы включить сверла в обзоре, видя как оно вполне новое, так и еще не широко используется. Может быть, это не должно было быть серьезным усилием при создании нового инструмента? (Учитывая, что автор утверждает, что дрель был создан, потому что он хотел выучить ржаветь). С другой стороны, у него много полезных функций, таких как довольно мощный формат файла файлов конфигурации на основе yaml на основе yaml, пороги для результатов pass/fail и т. Д. Так что это делает Смотри как полуприимшие усилия для меня.
Итак — инструмент кажется довольно твердо, если простой (без сценариев). Но когда я бегу в мою тестовую настройку, он максимает четыре ядра ЦП, чтобы вызвать умозрительно низкий ~ 180 запросов/секунды. Я бежал много тестов, со многими разными параметрами, и это было лучшее число, которое я мог выжать из дрели. ЦП — это циклы расходов, как завтра нет, но есть так мало транзакций HTTP, выходящих из этого инструмента, который я мог бы, вероятно, мог бы ответить на них с помощью ручки и бумаги. Как будто это добыча биткойна между каждым HTTP-запросом! Сравните это на работу (написано в C), что делает более 50 000 рупий в той же среде, и вы видите, что я имею в виду. Сверла не совсем не является плакатом ребенка для претензии «ржавчина быстрее, чем C».
Какова точка использования скомпилированного языка, такого как ржавчина, если вы не получаете производительности из вашего приложения ?? Вы также можете использовать Python тогда. Или нет, на сайте на основе Python намного быстрее, чем это. Если цель ~ 200 RPS на моей конкретной установке теста, я мог бы, вероятно, использовать Perl! Или, черт возьми, может даже скрипт оболочки ??
Я просто должен был попробовать это. Вот скручивание
Так что этот скрипт Bash на самом деле дает буровую пробежку за свои деньги, выполняя Curl
На командной строке несколько раз одновременно. Это даже считает ошибки. С Curl-basher.sh.
Мне удается изгнать 147 RPS в моем тестовом настройке (очень стабильная 147 RPS, на которых я должен сказать), и дрель делает 175-176 RPS, поэтому он быстрее всего на 20%. Это заставляет меня задуматься о том, что фактически делает тренинги для того, чтобы потреблять столько времени процессора. Наверняка установить новую нижнюю запись для неэффективности в создании HTTP-запросов — если вы беспокоитесь о глобальном потеплении, не используйте дрель!
Срежайное резюме
Для крошечных, краткосрочные тесты нагрузки могут стоить рассмотрение дрель, или если комната немного холодно.
Jmeter.
Вот горилла 800 фунтов. JMeter — огромный зверь по сравнению с большинством других инструментов. Он стал и приобрел больший набор функций, дополнительных интеграций, дополнений, плагинов и т. Д., чем любой другой инструмент в этом обзоре. Это был «король» инструментов тестирования нагрузки с открытым исходным кодом в течение длительного времени, и, вероятно, все равно есть.
В Старые времена люди могли бы выбрать между уплатой непристойных сумм денег на лицензию HP Loadrunner, выплачивая значительную сумму денег на лицензию по лицензии какого-либо запатентованного инструмента Loadrunner-Wannabe или ничего не платить, чтобы вообще не было, чтобы использовать JMeter. Ну, также был также возможность использования Apachebench или, может быть, OpenSta или другой другой бесплатный бесплатный решение, но если вы хотите сделать серьезное тестирование нагрузки, Jmeter действительно была единственной используемой альтернативой, которая не стоила денег.
Таким образом, пользовательская база jmeter выросла и выросла, а развитие jmeter также выросла. Теперь, 15 лет спустя, Jmeter активно развивался большим сообществом дольше, чем любой другой инструмент для тестирования нагрузки, поэтому не имеет странно, что он также имеет больше возможностей, чем любой другой инструмент.
Как изначально было построено в качестве альтернативы старым, проприетарным программным обеспечением для тестирования нагрузки с 15-20 лет назад, он был разработан для того, чтобы удовлетворить ту же аудиторию, что и те приложения. Я Он был разработан для использования экспертами по тестированию нагрузки. Испытания, которые требуют много ручной работы и очень специфических знаний о доменах нагрузки. Это означает, что Jmeter не был, с самого начала, построенного для автоматического использования тестирования и разработчика, и это может быть честно ощущается при использовании этого сегодня. Это инструмент для профессионального Тестеры не для разработчиков. Он не отлично подходит для автоматического тестирования, поскольку использование командной строки неловко, параметры вывода результатов по умолчанию ограничены, она использует много ресурсов, и у него нет реальный Возможность сценариев, только некоторая поддержка для вставки логики внутри конфигурации XML.
Вероятно, поэтому JMeter теряет долю рынка до более новых инструментов, таких как Gatling, который имеет много общего с JMeter, поэтому он предлагает привлекательный путь обновления для организаций, которые хотят использовать более современный инструмент, с лучшей поддержкой сценариев и автоматизации, но Хотите сохранить свои инструменты на основе Java. В любом случае, JMeter имеет некоторые преимущества по сравнению с E.g. Гатлинг. В первую очередь это сводится к размеру экосистемы — все эти интеграции, плагины и т. Д. Я упомянули. Выступление — мудрые, они довольно похожи. JMeter был одним из самых лучших инструментов в этом обзоре, но видел его падение производительности, так что теперь это в среднем и довольно близком к (возможно, немного быстрее) Это из гатлинга.
Jmeter Summary
Самые популярные причины выбрать JMeter сегодня, если вы просто начинаете с тестирование нагрузки, если вы:
- Нужно было проверить множество различных протоколов/приложений, которые имели поддержку только Jmeter или
- Вы организация, ориентированная на Java и хотите использовать наиболее распространенные инструменты тестирования нагрузки на основе Java, или
- Вы хотите, чтобы инструмент тестирования нагрузки GUI, где вы указываете и нажмите, чтобы сделать вещи
Если никто из них не правда, я думаю, что вы лучше обслуживаются гатлингом (который довольно близко к JMeter во многих отношениях), к6 или саранчу. Или, если вам так мало равно о программировании/сценариях (написание тестов в виде кода), вы можете взглянуть на VEGEATA.
Осадка
Siege — это простой инструмент, похожий на E.G. Apachebench в том, что он не имеет сценариев и в основном используется, когда вы хотите повторно ударить один статический URL. Самая большая функция у нее есть, что у Apachebench не хватает его способность читать список URL и ударить их все во время теста. Если вам не нужна эта функция, однако, просто используйте Apachebench (или, возможно, лучше — эй) будет моим советом. Потому что осада обязана дать вам головную боль, если вы попытаетесь сделать что-то даже слегка продвинутое с ним — как выяснять, насколько быстро целевой сайт отвечает, когда вы ударили его с трафиком, или генерируете достаточно трафика, чтобы замедлить целевую систему или что-то как это. На самом деле, просто запустив его с правильным параметрами конфигурации или командной строки, хотя они не слишком много, могут чувствовать себя как какая-то игра загадочной головоломки.
Осада ненадежна, более чем в одном из способов. Во-первых, это вылетает довольно часто. Во-вторых, он замерзает даже чаще (в основном на выходе, не может сказать вам, сколько раз мне пришлось Убить -9
Это). Если вы попытаетесь, чтобы включить HTTP Heat-yellow, он вылетает или замораживает 25% времени. Я не понимаю, как HTTP Alive может быть экспериментальным в таком старом инструменте! HTTP HOTE-ALIZ сама очень старая и часть http/1.1, которая была стандартизирована 20 лет назад! Это также очень часто используется в дикой природе сегодня, и оно оказывает огромное влияние на производительность. Большинство каждой библиотеки HTTP поддерживают это. HTTP HOTE-ALIVE сохраняет соединения, открытые между запросами, поэтому соединения могут быть повторно использованы. Если вы не можете сохранить соединения, это означает, что каждый HTTP-запрос приводит к новому рукопожатию TCP и новое соединение. Это может дать вам вводящие в заблуждение результаты времени отклика (потому что в каждом запросе есть рукопожатие TCP, и в каждом запросе, а рукопожатия TCP являются медленными), и это может также привести к голоданию портов TCP на целевой системе, что означает, что тест перестанет работать после Небольшо, потому что все доступные порты TCP находятся в состоянии Close_Wait и не могут быть использованы для новых подключений.
Но, эй, вам не нужно включать странные, экзотические, экспериментальные, кровотечения, таких как http-aive, чтобы сделать сбой осады. Вам просто нужно заставить его начать нить или два слишком много, и он будет схватить или повесить очень быстро. И использует дым и зеркала, чтобы не упомянуть этот факт — у него новый предел
Директива Config, которые устанавливают крышку на MAX номер, вы можете дать -C
(совпадение) Параметр командной строки — это определяющее, сколько потоков начнется. Значение установлено на 255 по умолчанию, причем мотивация, что Apache HTTPD по умолчанию может обрабатывать только 255 одновременных подключений, поэтому используя больше, чем это будет «сделать беспорядок». Какая нагрузка подозрительно выглядящих коричневых вещей на пастбище скота. Это так бывает, что во время моего тестирования осада, кажется, становится нестабильным, когда вы устанавливаете уровень параллелизма где-то в диапазоне 3-400. Более 500. И это вылетает или много висит. Более честным было бы написать в документах, что «извините, мы не можем, казаться, создавать больше, чем X нити, или осада будет крах. Работаю над этим»
Опции/параметры/параметры осады составляют непоследовательную, неиспользуемую лоскутное нарушение и помощь иногда лгут вам. Я до сих пор не смог использовать -l
Опция (предположительно для уточнения файла журнала) Хотя длинная форма --log = x
кажется, работает как рекламируется (и делать то, что -l
не будет).
Осадьба выполняет наравне с саранчой сейчас (когда саранча работает в распределенном режиме), который не фантастически для приложения C. WRK в 25 раз быстрее, чем осады, предлагает в значительной степени одинаковую функцию, обеспечивает гораздо лучшую точность измерений и не хватает. Apachebench также намного быстрее, как это эй. Я вижу очень мало причин использования осады в эти дни.
Единственная по-настоящему позитивная вещь, которую я могу написать, это то, что осада реализовала что-то совсем умное, что большинство нехватки инструментов — коммутатор командной строки ( -C
), которые просто читают все данные конфигурации (плюс параметры командной строки), а затем распечатывают Полное конфигурация его будет использоваться при запуске теста нагрузки. Это очень хорошая особенность, что больше инструментов должна иметь. Особенно, когда есть несколько способов настройки вещей — I.E. Параметры командной строки, файлы конфигурации, переменные среды — можно сложно знать точно, какой конфигурация вы на самом деле используете.
Осаемое резюме
Беги быстро в любом другом направлении.
Цунс
Цун — наш единственный инструмент на основе ERLANG, и это было около некоторого времени. Кажется, очень стабильно, с хорошей документацией, достаточно быстрая и имеет хороший набор функций, который включает в себя поддержку распределенной генерации нагрузки и возможность протестировать несколько различных протоколов.
Это очень компетентный инструмент, основной недостаток которого, на мой взгляд, является конфиг на основе XML, аналогичный тому, что имеет Jmeter, и его отсутствие сценарий. Также как jmeter, вы можете на самом деле определить циклы и использовать условные условные и материалы внутри конфигурации XML, поэтому на практике вас может Тесты скрипта, но пользовательский опыт ужасен по сравнению с использованием реального языка, как вы можете с помощью E.G. к6 или саранчу.
Цун все еще развивается, но очень медленно. Все вообще я бы сказал, что Tsung — это полезный вариант, если вам нужно тестировать один из дополнительных протоколов, которые он поддерживает (например, LDAP, PostgreSQL, MySQL, XMPP/Jabber), где вы можете иметь только выбор между JMeter или Tsung ( И из этих двух я предпочитаю Цун).
Цун Резюме
Попробуйте, если вы вентилятор Erlang.
скручивание
Да хорошо.
Глава 3: Обзор производительности и ориентиры
Тестирование нагрузки может быть сложно, потому что довольно распространено, что вы столкнулись с какой-то проблемой производительности на Сторона поколения нагрузки Это означает, что вы измеряете способность этих систем генерировать трафик, а не способность целевых систем для ее обращения. Даже очень опытные профессионалы тестирования нагрузки регулярно попадают в эту ловушку.
Если у вас недостаточно мощности генерации нагрузки, вы можете видеть, что ваш тест нагрузки становится невозможным перейти выше определенного количества запросов в секунду, или вы можете увидеть, что измерения времени отклика становятся совершенно ненадежными. Обычно вы увидите оба происходящих, но вы можете не знать, почему и по ошибке обвиняют в плохой целевой системе для плохой и/или ошибочной производительности, которую вы видите. Тогда вы можете попытаться оптимизировать ваш уже оптимизированный код (потому что ваш код быстрый, конечно) или вы будете кричать на некоторое плохое коллеги, у которых нулевые линии кода в горячих путях, но это было единственным Невыполнительный код вы можете найти во всем репо. Затем сотрудник становится обиженным и воодушевляет вашу мышь, чтобы получить даже, что начинает война в офисе, и прежде чем узнать ее, вся компания не имеет бизнеса, и вы должны пойти на новую работу в Oracle. Какую отходы, когда все, что вам нужно было сделать, было убедиться, что ваша система генерации нагрузки была до своей задачи!
Вот почему я думаю, что очень интересно понять, как выполняют инструменты тестирования нагрузки. Я думаю, что все, кто использует инструмент тестирования нагрузки, должен иметь некоторые базовые знания о его сильных и слабостях, когда речь идет о производительности, а также иногда убедиться, что их настройка тестирования нагрузки может генерировать объем трафика, необходимого для правильной загрузки целевой системы Отказ Плюс здоровый край.
Тестирование тестирующих инструментов
Хороший способ тестирования тестирующих инструментов — не проверять их на Ваш код, но на какой-то сторонне, что обязательно будет очень высоким. Я обычно поднимаю сервер Nginx, а затем я загружаю тест, выбирая по умолчанию «Добро пожаловать на Nginx». Это важно, хотя использовать инструмент, как E.G. верх
Чтобы отслеживать использование CPU NGINX при тестировании. Если вы видите только один процесс, и увидите его, используя близко к 100% процессорам, это означает, что вы можете быть связаны с целевой стороной. Затем вам нужно перенастроить Nginx, чтобы использовать больше рабочих потоков.
Если Вы видите несколько процессов Nginx, но только один использует множество процессоров, это означает, что ваш инструмент тестирования нагрузки только разговаривает с этим конкретным работником. Тогда вам нужно выяснить, как сделать инструмент открывать несколько подключений TCP и запросы на запросы в параллелле.
Задержка сети Также важно учитывать, поскольку он устанавливает верхний предел на количество запросов в секунду, вы можете протолкнуть. Если сетевое кольцевое управление составляет 1 мс между сервером A (где вы запускаете инструмент тестирования нагрузки), а сервер B (где сервер Nginx является), и вы используете только одно соединение TCP для отправки запросов, теоретический максимальный максимум вы сможете достичь 000 запросов в секунду. В большинстве случаев это означает, что вы захотите, чтобы ваш инструмент тестирования нагрузки использовать множество подключений TCP.
Всякий раз, когда вы попадаете в предел, и не могу продвигаться через больше запросов/во-вторых, вы пытаетесь выяснить, какой ресурс у вас выберете. Монитор CPU и использование памяти на обоих поколении нагрузки и целевыми сторонами с помощью какого-либо инструмента, такого как верх
Отказ
Если CPU в порядке с обеих сторон, экспериментируйте с количеством одновременных сетевых подключений и см. Если бы больше поможет вам увеличить пропускную способность RPS.
Другой вещь, которую легко пропустить, это сеть пропускная способность . Если, скажем, страница по умолчанию nginx требует передачи 250 байтов для загрузки, это означает, что если серверы подключены через ссылку на 100 Мбит/с, теоретическая максимальная скорость RPS будет около 100 000 000, разделенных на 8 (биты на байт) Разделен на 250 =>, 000 RPS. Хотя это очень оптимистичный расчет — накладные расчета протокола сделают фактическое число намного ниже, поэтому в случае, когда я начал беспокоить пропускную способность, была проблема, если я увидел, что я мог бы продвигать максимальные 30 000 RPS или что-то в этом роде. И, конечно, если вы будете загружать некоторые более крупные ресурсы, как E.g. Файл изображения, этот теоретический номер MAX RPS может быть намного ниже. Если вы подозрительны, попробуйте внести изменения в размеры файла, который вы загружаете и посмотрите, меняет ли он результат. Если вы удвоите размер и получите половину RPS, вы знаете, вы ограничены пропускной способностью.
Наконец, сервер память может быть проблемой также. Обычно, когда у вас заканчивается память, это будет очень заметно, потому что большинство вещей просто перестанут работать, пока ОС отчаянно пытается уничтожить вторичное хранилище, используя его как RAM (I.E. замена или перемагивание).
После некоторых экспериментов вы точно узнаете, что делать, чтобы получить самый высокий номер RPS из вашего инструмента тестирования нагрузки, и вы узнаете, что его максимальная мощность генерации трафика находится на текущем оборудовании. Когда вы знаете эти вещи, вы можете начать тестирование реальный Система, которую вы хотели бы проверить, и будьте уверены, что всякий раз, когда вы видите, например, Конечная точка API, которая не может сделать больше, чем X запросы/секунды, вы сразу же узнаете, что это связано с чем-то на целевой стороне вещей, а не сторона генератора нагрузки.
Эти ориентиры
Вышеуказанная процедура более или менее то, что я прошел при тестировании этих инструментов. Я использовал небольшой, без негоless, 4-ядерный сервер Celeron, работающий Ubuntu 18.04 с 8 ГБ оперативной памятью как машина для генератора нагрузки. Я хотел что-то, что было многоядерным, но не слишком сильным. Важно было важно, чтобы система целевой/раковины можно обрабатывать Больше Движение, чем генератор нагрузки, смог генерировать (или я не был бы сравнить сторону генерации нагрузки — инструменты).
Для цели я использовал 4 ГГц I7 IMAC с 16G RAM. Я использовал одну и ту же машину, что и рабочая машина, запуская некоторые окна терминала на нем и имея открытую электронную таблицу Google в браузере, но убедившись, что ничего не происходило во время проведения тестов. Поскольку эта машина имеет 4 очень быстрые ядра с гипермидром (способным запустить 8 вещей в параллелле), должна быть емкость, чтобы посмотреть, но быть на безопасной стороне, я повторил все тесты несколько раз в разных точках, просто чтобы убедиться, что Результаты несколько стабильны.
Машины были подключены к тому же физическому переключанию LAN, через Gigabit Ethernet.
Практические тесты показали, что цель была достаточно мощной, чтобы проверить все инструменты, но, возможно, один. WRK удалось протолкнуть более 50 000 RPS, и это сделало 8 рабочих Nginx на целевой системе, потребляют около 600% процессора. Может быть, Nginx не может получить гораздо больше процессора, чем (учитывая, что использование 800% должно быть абсолютным теоретическим максимальным максимумом на 4-ядер I7 с гипертерторингом) Но я думаю, что это не имеет значения, потому что WRK в своем классе, когда дело доходит до поколения трафика. Нам не нужно выяснить, будет ли WRK в 200 раз быстрее артиллерии, или только в 150 раз быстрее. Важно показать, что целевая система может справиться с некоторым очень высоким номером RPS, что большинство инструментов не могут достичь, потому что тогда мы знаем, что мы на самом деле являются Тестирование стороны генерации нагрузки и не целевой системы.
Необработанные данные
Существует электронная таблица с необработанными данными, плюс текстовые комментарии, от всех прогон тестов. Больше тестов, чем они в электронной таблице были запущены, например, — например, я провел много тестов, чтобы выяснить идеальные параметры для использования для тестов «Макс RPS». Цель состояла в том, чтобы покраснеться как многие RPS, как и бесчеловечно, от каждого инструмента, и для того, чтобы некоторые исследовательские тестирования требовались. Также всякий раз, когда я чувствовал необходимость, чтобы результаты казались стабильными, я снова запустил набор тестов и сравните с тем, что я записал. Я рад сказать, что в результатах обычно было очень мало колебаний. Как только у меня есть проблема с все Испытания внезапно производят номера производительности, которые были замечательно ниже, чем они раньше. Это произошло независимо от того, какой инструмент использовался, и в конечном итоге привел меня к перезагрузке машины для генератора нагрузки, которая решила проблему.
Необработанные данные из испытаний можно найти здесь
Что я пытался выяснить
Максимальная способность генерации трафика
Сколько запросов в секунду может генерировать каждый инструмент в этой лабораторной настройке? Здесь я пробовал работать с большинством доступных параметров, но в первую очередь callence (сколько потоков используют инструмент, и сколько TCP-соединений) и того, насколько вроду, чтобы включить HTTP-Alive, отключение вещей, который сделал это, что требовало много процессора (может быть , и т.д. Цель состояла в том, чтобы погрузиться как можно больше запросов в секунду от каждого инструмента, на любой затрат !!
Идея состоит в том, чтобы получить какой-то базовый уровень для каждого инструмента, который показывает, насколько эффективным инструмент, когда дело доходит до получения сырья трафика.
Использование памяти на VU
Несколько из инструментов являются довольно память, и иногда использование памяти также зависит от размера теста, с точки зрения виртуальных пользователей (VUS). Высокое использование памяти на VU может помешать людям бегать крупномасштабные тесты с помощью инструмента, поэтому я думаю, что это интересная метрика производительности для измерения.
Использование памяти на запрос
Некоторые инструменты собирают много статистики по всему тесту нагрузки. В первую очередь, когда предоставляются HTTP-запросы, обычно хранятся различные метрики времени транзакции. В зависимости от именно то, что хранится, и как, это может потреблять большие объемы памяти и быть проблемой для интенсивных и/или длительных тестов.
Точность измерений
Все инструменты измеряют и отчитывают время отклика транзакций во время теста нагрузки. В этих измерениях всегда будет определенная степень неточности — по нескольким причинам — но особенно когда сам генератор нагрузки — это немного работы, рекомендуется видеть довольно большое количество дополнительных задержек, добавленных к измерениям времени отклика. Полезно знать, когда вы можете доверять измерениям времени отклика, о котором сообщается ваш инструмент тестирования нагрузки, и когда вы не можете, и я пытался понять это для каждого из различных инструментов.
Максимальная способность генерации трафика
Вот диаграмма, показывающая номера Max RPS, которые я мог бы выйти из каждого инструмента, когда я действительно вытащил все остановки, и их использование памяти:
Довольно очевидно, что УНК не имеет реальной конкуренции здесь. Это зверь, когда дело доходит до создания трафика, поэтому, если это все, что вы хотите — большое количество HTTP-запросов — загрузка (и компиляция) Делать Вы не будете недовольны!
Но, будучи потрясающим запросом генератора, WRK определенно не идеален для всех видов использования (см. Обзор), поэтому интересно посмотреть, что случилось с другими инструментами. Давайте удалим WRK с графика, чтобы получить лучший масштаб:
Перед обсуждением этих результатов я хотел бы упомянуть, что три инструмента были запущены в режимах не по умолчанию для создания максимально возможных номеров RPS:
Артиллерия
Артиллерия была запущена с параллелизмом, достаточно высоким, чтобы заставить его использовать полный CPU Core, который не рекомендуется разработчиками артиллерий и результаты High-CPU предупреждения от артиллерии. Я обнаружил, что использование полного ядра CPU увеличило скорость запроса, по существу, всего более 100 RPS при запуске CPU при температуре ~ 80% до 300 RPS, когда на 100% использовании CPU. Номер RPS по-прежнему недопустимо, конечно, и, как и, подобно артиллерию FAQ, и, как будто мы также видим, что в тестах точности отклика, измерения времени отклика, вероятно, будут в значительной степени непригодны, когда артиллерия сделана для использования всего одного ядра CPU Отказ
к6.
K6 был запущен с - Комплектемость - режим = база
Опция командной строки, которая отключает новые функции JavaScript, заканчивая вас старым ES5 для ваших сценариев. Это приводит к снижению использования памяти ~ 50% и общего ускорения A ~ 10%, что означает, что скорость MAX RPS идет вверх от ~ 10k до ~ 11k. Не огромное значение, и я бы сказал, что если у вас нет проблем с памятью, она не стоит использовать этот режим при запуске K6.
Сапуль
Саранчала была запущена в распределенном режиме, что означает, что 5 экземпляров саранча были: один основной экземпляр и четыре рабыных экземпляра (один раб для каждого ядра CPU). Саранча — это однопоточное, поэтому не может использовать более одного ядра CPU, что означает, что вы есть Чтобы распределить генерацию нагрузки по нескольким процессам, чтобы полностью использовать весь CPU на Multi-CPU Server (они должны действительно интегрировать режим Master/Slave в сам приложение, чтобы он автоматически обнаружил, когда машина имеет несколько процессоров и запускает несколько процессов по умолчанию ). Если бы у меня был саранча только в одном случае, он мог бы создать только ~ 900 RPS.
Мы также использовали новую библиотеку FastHttPlocust для испытаний на саранча. Эта библиотека в 3-5 раз быстрее, чем старая библиотека HTTPlocust. Тем не менее, использование это означает, что вы теряете некоторые функциональные возможности, что HTTPLOCUSUSE имеет, но какие FASTHTTPLOCUSUSUSE не так.
Что изменилось с 2017 года?
Я должен сказать, что эти результаты сначала сделали меня немного запутанным, потому что я проверил большинство этих инструментов в 2017 году и ожидал, что выступление будет в значительной степени то же самое. Абсолютные номера RPS не сопоставимы с моими предыдущими тестами, конечно, потому что я использовал еще одну тестовую настройку, но я ожидал, что отношения между инструментами оставаться примерно одинаковыми: E.G. Я думал, что JMeter все равно будет одним из самых быстрых инструментов, и я думал, что артиллерия все равно будет быстрее, чем саранча, когда он пробежал на одном ядре CPU.
JMeter медленнее!
Ну, как видите, производительность jmeter кажется довольно в среднем сейчас. Из моего тестирования кажется, что Jmeter упал на производительность примерно на 50% между версиями 2.3 и тот, который я тестировал сейчас — 5.2.1. Может быть, это проблема JVM. Я проверен с OpenJDK 11.0.5 и Oracle Java 13.0.1, и оба выполнялись в значительной степени то же самое, поэтому кажется, что вряд ли это связано с более медленным JVM. Я также пытался поднять -Xms
и -Xmx
Параметры, которые определяют, сколько памяти JVM может выделить, но это тоже не повлияло на производительность.
Артиллерия теперь лечательно медленная, а саранча почти приличная!
Что касается артиллерии, это также, похоже, около 50% медленнее, чем два года назад, что означает, что теперь это так же медленно, как саранча было два года назад, когда я бесконечно сжимал о том, как медленно что Инструмент был. И саранчу? Это один инструмент, который имеет существенный Улучшено Производительность с 2017 года. Это сейчас примерно в 3 раза быстрее, чем он вернулся тогда, благодаря своей новой библиотеке HTTP FastHttPloCust. Это означает, что проигрывает небольшую функциональность, предлагаемую старую библиотеку HTTPlocust (которая основана на самых удобных в библиотеке запросов Python), но прирост производительности был действительно хорошим для саранча, я думаю.
Осада медленнее!
Осада не было очень быстрым инструментом два года назад, хотя и написана в C, но каким-то образом его производительность, кажется, сократила дальше между версией 4.0.3 и 4.0.4, чтобы теперь он медленнее, чем саранча на основе Python, когда последнее Запустите в распределенном режиме и можете использовать все ядра CPU на одной машине.
Сверло очень, очень медленно
Сверла написана в ржавчине, поэтому должно быть довольно быстро, и это хорошо использует все процессорные ядра, которые хранятся очень заняты во время теста. Никто не знает, что эти сердечники делают, однако, потому что дрель только удается производить невероятно читать 176 RPS! Это касается артиллерии, но артиллерия использует только один CPU Core, в то время как дрель использует четыре! Я хотел посмотреть, может ли шеверскрипс генерировать столько дорожного движения в качестве дрель. Ответ был «Да, в значительной степени». Вы можете попробовать сами: скручивание
Вегета, наконец, может быть оценена, и это не плохо!
Вегета не предложила контролировать параллелизм, что ему трудно сравнить с другими инструментами, поэтому в 2017 году я не включал его в тесты на тесты. Теперь, хотя он получил -Макс-рабочие
Переключатель, который можно использовать для ограничения параллелизма и который вместе с -RATE = 0
(неограниченное значение) позволяет мне проверить его с тем же уровнем параллелизма, что и для других инструментов. Мы видим, что вегетация довольно выработка — она оба порождает много трафика и использует небольшую память.
Суммируя возможности генерации трафика
Остальные инструменты предлагают примерно одинаковую производительность, что и в 2017 году.
Я бы сказал, что если вам нужно создать огромное количество трафика, вам может быть лучше обслуживаться одним из инструментов на левой части графика, поскольку они более эффективны, но большую часть времени, вероятно, более чем достаточно быть в состоянии генерировать пару тысяч запросов/вторую И это то, что может сделать гатлинг или осаду или распределенную настройку саранча. Тем не менее, я бы порекомендовал против артиллерии или сверла, если вы не мазохиста или не хотите дополнительную проблему. Будет сложно генерировать достаточно трафика с теми, а также сложно интерпретировать результаты (по крайней мере, с артиллерии), когда измерения получают перекошенные, потому что вы должны использовать каждую унцию CPU на вашем генераторе (ы) нагрузки.
Использование памяти
Как насчет использования памяти тогда? Давайте снова подтянем эту таблицу:
Большая память свиньи — Цун, jmeter, gatling и саранча. Особенно наши дорогие приложения Java — Jmeter и Gatling — действительно наслаждайтесь их памятью и хотят многое. Саранча не будет так плохо, если бы ему не пришлось бегать в нескольких процессах (потому что это однопотоковое), которое потребляет больше памяти. Многопоточное приложение может обмениваться памятью между потоками, но несколько процессов вынуждены сохранять идентичные наборы данных процессов партии.
Эти цифры дают указание о том, как голодные на память инструменты, но они не показывают всей правды. В конце концов, что сегодня 500 МБ? Вряд ли какие-либо серверы приходят без пары ГБ ОЗУ, поэтому 500 МБ никогда не должно быть большим из проблем. Однако проблема в том случае, если использование памяти растет при масштабов ваших тестов. Две вещи имеют тенденцию делать использование памяти растут:
- Длинные эксплуатации, которые собирают много результатов данных
- Наращивая количество потоков VUS/выполнения
Чтобы исследовать эти вещи, которые я управлял двумя люксами тестов для измерения «Использование памяти на VU» и «Использование памяти на запрос». Я на самом деле не пытался рассчитать точное использование памяти на Vu или запросить, но бегал тесты с увеличением количества запросов и VUS, а также записанное использование памяти.
Использование памяти на уровень ВУ
Здесь мы можем увидеть, что происходит, когда вы масштабируете количество виртуальных пользователей (VUS). Обратите внимание, что показанные номера являются средний Использование памяти в течение очень короткого (10 секунд) теста. Образцы были взяты каждую секунду во время теста, так как обычно 9-10 образцов. Этот тест должен быть действительно сделан с большим количеством VUS, может быть, идет от 1ВУ до 200 ВС или что-то, и у VUS не так много Таким образом, вы не получаете слишком много данных результатов. Тогда вы действительно посмотрели, как инструменты «масштабируются», когда вы пытаетесь имитировать больше пользователей.
Но мы можем увидеть здесь некоторые вещи. Пара инструментов, кажется, неизвестен, когда мы изменяем номер VU, что указывает на то, что либо они не используют много дополнительной памяти на Vu, либо они выделяют память в кусках, и мы не настроили достаточно VUS в этом тесте заставить их выделить больше памяти, чем они начались. Вы также можете увидеть, что с таким инструментом, как E.G. JMeter Не вряд ли, что память может стать проблемой, когда вы пытаетесь увеличить ваши тесты. Tsung и Artillery также выглядят так, как будто они могут в конечном итоге использовать тонну памяти, если вы пытаетесь значительно увеличить уровень VU с этих очень низких уровней.
Использование памяти на запрос объем
Для этого теста я провел все инструменты с одинаковыми параметрами параллелизма, а разные тестовые длительности. Идея состояла в том, чтобы заставить инструменты собирать много результатов данных и посмотреть, сколько использования памяти выросло вовремя. Сюжет показывает, сколько память использует использование каждого инструмента, когда он идет от сохранения результатов транзакции 20K до 1 миллиона результатов.
Как видно, WRK на самом деле не использует никакой памяти, чтобы говорить. Опять же, он не хранит много данных результатов либо, конечно. Осада также кажется довольно скромной памятью, но мы не смогли проверить с 1 миллионами транзакций, потому что осада прервала тест, прежде чем мы сможем достичь 1 миллиона. Не совсем неожиданные, так как осада отправляет только один запрос на разъем TCP — затем он закрывает розетку и открывает новый запрос на следующий запрос. Это уставившись в систему доступных локальных портов TCP. Возможно, вы можете ожидать неудачно, если вы используете осаду.
Цун и артиллерия, кажется, выращивают свое использование памяти, но не ужасно быстро, так как тест работает. к6. и эй, у вас намного крутые кривые, и там вы могли бы в конечном итоге бежать в беде, для Очень Длинные бегущие тесты.
Опять же, огромные память свиньи — это приложения Java: jmeter и gatling. JMeter выходит с 160 МБ до 660 МБ, когда он выполнил 1 миллион запросов. И обратите внимание, что это средний Использование памяти на протяжении всего теста. Фактическое использование памяти в конце теста может быть вдвое больше. Конечно, это может быть, что JVM просто не собирает мусор, пока оно не нужно, не уверена, как это работает. Если это так, однако, было бы интересно посмотреть, что происходит с производительностью, если JVM на самом деле должен сделать довольно большую большую коллекцию мусора в какой-то момент во время теста. Что-то для кого-то, чтобы расследовать дальше.
Ох и дрель за исключением из этих испытаний. Просто слишком много времени, чтобы сгенерировать 1 миллион транзакций, используя дрель. Мои дети будут расти, пока тест бежал.
Точность измерений
Иногда, когда вы запускаете тест нагрузки и выставляете целевую систему на множество трафика, целевая система начнет генерировать ошибки. Транзакции потерпят неудачу, и сервис целевой системы должен был предоставить, не будут доступны больше, к некоторым (или всех) пользователям.
Однако это обычно не то, что происходит Первый Отказ Первая плохая вещь, которая имеет тенденцию происходить, когда система подвергается тяжелой нагрузке, заключается в том, что она замедляется. Или, возможно, точнее, все становится очередным и Сервис пользователей замедляется. Сделки не будут завершены так быстро, как и раньше. Это обычно приводит к худшему пользователю, даже если услуга все еще работает. В случаях, когда эта деградация производительности невелика, пользователи будут немного менее довольны услугами, что означает, что больше пользователей отскоки, Churn или просто не используют предлагаемые услуги. В тех случаях, когда деградация производительности является серьезным, эффекты могут быть более или менее полной потерей выручки для E.G. Сайт электронной коммерции.
Это означает, что очень интересно измерить время отклика транзакций. Вы хотите убедиться, что они в пределах приемлемых лимитов на ожидаемых уровнях трафика, отслеживают их, поэтому они не регрессируют, поскольку новый код добавляется в вашу систему.
Все инструменты тестирования нагрузки попробуйте Чтобы измерить время отклика транзакций во время теста нагрузки и предоставить вам статистику о них. Тем не менее, всегда будет ошибка измерения. Обычно в форме дополнения к фактическому времени отклика реальный клиент будет испытать. Или поставить другой способ, инструмент тестирования нагрузки, как правило, будет сообщать худшее время отклика, чем то, что увидит настоящий клиент.
То, насколько велика эта ошибка, варьируется. Это варьируется в зависимости от использования ресурсов на стороне генератора нагрузки — например Если ваша машина для генератора нагрузки использует 100% от его процессора, вы можете поспорить, что измерения времени отклика будут довольно DONKY. Но это также варьируется довольно много, между инструментами — один инструмент может проявлять гораздо более низкие ошибки измерений в целом, чем другой инструмент.
Как пользователь, я бы хотел, чтобы ошибка была настолько малой, потому что, если она большая, она может замаскировать регрессию по времени отклика, которые я ищу, заставляя их труднее найти. Кроме того, он может ввести в заблуждение, думая, что моя система не отвечает достаточно быстро, чтобы удовлетворить моих пользователей.
Вот график, показывающий точенное время отклика на различных уровнях VU/параллелизма для различных инструментов:
Как видно, один инструмент с военнослужащим именем увеличивает масштаб графики настолько, что становится трудно сравнивать остальные инструменты. Поэтому я удаляю преступника, уже условшись его в другом месте в этой статье. Теперь мы получаем:
Хорошо, это немного лучше. Итак, сначала, может быть, какая-то информация о том, что делает этот тест. Мы запускаем каждый инструмент на установленном уровне параллелизма, генерируя запросы как можно быстрее. Я Нет задержки между запросами. Скорость запроса варьируется — от 150 RPS до 45 000 RPS в зависимости от того, какой инструмент и какой уровень параллелизма.
Если мы начнем с того, что сначала посмотрев на самый скучный инструмент — WRK — мы видим, что его медиана (все эти времена отклика — Medians или 50-е процентили) Время отклика идет от ~ 0,25 мс до 1,79 мс, когда мы увеличиваем ВУ Уровень от 10 до 100. Это означает, что на уровне параллелизма 100 (100 одновременных связей соединений) и 45 000 RPS (что было то, какой WRK достигается в этом тесте), реальное время отклика сервера ниже 1,79 мс. Так что все, что сообщает об инструментах, на этом уровне, то, что выше 1,79 мс, в конечном итоге, в конечном итоге будет задержка, добавленная самим инструментом нагрузки, а не целевой системой.
* Почему Медиана Время отклика? , вы можете спросить. Почему не более высокий процентиль, который часто более интересна. Это просто потому, что это единственная метрика (кроме «максимального времени отклика»), что я могу выбраться из все инструменты. Один инструмент может сообщать 90 и 95-й процентили, а другой отчет 75-й и 99-й. Несмотря ни на что не сообщается не среднее (среднее) время отклика (я знаю, что это ужасная метрика, но это очень распространено).
Инструменты в середине поля здесь отзывываются 7-8 мс срединных времен отклика на уровне 100 ВС, что составляет ~ 5-6 мс выше 1,79 мс, сообщают WRK. Это делает разумным, чтобы предположить, что средний инструмент добавляет около 5 мс к сообщенному времени отклика на этом уровне параллелизма. Конечно, некоторые инструменты (например, Apachebench или Hey) удается создать грузовик на http-запроса, пока все еще не добавляя так много до времени отклика. Другие — как артиллерия — лишь удается создавать очень небольшое количество http-запросов, но все равно добавляют очень большие ошибки измерений при этом. Давайте посмотрим на диаграмму, показывающую номер RPS против среднего измерения времени отклика. И помните, что сторона сервера здесь скорее всего, более или меньше всегда в состоянии дать среднее время отклика менее 1,79 мс.
Давайте посмотрим на время отклика VS-запросы/второй (RPS) каждый инструмент генерирует, поскольку это дает представление о том, сколько работы инструмент может выполнять и по-прежнему предоставлять надежные измерения.
Опять же, артиллерия — это путь, путь за остальное, показывая огромную измерительную погрешность примерно +150 мс, одновременно может выпустить менее 300 запросов в секунду. Сравните это с WRK, который выводит 150 раз в целом трафика при производстве 1/100 ошибок измерения, и вы увидите, насколько большая разница в производительности действительно находится между лучшим и худшим инструментом выполнения.
Я знаю, что артиллерийские люди скажут: «Но это только потому, что он использовал весь ЦП, несмотря на артиллерийскую печать High-CPU предупреждения». Ну, я также провел тест, где замедлился артиллерии, поэтому эти предупреждения никогда не появлялись. Я все еще использую 100 одновременных посетителей/пользователей, но каждый из которых проводились сценарии со встроенным спирам, которые означали использование ЦП, содержалось примерно на 80%, а предупреждения были напечатаны. Скорость RPS в итоге оказалась намного хуже, конечно — было 63 RPS. Измерение времени отклика? 43,4 мс. Более +40 мс ошибка.
Таким образом, даже когда артиллерия работает «правильно» и производит удивительную 63 RPS, он все еще добавляет ошибку измерения, в 20 раз больше, чем то, что WRK добавляет, когда WRK производит около 1000 раз больше трафика. Я не проверил это, но я не буду удивлен, если Curl-Basher сделал лучше, чем артиллерия в этой категории.
Давайте удалим артиллерию из таблицы снова:
Интересно увидеть четыре инструмента, которые имеют самые высокие ошибки измерений (исключая артиллерию), выполняют совсем так: Осада, гатлинг, jmeter и саранча. Все они делают чуть менее 3000 RPS на мою настройке при моделировании 100 ВУ, и все они, кажется, добавляют аналогичные количества ошибки измерения: от 20 до 30 мс.
Jmeter был одним из более первых исполнительных инструментов в этих тестах, но кажется, что он намного меньше, так что за последние 2-3 года. Осада также немного погрузилась, и его производительность сейчас на самом деле не дает намека на то, что это инструмент, написанный в C. вместо этого, саранча на основе Python набрал и поместил себя рядом с этими другими инструментами, одинаково хороша на генерации Трафик, если не так хорош в измерении правильно.
Цун снова впечатляет. Будучи старым и не так активно поддерживаемым инструментом, его возможности генерации нагрузки вполне приличные, а измерения являются во-вторыми, нет Но WRK.
Учера просто странная.
Вегета, апара, к6 и эй, все, кажется, довольно хорошо при создании трафика, сохраняя ошибку измерения разумно низкой. Предварительное предупреждение здесь снова, но это делает меня рад видеть, что K6 в конечном итоге попавк в середине во всех этих тестах, учитывая, что он выполняет сложный логический скрипт, в то время как инструменты, которые превосходят его.
Конечное резюме
K6 Ruitz!
Или, ну, это делает, но большинство этих инструментов есть что-то для них. Они просто хороши в разных ситуациях.
- Мне не очень нравится Гатлинг , но понять, почему другие, как это в «Мне нужен более современный Jmeter».
- мне нравится Эй, В «Мне нужен простой инструмент командной строки, чтобы ударить один URL-адрес с каким-то трафиком».
- мне нравится Вегета В «Мне нужен более продвинутый инструмент командной строки, чтобы ударить несколько URL с трафиком».
- Мне не нравится Jmeter Намного вообще, но угадайте, что не разработчики могут понравиться в «Мы действительно хотим, чтобы инструмент для инструмента/графического интерфейса на основе Java, который может сделать все».
- Мне нравится к6. (Очевидно) в «автоматизированном тестировании для разработчиков» используют корпус.
- Мне нравится Саранча В «Мне очень нравится писать мои тестовые случаи в Python».
- Мне нравится WRK В «просто болотите сервер с помощью Tons запросов» уже! «Используйте случай.
Тогда у нас есть пара инструментов, которые кажутся лучше всего избежать:
- Осада просто старый, странный и нестабильный, а проект кажется почти мертвым.
- Артиллерия Супер медленный, неправильно меры, а версия с открытым исходным кодом, похоже, не продвигается вперед.
- Дрель ускоряется глобальное потепление.
Удачи!
Оригинал: «https://dev.to/k6/open-source-load-testing-tool-review-2020-5466»