Налаштування навантажувального тестування інфраструктури через Locust

Коли навантажувальні тести впираються в негнучкі інструменти та складні сценарії, а час на запуск зростає, час змінювати підхід. Ми налаштовуємо навантажувальне тестування інфраструктури через Locust, пишемо Python-сценарії та організовуємо розподілений запуск. Наша команда реалізує проєкт під ключ — від аудиту до інтеграції в CI/CD, забезпечуючи стабільну роботу та подальшу підтримку.
Часті запитання

Зазначимо: коли ваш бекенд на Python, а QA-інженер приносить .jmx-файл, який ніхто не хоче правити — пора змінювати підхід. Налаштування навантажувального тестування інфраструктури за допомогою Locust — це написання Python-сценаріїв, організація розподіленого запуску та інтеграція в CI/CD. Ми спеціалізуємося на цьому більше 5 років, реалізували 30+ проєктів для e-commerce та fintech. Типова ситуація: команда використовує JMeter, але для складних сценаріїв з аутентифікацією та нестандартними протоколами доводиться писати плагіни на Java. Locust вирішує цю проблему — пишете сценарії на Python без boilerplate та інтегруєте їх у CI/CD за пару годин.

Проблеми, які вирішує налаштування Locust

Locust — навантажувальний інструмент на Python, де сценарії пишуться як звичайний код. Жодного XML, жодних GUI-конфігураторів — просто Python-клас з методами, які описують поведінку користувача. Це робить Locust особливо зручним для команд, де розробники хочуть контролювати тести самостійно. Locust documentation зазначає, що інструмент підтримує HTTP, WebSocket, gRPC та кастомні протоколи. Крім того, Locust легко масштабується: один майстер і десятки воркерів дозволяють симулювати до 100 000 одночасних користувачів. Економія часу на написанні сценаріїв порівняно з JMeter становить до 50% — особливо якщо потрібно тестувати складні потоки користувачів з авторизацією та транзакціями.

Коли варто обрати Locust, а коли — JMeter?

Якщо ваш стек — Python (Django, FastAPI, Flask), або якщо потрібно тестувати не тільки HTTP, але й WebSocket, gRPC, кастомні протоколи — Locust гнучкіший і швидший у налаштуванні. Кастомний клієнт пишеться за 30 рядків: наслідуй від User, перевизнач client. Для проєктів на Java або з прив'язкою до протоколів JDBC/AMQP JMeter може бути кращим. Однак для сучасних мікросервісних архітектур Locust виграє за рахунок простоти інтеграції з GitOps та Kubernetes.

З практики: тестували Django REST API з аутентифікацією через JWT та логікою, де кожен користувач повинен спочатку зареєструватися, отримати токен, і тільки потім працювати з основними endpoint'ами. У JMeter це потребувало б складного ланцюжка з Bean Shell скриптами. У Locust — звичайний Python з self.client.post() та збереженням токена в атрибут об'єкта. В результаті час підготовки тесту скоротився в 3 рази, а підтримка сценаріїв стала простішою.

Критерій Locust JMeter
Мова сценаріїв Python XML + Java (BeanShell)
Протоколи HTTP, WebSocket, gRPC, кастомні HTTP, JDBC, MQ (через плагіни)
Поріг входу Низький (для Python-розробників) Середній (потрібне знання GUI)
Розподілений режим Вбудований master/worker Через RMI, складніше налаштування
Інтеграція в CI Пряма через headless Через плагіни або CLI

Як масштабувати тести за допомогою Locust?

Одна з сильних сторін Locust — вбудована підтримка розподіленого режиму. Master-нода керує тестом, worker-ноди генерують навантаження. Кожний worker працює в одному потоці (asyncio), тому масштабування строго горизонтальне. Один worker може обробляти до 10 000 користувачів на стандартному CPU, а при 50 workers ви генеруєте до 500 000 RPS. Запуск через Docker Compose:

Приклад docker-compose.yml
---
version: "3.8"
services:
  master:
    image: locustio/locust:2.24.0
    ports:
      - "8089:8089"
    volumes:
      - ./:/mnt/locust
    command: -f /mnt/locust/locustfile.py --master
  worker:
    image: locustio/locust:2.24.0
    volumes:
      - ./:/mnt/locust
    command: -f /mnt/locust/locustfile.py --worker --master-host master
    deploy:
      replicas: 4
    depends_on:
      - master

deploy.replicas: 4 — чотири воркери, кожен на окремому CPU-ядрі. Кількість воркерів можна збільшити до 50 і більше.

Як інтегрувати Locust в CI та аналізувати метрики?

Headless-режим з assertions через --exit-code-on-error та парсинг CSV:

---
- name: Run Locust
  run: |
    locust -f locustfile.py --headless \
      -u 500 -r 50 --run-time 5m \
      --csv=results --html=report.html \
      --exit-code-on-error 1
- name: Check p95 latency
  run: |
    p95=$(awk -F',' 'NR>1 && $1=="Aggregated" {print $14}' results_stats.csv)
    if (( $(echo "$p95 > 500" | bc -l) )); then
      echo "p95 latency ${p95}ms exceeds 500ms threshold"
      exit 1
    fi

Locust експортує results_stats.csv з полями: request_count, failure_count, median_response_time, average_response_time, p50, p95, p99 та іншими перцентилями. Середній час відповіді 250ms при 2000 запитів на секунду — типовий результат для добре налаштованого API.

Типові проблеми при налаштуванні

  • GIL та CPU-обмеження. Locust використовує gevent для корутин — це обходить GIL для I/O, але CPU-bound операції (важка обробка відповідей) блокують. Якщо в тесті багато json.loads() на великих payload'ах (наприклад, 500КБ), це з'їдає capacity. Рішення: виносити обробку в окремі потоки або профілювати.
  • Реалістичний час очікування. between(0, 0.1) — не реалістично, це DDoS. between(1, 5) з wait_time — ближче до реального користувача.
  • Управління даними. Для унікальних користувачів використовуйте LoadTestShape або CSV-фідер через itertools.cycle. Повторний логін під одним акаунтом з тисячі воркерів ламає сесії та дає хибні результати.

Що входить у налаштування навантажувального тестування під ключ

  • Аналіз тестованих сценаріїв та інфраструктури
  • Написання Python-сценаріїв з урахуванням бізнес-логіки
  • Налаштування розподіленого запуску (Docker Compose, Kubernetes)
  • Інтеграція з CI/CD (GitHub Actions, GitLab CI)
  • Збір та візуалізація метрик (Grafana + InfluxDB за бажанням)
  • Документація щодо відтворення тестів та розбору результатів
  • Навчання команди роботі з Locust

Наші компетенції в навантажувальному тестуванні

Ми займаємося навантажувальним тестуванням більше 5 років, реалізували 30+ проєктів для e-commerce, fintech та SaaS. Наші інженери сертифіковані за AWS та Kubernetes, що гарантує коректну роботу інфраструктури навіть під високим навантаженням. Економія часу на налагодженні сценаріїв — до 50% порівняно з самостійним налаштуванням. Клієнти відзначають зниження вартості тестової інфраструктури на 30% після впровадження розподіленого Locust.

Етап Термін
Аудит та проектування 1-2 дні
Розробка сценаріїв 2-3 дні
Інтеграція та тестування 1-2 дні
Разом: від 4 до 7 робочих днів

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

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

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139