Инструменты нагрузочного тестирования для разработчиков Node.js

Вот некоторые популярные инструменты стресс-тестирования Node.js:

  1. Артиллерия
  2. k6
  3. Автопушка
  4. AB (настольный компьютер Apache)

Артиллерия

Artillery — это инструмент для нагрузочного тестирования и оценки производительности с открытым исходным кодом для API, микросервисов и веб-сайтов. Он позволяет вам определять сценарии нагрузочного тестирования HTTP и запускать их на вашей целевой системе, чтобы определить ее характеристики производительности в различных условиях. Artillery предоставляет такие функции, как гибкое определение сценариев, отчеты в реальном времени и автоматическое масштабирование трафика, что делает его популярным выбором для тестирования и оптимизации производительности.

Вот пример того, как вы можете использовать Artillery для нагрузочного тестирования сервера Node.js:

  1. Установить артиллерию:
npm install -g artillery

2. Создайте файл с именем test.yml со следующим содержимым:

config:
  target: "http://localhost:3000"
  phases:
    - duration: 60
      arrivalRate: 5

scenarios:
  - flow:
    - get:
        url: "/"

Этот сценарий определяет один поток, который отправляет запрос GET на корневой URL-адрес целевой системы с постоянной скоростью поступления 5 запросов в секунду в течение 60 секунд.

3. Запустите тест:

artillery run test.yml

4. Просмотрите результаты:

Artillery создаст отчет с показателями производительности теста, включая количество запросов в секунду, время отклика и частоту ошибок.

Еще примеры:

config:
  target: "http://localhost:3000"
  phases:
    - duration: 30
      arrivalRate: 5
    - duration: 30
      arrivalRate: 10
scenarios:
  - flow:
      - post:
          url: "/api/login"
          json:
            username: "testuser"
            password: "testpassword"
          capture:
            json: "$.token"
            as: "token"
      - get:
          url: "/api/user"
          headers:
            Authorization: "Bearer {{token}}"

В этом примере Artillery выполняет тестовый сценарий, который имитирует запрос на вход в конечную точку /api/login, перехватывает ответ JSON и извлекает токен, а затем использует токен для выполнения запроса к конечной точке /api/user с заголовком Authorization. Тест будет выполняться в течение 60 секунд с двумя разными скоростями поступления: 5 запросов в секунду в течение первых 30 секунд и 10 запросов в секунду в течение следующих 30 секунд.

k6

k6 — это инструмент нагрузочного тестирования с открытым исходным кодом, призванный помочь разработчикам и инженерам по производительности тестировать производительность и масштабируемость их веб-приложений и API. k6 написан на Go и использует JavaScript в качестве языка сценариев, что упрощает его использование и обеспечивает высокий уровень гибкости и настройки.

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

k6 — популярный выбор для тестирования производительности благодаря простоте использования, универсальности и возможности интеграции с другими инструментами и службами, такими как конвейеры CI/CD, системы мониторинга и облачные платформы для нагрузочного тестирования.

Вот пример того, как вы можете использовать k6 для тестирования загрузки сервера Node.js:

  1. Установите к6:
npm install -g k6

2. Создайте файл сценария:

Создайте файл с именем test.js со следующим содержимым:

import http from "k6/http";

export default function() {
  http.get("http://localhost:3000/");
};

Этот сценарий определяет один HTTP-запрос GET к корневому URL-адресу целевой системы.

3. Запустите тест:

k6 run test.js

4. Просмотрите результаты:

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

Еще примеры:

import http from "k6/http";
import { check, sleep } from "k6";

export let options = {
  stages: [
    { duration: "30s", target: 5 },
    { duration: "30s", target: 10 },
  ],
};

