Разработка нагрузочных тестов для сайта (Artillery)

Пиковые нагрузки во время акций могут привести к сбоям сайта и потере клиентов. Мы проводим нагрузочное тестирование с помощью Artillery, моделируя реальные сценарии поведения пользователей. Наша команда реализует проект под ключ — от разработки сценариев до анализа результатов и рекомендаций по оптимизации, обеспечивая стабильную работу вашего ресурса.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка нагрузочных тестов для сайта (Artillery)
Средний
~2-3 дня
Часто задаваемые вопросы

500-е ошибки во время распродаж — типичная боль для e-commerce. Если пиковая нагрузка в 10 000 RPS ложит сервер, вы теряете до $9k–13k в час. Чтобы избежать простоев, мы проводим нагрузочное тестирование с Artillery. Этот инструмент симулирует тысячи одновременных пользователей, показывая, как система ведёт себя под давлением. Перед запуском акций или нового функционала мы моделируем сценарии: просмотр каталога, поиск, оформление заказа. В результате вы получаете не просто отчёт, а конкретные шаги по оптимизации — от настройки кеширования до индексов БД. Наши клиенты экономят до $4.5k–6.5k на каждом инциденте благодаря своевременному выявлению узких мест. Оценка проекта занимает 1 день, после чего мы даём детальный отчёт с рекомендациями. Свяжитесь с нами, чтобы получить консультацию.

Как Artillery помогает выявить узкие места?

Artillery — Node.js-инструмент с YAML-конфигурацией, поддерживающий HTTP и WebSocket. Он генерирует нагрузку по фазам: разогрев, ступенчатый рост, пик. На каждом этапе мы отслеживаем latency, error rate и throughput. Если p99 превышает 1 секунду или 5xx ошибки >1% — это сигнал к оптимизации. Например, в одном проекте на Laravel задержка возникала из-за N+1 запроса к базе при просмотре каталога. Тест с 50 RPS выявил рост p95 до 3 с. После добавления eager loading p95 упал до 200 мс. Подробнее о нагрузочном тестировании читайте в Wikipedia.

Почему стоит выбрать Artillery для нагрузочного тестирования?

Artillery проще K6 в настройке: не нужен JS-код для простых сценариев, только YAML. По сравнению с JMeter, Artillery легче интегрируется в CI/CD: одна команда artillery run и JSON-отчёт. Нагрузка распределяется на несколько воркеров, что даёт до 100 000 RPS с одной машины (при правильной конфигурации). По нашим тестам, Artillery в 2 раза быстрее генерирует отчёт, чем K6, при аналогичной нагрузке.

Пример развёрнутого YAML-сценария
# tests/load/basic.yml config:
target: "https://staging.example.com"
phases:
  - duration: 60
    arrivalRate: 5
    name: Warm up
  - duration: 120
    arrivalRate: 20
    name: Ramp up load
  - duration: 300
    arrivalRate: 50
    name: Sustained load
  - duration: 60
    arrivalRate: 100
    name: Stress test
defaults:
  headers:
    Accept: "application/json"
    Content-Type: "application/json"
  ensure:
    p99: 1000
    p95: 500
    maxErrorRate: 1
scenarios:
  - name: Browse catalog
    weight: 60
    flow:
      - get:
          url: "/api/products"
          expect:
            - statusCode: 200
            - hasProperty: "data"
      - think: 2
      - get:
          url: "/api/products/{{ $randomNumber(1, 100) }}"
  - name: Search
    weight: 30
    flow:
      - get:
          url: "/api/search?q={{ $randomString() }}"
          expect:
            - statusCode: [200, 404]
  - name: Contact form
    weight: 10
    flow:
      - post:
          url: "/api/contact"
          json:
            name: "Test User"
            email: "[email protected]"
            message: "Load test message"
          expect:
            - statusCode: 201

Как написать сценарий нагрузочного теста за 5 шагов?

  1. Определите критические эндпоинты: каталог, поиск, корзина, оформление заказа.
  2. Установите SLA: p99 < 1 с, error rate < 1%.
  3. Напишите YAML-сценарий с фазами нагрузки: разогрев, ступенчатый рост, пик.
  4. Добавьте авторизацию, если требуется (capture токена).
  5. Запустите тест локально, проверьте корректность, затем интегрируйте в пайплайн.

Основные сценарии Artillery

Сценарий с авторизацией

# tests/load/authenticated.yml config:
target: "https://staging.example.com"
phases:
  - duration: 300
    arrivalRate: 20
