Настройка нагрузочного тестирования инфраструктуры через 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 locfile.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