Недавно я изучал варианты инструментов для нагрузочного тестирования.
В предыдущем проекте мы использовали Gatling, в котором вы пишете свои тесты на Scala. Это сработало, и отчеты были хорошими, но теперь, когда я в новой команде, я хотел посмотреть, что там есть.
И я искал что-то, что можно было бы использовать для написания тестов на более знакомом языке.
Инструменты, с которыми я столкнулся, были следующие:
Вряд ли кто-нибудь из команды был знаком со Scala, да и я не являюсь большим пользователем Scala. Python, наверное, язык, который я знаю лучше всего, но здесь его используют только тестировщики. Все разработчики интерфейса знают JavaScript, а специалисты по API используют Go, что больше подтолкнуло меня к k6 и Vegeta.
Между прочим, все они имеют открытый исходный код, а некоторые имеют корпоративные решения.
Вегета выглядела так, как будто со своей работой справится. По сути, это репозиторий на github с README и некоторыми инструкциями по его установке, запуску и т. Д.
k6 выглядел намного более отполированным / полнофункциональным. Вы пишете тесты на JavaScript, его вывод на консоль чистый, и он может выводиться в DataDog, Kafka и другие.
Поскольку k6 выглядел более дружелюбным в использовании, а я в любом случае более знаком с JavaScript, я решил попробовать его!
Взять k6 для вращения
Если у вас Mac, вы можете просто brew install k6
Сладкий.
У них также есть образ докера, что тоже круто, но пока я выбрал brew.
Я создал на своем компьютере папку с именем k6
.
Я создал script.js
файл и для начала следовал документации.
Вы могли заметить, что у меня есть package.json
файл. Я запустил yarn init
, чтобы инициализировать свой проект здесь, ожидая, что мне придется устанавливать пакеты. Но, видимо, заварки k6 было достаточно, и этот импорт сработал 🤷♂️
подробнее об этом позже 👀
Так или иначе…
Теперь, когда я создал script.js
файл, мне оставалось только запустить его.
$ k6 run script.js
Здесь вы можете видеть, что vus
(виртуальные пользователи) по умолчанию равно 1, как и vus_max
.
Если мы хотим увеличить эти числа, мы можем передать их как опции.
На этот раз я запустил k6 с 10 виртуальными пользователями и работал на сервере в течение 30 секунд.
Test.k6.io
Вы, наверное, заметили, что скрипт обращается к test.k6.io.
Еще отличная особенность k6 - это то, что у них есть тестовая среда, в которой вы можете запускать тесты. Если вы перейдете на http://test.k6.io, вы увидите другие URL-адреса, которые у них есть, по которым вы можете проверить разные вещи 🤯
Утверждения или «проверки»
Следующей задачей было добавить проверку, чтобы убедиться, что мы получаем ответ 200 от сервера.
Введите script2.js
.
- Я добавил комментарии, которые были в документации. Очевидно, что установочный код должен жить вне функции по умолчанию. Код виртуального пользователя должен находиться внутри функции по умолчанию.
- Помимо импорта функции
sleep
из k6, я импортировал функциюcheck
. Затем, вместо того, чтобы отбрасывать форму ответаhttp.get()
, она сохраняется вres
переменной и передается вcheck()
, где ееstatus
сравнивается с200
А теперь, когда я бегу script2.js
k6 run --vus 10 --duration 30s script2.js
🎉
Это круто!
И документация продолжается. Они различают нагрузочные тесты и стресс-тесты. Они рассказывают, как постепенно наращивать нагрузку, удерживать ее устойчиво, а затем снижать нагрузку.
Я думаю, что ребята из k6 проделали такую хорошую работу, имея опыт не только использования инструмента, но и следования их документации и взаимодействия с их тестовой средой, что я действительно хочу загрузить тест и поиграть в k6 больше .
Предостережения
В документации по k6 отмечаются два компромисса использования k6 в разделе Что не делает k6.
- Во-первых, он не запускается в браузере и, следовательно, «не отображает веб-страницы так же, как браузер». Таким образом, вы можете получить вводящие в заблуждение результаты, если переходите по URL-адресам веб-страниц, а не к конечным точкам API.
- Во-вторых, он не работает в Node, на что вначале ускользнули. Поскольку он фактически написан на Go, но позволяет писать сценарии только на JavaScript, вам нужно будет выполнить дополнительные действия, чтобы импортировать внешние модули.
А №2 объясняет, почему мне не понадобились yarn add
какие-либо пакеты npm.
И у них есть расширения VS Code ?!
И у них есть типы TypeScript, и в этом случае вы должны использовать yarn
или npm
для инициализации проекта файлом package.json
, а затем установить @types/k6
, чтобы получить intellisense в VS Code.
Мне любопытно, использовал ли кто-нибудь еще его и сталкивался ли с другими проблемами.
Но в любом случае, для нагрузочного и стресс-тестирования (в непроизводственной среде!) Этот инструмент k6 выглядит супер круто!