Рубрики
Uncategorized

Нагрузочный тест с JavaScript

JavaScript везде! Может быть, вы не удивлены, узнав, что JS позволяет нам строить n … Tagged с JavaScript, Testing, WebDev, DevOps.

Может, вы не удивлены, что это 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 в изоляции, чтобы увидеть, как тенденции производительности конечной точки с течением времени. Сценарий следующим:

  1. На первой минуте теста система будет нарастать до достижения 100 виртуальных пользователей.
  2. Каждый виртуальный пользователь сделает HTTP -запрос в конечную точку: apiurl/fibonacci/9999999 каждые 100 мс.
  3. Удерживая шаг 2 в течение двух минут.
  4. В последнюю минуту виртуальные пользователи увеличит до 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»