TL;DR
- Artillery = Node.js нагрузочное тестирование с YAML сценариями
- Определяй виртуальных пользователей, фазы (ramp-up, sustained load), think time
- Встроенные: HTTP, WebSocket, Socket.io поддержка
- Плагины: кастомные протоколы, метрики, репортеры
- CLI-first дизайн, идеален для CI/CD пайплайнов
Идеально для: Node.js команд, современных веб-приложений, разработчиков, предпочитающих code-as-config Пропусти, если: Нужно GUI построение тестов или широкая поддержка протоколов (используй JMeter) Время чтения: 12 минут
Твоему API нужно нагрузочное тестирование перед релизом. Ты в Node.js команде — XML JMeter’а чуждый. Ты хочешь тесты в Git, запускающиеся в CI/CD вместе с кодом.
Artillery говорит на твоём языке. YAML конфиги, npm установка, CLI выполнение. Тесты, которые читаются как документация, запускаются как код.
Что такое Artillery?
Artillery — современный инструментарий для нагрузочного тестирования для разработчиков. Использует YAML для определения сценариев и работает на Node.js, что естественно для JavaScript/TypeScript команд.
Почему Artillery:
- YAML-based — читаемые, версионируемые сценарии
- Developer-friendly — npm install, CLI выполнение
- Поддержка протоколов — HTTP, WebSocket, Socket.io из коробки
- Расширяемый — JavaScript функции, кастомные плагины
- CI/CD native — JSON output, exit codes, GitHub Actions ready
Установка
npm install -g artillery
Проверка установки:
artillery version
Первый нагрузочный тест
Базовый YAML сценарий
# load-test.yml
config:
target: "https://api.example.com"
phases:
- duration: 60
arrivalRate: 10
name: "Warm up"
scenarios:
- name: "Get users"
flow:
- get:
url: "/users"
Запуск теста
artillery run load-test.yml
Фазы нагрузки
Паттерн Ramp-Up
config:
target: "https://api.example.com"
phases:
# Начало медленно
- duration: 30
arrivalRate: 5
name: "Warm up"
# Рост до пика
- duration: 60
arrivalRate: 5
rampTo: 50
name: "Ramp up"
# Устойчивая нагрузка
- duration: 120
arrivalRate: 50
name: "Sustained load"
# Охлаждение
- duration: 30
arrivalRate: 50
rampTo: 5
name: "Cool down"
Пользовательские сценарии
Последовательные запросы
scenarios:
- name: "User journey"
flow:
- get:
url: "/products"
- think: 2 # Ожидание 2 секунды
- get:
url: "/products/1"
- post:
url: "/cart"
json:
productId: 1
quantity: 2
Захват и переиспользование данных
scenarios:
- name: "Login and use token"
flow:
- post:
url: "/auth/login"
json:
username: "test"
password: "secret"
capture:
- json: "$.token"
as: "authToken"
- get:
url: "/profile"
headers:
Authorization: "Bearer {{ authToken }}"
Assertions
Валидация ответа
scenarios:
- name: "API health check"
flow:
- get:
url: "/health"
expect:
- statusCode: 200
- contentType: application/json
- hasProperty: status
- equals:
- "{{ status }}"
- "healthy"
Конфигурация окружений
Использование переменных
config:
target: "{{ $processEnvironment.API_URL }}"
variables:
apiKey: "{{ $processEnvironment.API_KEY }}"
scenarios:
- flow:
- get:
url: "/data"
headers:
X-API-Key: "{{ apiKey }}"
Несколько окружений
config:
environments:
dev:
target: "https://dev.api.example.com"
staging:
target: "https://staging.api.example.com"
prod:
target: "https://api.example.com"
artillery run test.yml -e staging
Отчёты
JSON отчёт
artillery run load-test.yml --output results.json
HTML отчёт
artillery run load-test.yml --output results.json
artillery report results.json --output report.html
CI/CD интеграция
GitHub Actions
name: Load Tests
on:
schedule:
- cron: '0 2 * * *' # Ежедневно в 2:00
jobs:
load-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Artillery
run: npm install -g artillery
- name: Run load test
run: artillery run tests/load-test.yml --output results.json
env:
API_URL: ${{ secrets.API_URL }}
- name: Generate report
run: artillery report results.json --output report.html
- name: Upload results
uses: actions/upload-artifact@v4
with:
name: load-test-results
path: |
results.json
report.html
Exit Codes для CI
config:
ensure:
p95: 500 # 95-й перцентиль < 500мс
maxErrorRate: 1 # < 1% ошибок
Artillery возвращает код 1 если пороги превышены — фейля CI джобу.
Artillery с помощью ИИ
ИИ инструменты могут помочь писать и оптимизировать Artillery сценарии.
Что ИИ делает хорошо:
- Генерировать YAML сценарии из API спецификаций
- Создавать реалистичные пользовательские пути
- Предлагать конфигурации фаз нагрузки
- Конвертировать другие форматы в Artillery YAML
Что требует людей:
- Определение реалистичных уровней нагрузки
- Интерпретация результатов в бизнес-контексте
- Решения по инфраструктурной мощности
- Различия production vs test окружений
FAQ
Что такое Artillery?
Artillery — современный Node.js инструмент для нагрузочного тестирования. Ты пишешь тестовые сценарии на YAML, определяя виртуальных пользователей и их поведение. Поддерживает HTTP, WebSocket и Socket.io из коробки, с плагинами для кастомных протоколов. Тесты запускаются из CLI, выводят JSON и легко интегрируются с CI/CD пайплайнами.
Artillery vs JMeter — что лучше?
Artillery использует YAML конфигурацию (удобно для разработчиков, версионируется). JMeter использует GUI (проще для не-программистов). Artillery легче, быстрее настраивается и естественен для Node.js команд. JMeter имеет больше поддержки протоколов, enterprise функций и большую экосистему. Выбирай Artillery для современных веб-приложений, JMeter для сложных enterprise нужд.
Artillery бесплатный?
Artillery Core (CLI инструмент) бесплатный и open-source под лицензией MPL-2.0. Он покрывает большинство потребностей нагрузочного тестирования. Artillery Pro — платный сервис, добавляющий облачное выполнение, продвинутую аналитику, командную работу и поддержку. Большинство команд начинают с Core и апгрейдятся если нужен облачный масштаб.
Может ли Artillery тестировать WebSockets?
Да, поддержка WebSocket встроена. Определяй connection, emit и expect шаги в YAML как HTTP запросы. Тестируй real-time приложения, чат системы, мультиплеерные игры и Socket.io бэкенды. Один сценарий может смешивать HTTP и WebSocket шаги для реалистичных пользовательских путей.
Официальные ресурсы
Смотрите также
- JMeter Tutorial - GUI-based нагрузочное тестирование
- Locust Tutorial - Python нагрузочное тестирование
- k6 Load Testing - JavaScript нагрузочное тестирование
- API Performance Testing - Основы тестирования производительности
