Розробка навантажувальних тестів для сайту (Artillery)

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

Розробка та обслуговування будь-яких видів сайтів:

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

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

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

500-ті помилки під час розпродажів — типова біль для e-commerce. Якщо пікове навантаження в 10 000 RPS кладе сервер, ви втрачаєте до 500 000 гривень на годину. Щоб уникнути простоїв, ми проводимо навантажувальне тестування з Artillery. Цей інструмент симулює тисячі одночасних користувачів, показуючи, як система поводиться під тиском. Перед запуском акцій або нового функціоналу ми моделюємо сценарії: перегляд каталогу, пошук, оформлення замовлення. У результаті ви отримуєте не просто звіт, а конкретні кроки з оптимізації — від налаштування кешування до індексів БД. Наші клієнти економлять до 500 000 гривень на кожному інциденті завдяки своєчасному виявленню вузьких місць. Оцінка проєкту займає 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
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060