Отметим: когда ваш бэкенд на 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 под ваш проект — оценим инфраструктуру и предложим оптимальное решение. Закажите аудит текущих сценариев нагрузочного тестирования, чтобы убедиться, что ваши тесты дают релевантные результаты.







