Недавно я изучал варианты инструментов для нагрузочного тестирования.

В предыдущем проекте мы использовали 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.

  1. Я добавил комментарии, которые были в документации. Очевидно, что установочный код должен жить вне функции по умолчанию. Код виртуального пользователя должен находиться внутри функции по умолчанию.
  2. Помимо импорта функции sleep из k6, я импортировал функцию check. Затем, вместо того, чтобы отбрасывать форму ответа http.get(), она сохраняется в res переменной и передается в check(), где ее status сравнивается с 200

А теперь, когда я бегу script2.js

k6 run --vus 10 --duration 30s script2.js

🎉

Это круто!

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

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

Предостережения

В документации по k6 отмечаются два компромисса использования k6 в разделе Что не делает k6.

  1. Во-первых, он не запускается в браузере и, следовательно, «не отображает веб-страницы так же, как браузер». Таким образом, вы можете получить вводящие в заблуждение результаты, если переходите по URL-адресам веб-страниц, а не к конечным точкам API.
  2. Во-вторых, он не работает в Node, на что вначале ускользнули. Поскольку он фактически написан на Go, но позволяет писать сценарии только на JavaScript, вам нужно будет выполнить дополнительные действия, чтобы импортировать внешние модули.

А №2 объясняет, почему мне не понадобились yarn add какие-либо пакеты npm.

И у них есть расширения VS Code ?!

И у них есть типы TypeScript, и в этом случае вы должны использовать yarn или npm для инициализации проекта файлом package.json, а затем установить @types/k6, чтобы получить intellisense в VS Code.

Мне любопытно, использовал ли кто-нибудь еще его и сталкивался ли с другими проблемами.

Но в любом случае, для нагрузочного и стресс-тестирования (в непроизводственной среде!) Этот инструмент k6 выглядит супер круто!