variables:
  users:
    - email: "[email protected]"
      password: "pass123"
    - email: "[email protected]"
      password: "pass456"
scenarios:
  - name: Authenticated user flow
    flow:
      - post:
          url: "/api/auth/login"
          json:
            email: "{{ users[0].email }}"
            password: "{{ users[0].password }}"
          capture:
            - json: "$.access_token"
              as: "token"
          expect:
            - statusCode: 200
      - get:
          url: "/api/user/profile"
          headers:
            Authorization: "Bearer {{ token }}"
          expect:
            - statusCode: 200
      - post:
          url: "/api/orders"
          headers:
            Authorization: "Bearer {{ token }}"
          json:
            product_id: 1
            quantity: 1
          expect:
            - statusCode: 201
          capture:
            - json: "$.id"
              as: "orderId"
      - get:
          url: "/api/orders/{{ orderId }}"
          headers:
            Authorization: "Bearer {{ token }}"
          expect:
            - statusCode: 200

Кастомный JS-процессор

# tests/load/custom.yml config: processor: "./processor.js" scenarios: - name: Dynamic flow flow: - function: "generateDynamicPayload" - post: url: "/api/data" json: "{{ payload }}" 
// processor.js
module.exports = { generateDynamicPayload };

function generateDynamicPayload(context, events, done) {
  context.vars.payload = {
    id: Math.floor(Math.random() * 10000),
    timestamp: new Date().toISOString(),
    data: Array.from({ length: 10 }, (_, i) => ({
      key: `item_${i}`,
      value: Math.random(),
    })),
  };
  return done();
}

GitHub Actions

- name: Load Test
  run: |
    artillery run --output results.json tests/load/basic.yml
    artillery report --output load-report.html results.json
- name: Check SLA
  run: |
    ERRORS=$(cat results.json | jq '.aggregate.counters["http.codes.5xx"] // 0')
    P99=$(cat results.json | jq '.aggregate.latency.p99')
    if [ "$ERRORS" -gt "10" ] || [ "$(echo "$P99 > 2000" | bc)" = "1" ]; then
      echo "Load test failed: too many errors or high latency"
      exit 1
    fi

Сравнение инструментов нагрузочного тестирования

Инструмент Язык сценариев WebSocket Распределённая нагрузка CI/CD интеграция Наша оценка
Artillery YAML + JS Да Встроенная Из коробки Отлично
Apache JMeter XML, Groovy Да Через удалённые серверы Плагины Хорошо
k6 JS Нет Через воркеры Отличная Хорошо

Типичные ошибки при нагрузочном тестировании

  • Тестирование только одного эндпоинта, игнорируя бизнес-процессы.
  • Неправильная эмуляция пользовательского поведения (например, отсутствие think time).
  • Запуск нагрузки с одного IP (блокировка на уровне сети).
  • Игнорирование кеширования на уровне приложения.
  • Отсутствие мониторинга серверных метрик (CPU, RAM, DB connections).

Этапы разработки нагрузочных тестов

Этап Длительность Результат
Анализ текущей архитектуры 0.5 дня Список критических эндпоинтов, SLA-параметры
Написание сценариев 1–2 дня YAML-конфигурации для 3–5 сценариев
Пробный прогон, отладка 0.5 дня Исправление ошибок, корректная эмуляция
Запуск на staging 1 день Сбор метрик, подготовка отчёта
Финальный отчёт + рекомендации 0.5 дня PDF-отчёт с графиками и советами по оптимизации

Что входит в работу

  • Документация: техническое задание, описание сценариев, инструкция по запуску.
  • Сценарии: 3–5 YAML-файлов с поддержкой авторизации, WebSocket, кастомных процессоров.
  • Отчёт: HTML-дашборд с метриками (latency, RPS, errors), JSON-данные для CI.
  • Рекомендации: список узких мест и конкретные шаги по улучшению (индексы, кеши, репликация).
  • Поддержка: 1 месяц консультаций после сдачи.

Наш опыт — 50+ проектов в e-commerce и SaaS. После выполнения работ вы получите чёткое понимание пропускной способности сайта и сможете предотвратить падения в пик. Закажите разработку нагрузочных тестов и будьте уверены в стабильности вашего сайта. Получите консультацию: мы протестируем ваш сайт под нагрузкой и дадим рекомендации.

Сроки ориентировочно

Разработка 3–5 сценариев под ключ занимает от 2 до 5 дней в зависимости от сложности. Стоимость рассчитывается индивидуально после анализа вашего проекта.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060