Может, вы не удивлены, что это JS позволяет нам создавать практически любое приложение для любой платформы.
Но я никогда раньше не слышал, что это использование, чтобы писать JavaScript Code Чтобы выполнить нагрузку и тестирование производительности, и даже лучше собрать метрики из этих тестов, чтобы понять поведение приложения.
Инструмент, который дал нам такую силу, — 🔧 K6 🔧.
Но что это именно? От K6 Официальный сайт :
K6-это ориентированный на разработчиков, бесплатный и инструмент для тестирования нагрузки с открытым исходным кодом, созданный для тестирования производительности продуктивным и приятным опытом.
K6 написан в Go но разоблачает JavaScript API позволяя нам писать код JavaScript для взаимодействия.
Установка 💾
Есть много способов получить бинар K6, продолжить их Официальный гид И получить один из них.
Вы также можете следовать это руководство Чтобы запустить первый тест на загрузку даже в локальной среде.
Давайте использовать K6 сравнить производительность из простого API, написанного в Голанге, а другой — в Nodejs.
- Приложение Node использует хорошо известный
Expressjs
Структура ➡ app.js - Приложение GO использует
радужная оболочка
Структура ➡ Main.go
Просто чтобы прояснить, приложение будет потреблять значительные ресурсы ЦП, являющиеся недостатком для API Nodejs 😬
Оба приложения будут рассчитать nth Значение последовательности Фибоначчи, прошедшее как PATH PARAM, например, apiurl/fibonacci/7
должен вернуться:
{ "fibonacci": 34 }
Есть конечная точка проверки здоровья: Apiurl/HC
Я призываю вас позвонить в эту конечную точку вручную на второй минуте испытания нагрузки.
Тестовый сценарий 📋
Мы тестируем только конечную точку API в изоляции, чтобы увидеть, как тенденции производительности конечной точки с течением времени. Сценарий следующим:
- На первой минуте теста система будет нарастать до достижения 100 виртуальных пользователей.
- Каждый виртуальный пользователь сделает HTTP -запрос в конечную точку:
apiurl/fibonacci/9999999
каждые 100 мс. - Удерживая шаг
2
в течение двух минут. - В последнюю минуту виртуальные пользователи увеличит до 0.
- K6 потребует 4 минуты, чтобы запустить тест, описанный выше.
- Тест имеет простую цель, объявленную в объекте «Опции»:
http_req_duration: ['p (95) <1000']
Что означает, что 95% сделанных запросов должны занять менее 1 секунды.
k6-test.js
import http from 'k6/http'; import { sleep } from 'k6'; const SLEEP_DURATION = 0.1; export let options = { stages: [ { duration: "1m", target: 100 }, { duration: "2m", target: 100 }, { duration: "1m", target: 0 } ], thresholds: { http_req_duration: ['p(95)<1000'] // 99% request must complete below 1s } } const BASE_URL = __ENV.API_BASE === "GOLANG" ? "http://localhost:8080" : "http://localhost:9090" const HEADERS = { "Content-Type": "application/json" } export default () => { http.get(`${BASE_URL}/fibonacci/9999999`); sleep(SLEEP_DURATION); }
Запуск нагрузочного теста с K6 💪
1.clone 📜 Пример кода 📜 и выполнить Docker-Compose Up
Анкет Оба приложения разоблачат эти конечные точки:
Голанг | 8080 | /hc /fibonacci /n |
Nodejs | 9090 | /hc /fibonacci /n |
2. Вы можете запустить оба теста на параллельном открытии двух терминалов или одного в то время, это зависит от вас.
- Чтобы запустить нагрузочный тест Golang в папке Project Root, выполните:
k6 run ./k6-test.js -e
- И запустить тест на загрузку Nodejs:
k6 run ./k6-test.js
Я знаю, что это действительно простой тест Но мне нравится помнить эту фразу:
Простое тестирование лучше, чем нет тестирования
K6 вывод для Nodejs
приложение
K6 вывод для Голанг
приложение
- Вы можете позвонить в конечную точку проверки здоровья обоих приложений во время теста нагрузки, чтобы проверить время ответа.
1. HTTP -запрос на Nodejs принимает в среднем 15S
и Golang App 237 мс
Анкет 2. Должна эта продолжительность запроса HTTP, за то же количество времени, когда Golang обращается 52103
больше запросов, чем Nodejs.
Голанг выиграл, но как? 🤔
Анализируя статистику использования контейнеров во время тестов, вы можете увидеть, как контейнер Golang использует более одного процессора для обработки запросов, в то время как Nodejs использует только один процессор.
Статистика Docker
Еще один важный момент в том, что Голанг
Использует отдельную goroutine per http -запрос, обрабатывающую запросы параллелитровым способом.
В случае, если вы выполнили оба теста, выяснит, что GO превосходит Nodejs в Этот сценарий Анкет Но почему? Оба приложения имеют одну основную задачу, которая состоит в том, чтобы вычислить NTH -последовательность числа Fibonacci, и в зависимости от N -го числа задача может потреблять значительные ресурсы процессора, а NodeJS не предназначен для этого. Поэтому, используя K6, вы сможете поймать регрессию производительности и проблемы раньше. Вы также можете написать стрессовые тесты, чтобы проверить, постепенно ли приложение увеличивает свою инфраструктуру, позволяя вам создавать устойчивые системы и надежные приложения.
Оригинал: «https://dev.to/chseki/load-test-with-javascript-1f64»