export default function() {
  let res = http.post("http://localhost:3000/api/login", JSON.stringify({
    username: "testuser",
    password: "testpassword",
  }), {
    headers: {
      "Content-Type": "application/json",
    },
  });

  check(res, {
    "status is 200": (r) => r.status === 200,
    "login successful": (r) => JSON.parse(r.body).success === true,
  });

  let token = JSON.parse(res.body).token;

  res = http.get("http://localhost:3000/api/user", {
    headers: {
      Authorization: `Bearer ${token}`,
    },
  });

  check(res, {
    "status is 200": (r) => r.status === 200,
  });

  sleep(1);
}

В этом примере k6 выполняет тестовый сценарий, который имитирует запрос на вход в конечную точку /api/login, перехватывает ответ JSON и извлекает токен, а затем использует токен для выполнения запроса к конечной точке /api/user с заголовком Authorization. Тест будет выполняться в течение 60 секунд с двумя разными целевыми скоростями поступления: 5 запросов в секунду в течение первых 30 секунд и 10 запросов в секунду в течение следующих 30 секунд.

Автопушка

Autocannon — это библиотека Node.js для тестирования производительности API HTTP/1.1 и HTTP/2. Это позволяет вам быстро и легко создавать и запускать тесты для вашего API, чтобы определить его характеристики производительности, включая количество запросов в секунду, задержку и другие важные показатели. Autocannon можно использовать для тестирования производительности одной конечной точки API или для одновременного тестирования нескольких конечных точек, чтобы получить более полное представление об общей производительности вашего API.

Вот простой пример использования Autocannon в Node.js для проверки производительности конечной точки API:

  1. Установить автопушку:
npm install autocannon

2. Создайте файл сценария:

Создайте файл с именем test.js со следующим содержимым:

const autocannon = require('autocannon');

const instance = autocannon({
  url: 'http://localhost:3000/api/endpoint',
  connections: 10,
  pipelining: 1,
  duration: 10
});

instance.on('done', () => {
  console.log('Test completed.');
  console.log('Requests per second: ', instance.stats.requests);
  console.log('Latency average: ', instance.stats.latency.avg);
  console.log('Latency max: ', instance.stats.latency.max);
});

instance.run();

В этом примере мы используем Autocannon для проверки производительности конечной точки API в http://localhost:3000/api/endpoint. Мы используем 10 подключений, конвейеризируем 1 запрос за раз и запускаем тест продолжительностью 10 секунд. После завершения теста мы записываем результаты в консоль, включая количество запросов в секунду, среднюю и максимальную задержку.

Еще примеры:

Апачская скамья

Apache Bench (ab) — это простой инструмент командной строки, используемый для тестирования производительности HTTP-серверов. Он позволяет отправлять определенное количество одновременных запросов на целевой URL-адрес и измерять время ответа и другие показатели производительности, такие как количество запросов в секунду и общее время, необходимое для выполнения всех запросов. Apache Bench обычно используется для тестирования веб-серверов, тестирования производительности API и оценки общей емкости и масштабируемости сервера. Он является частью проекта Apache HTTP Server и доступен в качестве стандартного инструмента в большинстве Unix-подобных систем.

Вот пример того, как вы можете использовать Apache Bench для тестирования простого сервера Node.js:

  1. Во-первых, убедитесь, что Apache Bench установлен в вашей системе. В большинстве Unix-подобных систем он уже установлен как стандартный инструмент. Если он не установлен, вы можете установить его с помощью менеджера пакетов, такого как apt-get в Ubuntu:
$ sudo apt-get install apache2-utils

2. Запустите простой сервер Node.js на локальном хосте, порт 3000:

$ node index.js

3. В отдельном окне терминала запустите Apache Bench на сервере Node.js:

$ ab -n 1000 -c 100 http://localhost:3000/

В этом примере ab отправляет 1000 запросов к http://localhost:3000/, используя 100 одновременных подключений. Выходные данные команды будут отображать различные показатели производительности, такие как количество запросов в секунду, время, затраченное на выполнение всех запросов, среднюю и медианную задержку, а также количество невыполненных запросов.