Содержание статьи
✅ Преимущества JMeter
- Бесплатный — полностью open-source, никаких лицензий
- Популярный — используется в 80% компаний для load testing
- Мощный — может симулировать тысячи пользователей
- Гибкий — поддержка множества протоколов
- Расширяемый — плагины для любых задач
- CI/CD — легко интегрируется в Jenkins, GitLab CI
Типы тестирования в JMeter
- Load Testing — проверка под ожидаемой нагрузкой (100 пользователей)
- Stress Testing — проверка на максимальной нагрузке (до отказа)
- Spike Testing — резкие скачки нагрузки
- Endurance Testing — длительная нагрузка (несколько часов/дней)
- Volume Testing — большие объемы данных
📥 Установка JMeter (5 минут)
Шаг 1: Установка Java
JMeter работает на Java, поэтому сначала нужно установить JDK (Java Development Kit).
Проверьте, установлена ли Java:
java -version
Если видите версию 8 или выше — отлично! Если нет, установите:
- Windows/Mac: Скачайте с oracle.com/java
- Linux (Ubuntu):
sudo apt update sudo apt install openjdk-11-jdk
Настройка памяти JMeter:
Для больших нагрузочных тестов рекомендуется увеличить память JMeter. Откройте файл jmeter.bat (Windows) или jmeter.sh (Linux/Mac) и найдите строку HEAP:
# Найдите строку HEAP и измените: HEAP="-Xms2g -Xmx4g"
🎯 Создание первого тест-плана (10 минут)
Сейчас мы создадим простой тест, который будет симулировать 100 пользователей, одновременно заходящих на сайт.
Шаг 1: Создание Test Plan
После запуска JMeter вы видите Test Plan — это корневой элемент всех тестов.
- Кликните на Test Plan
- В поле Name введите:
My First Load Test - Поставьте галочку Run Thread Groups consecutively (если планируете
Thread Group — это самый важный элемент. Здесь вы настраиваете:
- Сколько пользователей будет симулировано
- Как быстро они будут добавляться
- Сколько раз каждый пользователь выполнит действие
Основные параметры Thread Group
1. Number of Threads (users)
Количество виртуальных пользователей. Установите: 100
⚠️ Важно: Ramp-Up Period
Не ставьте Ramp-Up = 0! Это создаст DDoS-атаку на сервер (все 100 пользователей зайдут одновременно за 1 миллисекунду). Это нереалистично и может "убить" сервер моментально.
Реалистичный сценарий: пользователи заходят постепенно в течение 10-30 секунд.
💡 Расчет нагрузки
Формула пропускной способности:
Throughput (requests/sec) = (Number of Threads * Loop Count) / Total Time
Пример: (100 threads * 5 loops) / 10 seconds = 50 requests/sec
🌐 Добавление HTTP запроса
Теперь нужно указать, какой сайт мы будем тестировать.
Шаг 1: Добавить HTTP Request Sampler
- Правый клик на Thread Group
- Выберите: Add → Sampler → HTTP Request
- Измените имя на:
Homepage Load Test
Шаг 2: Настройка HTTP Request
ирования:- Method: POST, PUT, DELETE
- Body Data: добавьте JSON в разделе "Body Data"
- Headers: добавьте Content-Type: application/json
{ "username": "testuser", "password": "test123" }📊 Добавление Listeners (визуализация результатов)
Listeners — это элементы, которые собирают и отображают результаты тестов.
Шаг 1: View Results Tree
Показывает каждый запрос и ответ (полезно для отладки).
- Правый клик на Thread Group
- Выберите: Add → Listener → View Results Tree
Этот listener покажет:
- ✅ Успешные запросы (зеленые)
- ❌ Ошибки (красные)
- 📄 HTTP код ответа (200, 404, 5
- Min/Max: минимальное/максимальное время
- Std. Dev: стандартное отклонение
- Error %: процент ошибок
- Throughput: пропускная способность (req/sec)
- KB/sec: объем трафика - Run Test -->
- Нажмите File → Save Test Plan As...
- Сохраните как:
load_test.jmx - Счетчик в правом верхнем углу (показывает активные потоки)
- Результаты в Listeners обновляются в реальном времени
- Прогресс-бар внизу
- Зеленые записи = успешные запросы (HTTP 200)
- Красные записи = ошибки (HTTP 404, 500, timeout)
- Смотрите на Average (среднее время отклика)
- Смотрите на Error % (должен быть 0%)
- Смотрите на Throughput (запросов в секунду)
- Average Response Time: меньше 1000 мс (1 секунда)
- Error %: 0% (любые ошибки — проблема)
- 90% Line: меньше 2000 мс
- API запросы: 50-300 мс
- База данных: 10-100 мс
- Более 3000 мс (3 секунды) — пользователи начинают уходить
- Более 10000 мс (10 секунд) — критическая проблема
- HTTP 404: Страница не найдена (ошибка в пути)
- HTTP 500: Ошибка сервера (баг в коде)
- HTTP 503: Сервис недоступен (перегрузка)
- Connection Timeout: Сервер не отвечает
- Throughput увеличивается с ростом пользователей — хорошо
- Throughput достиг плато — сервер на пределе
- Throughput падает — сервер перегружен
- 90% Line: меньше 1 секунды
- 95% Line: меньше 2 секунд
- 99% Line: меньше 3 секунд
- ❌ Response Time растет с увеличением пользователей
- ❌ Error Rate больше 1%
- ❌ 95% Line больше 3 секунд
- ❌ Throughput падает при увеличении нагрузки
- ❌ Стандартное отклонение (Std. Dev) очень большое
- ✅ Response Time стабильное (не растет)
- ✅ Error Rate = 0%
- ✅ 90% Line меньше 1 секунды
- ✅ Throughput растет линейно с нагрузкой
- ✅ Стандартное отклонение маленькое
- ✅ Практические проекты
- ✅ Продвинутые сценарии
- ✅ Интеграция с CI/CD
- ✅ Красивые дашборды в Grafana
- ✅ Доступ навсегда за €39
- ✅ Используйте CSV с реальными данными пользователей
- ✅ Добавляйте задержки (Timers) между запросами
- ✅ Симулируйте реальное поведение
- ❌ Не отправляйте одинаковые запросы
- CPU: должен быть меньше 80%
- RAM: без утечек памяти
- Disk I/O: без перегрузки
- Network: пропускная способность
- Database: количество connections
- ✅ JMeter: от базы до продвинутых сценариев
- ✅ InfluxDB: сохранение и анализ метрик
- ✅ Grafana: создание профессиональных дашбордов
- ✅ Groovy: скрипты для сложной логики
- ✅ Устанавливать и настраивать JMeter
- ✅ Создавать тест-планы
- ✅ Настраивать виртуальных пользователей (Thread Groups)
- ✅ Добавлять HTTP запросы
- ✅ Анализировать результаты
- ✅ Использовать Listeners для визуализации
- ✅ Применять Best Practices
- InfluxDB — для сохранения метрик в time-series базу
- Grafana — для создания красивых real-time дашбордов
- Groovy скрипты — для сложной логики в JMeter
- Backend Listener — отправка метрик в InfluxDB
- Зарплата в России: 150,000-350,000₽/месяц
- Зарплата в США: $80,000-150,000/год
- Удаленка: $50,000-100,000/год
- JMeter Plugins Manager — коллекция полезных плагинов
- Stepping Thread Group — постепенное увеличение нагрузки
- PerfMon — мониторинг сервера во время теста
- Custom Thread Groups — гибкая настройка профилей нагрузки
- JMeter + InfluxDB + Grafana — полный курс в записи (€39)
- Нагрузочное тестирование — индивидуальные занятия
- QA Automation — автоматизация тестирования
- ⚡ 6+ часов практических видеоуроков
- 📊 Реальные проекты для портфолио
- ♾️ Доступ навсегда (смотрите когда удобно)
- 💰 Всего €39 (вместо €99)
- 🎓 От автора этой статьи
▶️ Запуск теста
Шаг 1: Сохраните тест-план
Шаг 2: Запустите тест
Нажмите зеленую кнопку ▶️ Start (или Ctrl+R)
Вы увидите:
Шаг 3: Наблюдайте за результатами
Откройте View Results Tree:
Откройте Summary Report:
💡 Что считается хорошим результатом?
Плохой результат:
2. Error Rate (Процент ошибок)
Что это: Процент неудачных запросов (HTTP 4xx, 5xx, timeouts).
Хороший результат: 0%
Приемлемый результат: меньше 0.1%
Плохой результат: больше 1% — срочно искать проблему!
Типы ошибок:
3. Throughput (Пропускная способность)
Что это: Количество запросов, которые сервер может обработать в секунду.
Формула: Total Requests / Total Time (seconds)
Пример: Если сервер обработал 500 запросов за 10 секунд = 50 req/sec
Что это значит:
4. Percentiles (Процентили)
90% Line (90-й процентиль): 90% запросов выполнились быстрее этого времени.
Пример: 90% Line = 1500мс означает, что 90% пользователей получили ответ за 1.5 секунды, а 10% ждали дольше.
Почему это важнее среднего?
Среднее (Average) не показывает "хвосты". Если у 90% пользователей время 500мс, а у 10% — 10 секунд, среднее будет ~1500мс, что выглядит нормально. Но 10% пользователей недовольны!
Золотой стандарт:
Как интерпретировать результаты
🔴 Плохие признаки (нужна оптимизация)
🟢 Хорошие признаки (все отлично)
🎓 Хотите освоить JMeter профессионально?
Изучите полный стек: JMeter + InfluxDB + Grafana за 6+ часов видеоуроков
🚀 Продвинутые возможности JMeter
Базовый тест — это только начало. JMeter предлагает мощные возможности для реалистичных сценариев.
1. Параметризация (CSV Data Set)
Проблема: Все виртуальные пользователи отправляют одинаковые запросы. Это нереалистично.
Решение: Использовать разные данные для каждого пользователя (логины, пароли, ID).
Создайте CSV файл
users.csv:username,password user1,pass1 user2,pass2 user3,pass3
Добавьте CSV Data Set Config → укажите путь к файлу → используйте в запросах:
${username},${password}2. Assertions (Проверки)
Проблема: Сервер вернул HTTP 200, но в ответе ошибка или пустая страница.
Решение: Assertions — проверки содержимого ответа.
Добавьте Response Assertion для проверки ключевых слов:
Pattern to Test: "success": true
Теперь запрос будет помечен ошибкой, если в ответе нет
"success": true3. Timers (Задержки)
Проблема: Все запросы идут мгновенно друг за другом. Реальные пользователи делают паузы.
Решение: Добавьте Uniform Random Timer:
Constant Delay Offset: 1000 (1 секунда) Random Delay Maximum: 3000 (3 секунды)
Результат: задержка от 1 до 4 секунд между запросами
✅ Best Practices нагрузочного тестирования
1. Запускайте в Non-GUI режиме
Проблема: GUI потребляет до 80% ресурсов JMeter.
Решение: Для реальных тестов используйте командную строку:
jmeter -n -t test_plan.jmx -l results.jtl -e -o report_folder
2. Тестируйте на реалистичных данных
3. Мониторьте сервер во время теста
JMeter показывает только клиентскую сторону. Одновременно мониторьте сервер:
Инструменты: Grafana, Prometheus, New Relic, DataDog
❌ Типичные ошибки начинающих
1. Ramp-Up Period = 0
Ошибка: Все пользователи запускаются одновременно.
Последствия: Нереалистичная "DDoS-атака", сервер сразу падает.
Решение: Установите Ramp-Up = 10-60 секунд.
2. Слишком много Listeners
Ошибка: Включены View Results Tree, Graph Results и другие "тяжелые" listeners.
Последствия: JMeter тормозит, результаты неточные.
Решение: Отключите все Listeners или используйте Non-GUI режим.
3. Нет Assertions
Ошибка: Проверяется только HTTP 200, но не содержимое ответа.
Последствия: Сервер возвращает 200, но с ошибкой в JSON/HTML.
Решение: Добавьте Response Assertion для проверки ключевых слов.
4. Игнорирование ошибок
Ошибка: "Error Rate = 5%, но тест прошел успешно"
Последствия: Продакшн падает под нагрузкой.
Решение: Любой Error Rate > 0% требует расследования!
🎯 Хотите стать экспертом в нагрузочном тестировании?
В моем курсе вы изучите:
6+ часов видео | Практические проекты | €39 навсегда
Купить курс за €39🎉 Заключение
Поздравляю! Теперь вы умеете:
Этого достаточно для базового нагрузочного тестирования за 30 минут.
Что дальше?
Чтобы стать профессионалом в Performance Testing, изучите:
Все это есть в моем курсе JMeter + InfluxDB + Grafana!
💼 Карьера Performance Engineer
Навыки нагрузочного тестирования высоко ценятся:
Performance Engineer — это QA-специалист с уникальной специализацией, которого не хватает на рынке!
📚 Дополнительные ресурсы
Официальная документация
Плагины JMeter
Мои курсы
🚀 Начните карьеру в Performance Testing
Курс JMeter + InfluxDB + Grafana — это ваш быстрый старт
50+ студентов уже прошли курс | Рейтинг 5/5
💬 Есть вопросы?
Напишите мне в Telegram, и я помогу разобраться с нагрузочным тестированием!
Написать в Telegram📚 Рекомендуемые материалы
📖 Postman руководство
Узнайте больше о связанных темах
📖 REST API основы
Узнайте больше о связанных темах
📖 Карьера QA в США
Узнайте больше о связанных темах
🎓 Курс: JMeter / InfluxDB / Grafana
Индивидуальное обучение с ментором. Практические задания, поддержка 24/7.
🎓 Курс: QA Automation Individual
Индивидуальное обучение с ментором. Практические задания, поддержка 24/7.