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







