Как провести нагрузочное тестирование сайта с JMeter за 30 минут

53%
пользователей уходят если сайт грузится > 3 сек
-7%
конверсии за каждую секунду задержки
$1.6B
теряет Amazon в год из-за задержек в 100мс

✅ Преимущества JMeter

  • Бесплатный — полностью open-source, никаких лицензий
  • Популярный — используется в 80% компаний для load testing
  • Мощный — может симулировать тысячи пользователей
  • Гибкий — поддержка множества протоколов
  • Расширяемый — плагины для любых задач
  • CI/CD — легко интегрируется в Jenkins, GitLab CI

Типы тестирования в JMeter

📥 Установка 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 — это корневой элемент всех тестов.

  1. Кликните на Test Plan
  2. В поле Name введите: My First Load Test
  3. Поставьте галочку 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

  1. Правый клик на Thread Group
  2. Выберите: Add → Sampler → HTTP Request
  3. Измените имя на: 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

Показывает каждый запрос и ответ (полезно для отладки).

  1. Правый клик на Thread Group
  2. Выберите: Add → Listener → View Results Tree

Этот listener покажет:

  • ✅ Успешные запросы (зеленые)
  • ❌ Ошибки (красные)
  • 📄 HTTP код ответа (200, 404, 5
  • Min/Max: минимальное/максимальное время
  • Std. Dev: стандартное отклонение
  • Error %: процент ошибок
  • Throughput: пропускная способность (req/sec)
  • KB/sec: объем трафика
  • - Run Test -->

    ▶️ Запуск теста

    Шаг 1: Сохраните тест-план

    1. Нажмите File → Save Test Plan As...
    2. Сохраните как: load_test.jmx

    Шаг 2: Запустите тест

    Нажмите зеленую кнопку ▶️ Start (или Ctrl+R)

    Вы увидите:

    • Счетчик в правом верхнем углу (показывает активные потоки)
    • Результаты в Listeners обновляются в реальном времени
    • Прогресс-бар внизу

    Шаг 3: Наблюдайте за результатами

    Откройте View Results Tree:

    • Зеленые записи = успешные запросы (HTTP 200)
    • Красные записи = ошибки (HTTP 404, 500, timeout)

    Откройте Summary Report:

    • Смотрите на Average (среднее время отклика)
    • Смотрите на Error % (должен быть 0%)
    • Смотрите на Throughput (запросов в секунду)

    💡 Что считается хорошим результатом?

    • Average Response Time: меньше 1000 мс (1 секунда)
    • Error %: 0% (любые ошибки — проблема)
    • 90% Line: меньше 2000 мс
    • API запросы: 50-300 мс
    • База данных: 10-100 мс

    Плохой результат:

    • Более 3000 мс (3 секунды) — пользователи начинают уходить
    • Более 10000 мс (10 секунд) — критическая проблема

    2. Error Rate (Процент ошибок)

    Что это: Процент неудачных запросов (HTTP 4xx, 5xx, timeouts).

    Хороший результат: 0%

    Приемлемый результат: меньше 0.1%

    Плохой результат: больше 1% — срочно искать проблему!

    Типы ошибок:

    • HTTP 404: Страница не найдена (ошибка в пути)
    • HTTP 500: Ошибка сервера (баг в коде)
    • HTTP 503: Сервис недоступен (перегрузка)
    • Connection Timeout: Сервер не отвечает

    3. Throughput (Пропускная способность)

    Что это: Количество запросов, которые сервер может обработать в секунду.

    Формула: Total Requests / Total Time (seconds)

    Пример: Если сервер обработал 500 запросов за 10 секунд = 50 req/sec

    Что это значит:

    • Throughput увеличивается с ростом пользователей — хорошо
    • Throughput достиг плато — сервер на пределе
    • Throughput падает — сервер перегружен

    4. Percentiles (Процентили)

    90% Line (90-й процентиль): 90% запросов выполнились быстрее этого времени.

    Пример: 90% Line = 1500мс означает, что 90% пользователей получили ответ за 1.5 секунды, а 10% ждали дольше.

    Почему это важнее среднего?

    Среднее (Average) не показывает "хвосты". Если у 90% пользователей время 500мс, а у 10% — 10 секунд, среднее будет ~1500мс, что выглядит нормально. Но 10% пользователей недовольны!

    Золотой стандарт:

    • 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 растет линейно с нагрузкой
    • ✅ Стандартное отклонение маленькое

    🎓 Хотите освоить JMeter профессионально?

    Изучите полный стек: JMeter + InfluxDB + Grafana за 6+ часов видеоуроков

    • ✅ Практические проекты
    • ✅ Продвинутые сценарии
    • ✅ Интеграция с CI/CD
    • ✅ Красивые дашборды в Grafana
    • ✅ Доступ навсегда за €39
    Узнать подробнее о курсе

    🚀 Продвинутые возможности 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": true

    3. 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. Тестируйте на реалистичных данных

    • ✅ Используйте CSV с реальными данными пользователей
    • ✅ Добавляйте задержки (Timers) между запросами
    • ✅ Симулируйте реальное поведение
    • ❌ Не отправляйте одинаковые запросы

    3. Мониторьте сервер во время теста

    JMeter показывает только клиентскую сторону. Одновременно мониторьте сервер:

    • CPU: должен быть меньше 80%
    • RAM: без утечек памяти
    • Disk I/O: без перегрузки
    • Network: пропускная способность
    • Database: количество connections

    Инструменты: 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% требует расследования!

    🎯 Хотите стать экспертом в нагрузочном тестировании?

    В моем курсе вы изучите:

    • JMeter: от базы до продвинутых сценариев
    • InfluxDB: сохранение и анализ метрик
    • Grafana: создание профессиональных дашбордов
    • Groovy: скрипты для сложной логики

    6+ часов видео | Практические проекты | €39 навсегда

    Купить курс за €39

    🎉 Заключение

    Поздравляю! Теперь вы умеете:

    • ✅ Устанавливать и настраивать JMeter
    • ✅ Создавать тест-планы
    • ✅ Настраивать виртуальных пользователей (Thread Groups)
    • ✅ Добавлять HTTP запросы
    • ✅ Анализировать результаты
    • ✅ Использовать Listeners для визуализации
    • ✅ Применять Best Practices

    Этого достаточно для базового нагрузочного тестирования за 30 минут.

    Что дальше?

    Чтобы стать профессионалом в Performance Testing, изучите:

    1. InfluxDB — для сохранения метрик в time-series базу
    2. Grafana — для создания красивых real-time дашбордов
    3. Groovy скрипты — для сложной логики в JMeter
    4. Backend Listener — отправка метрик в InfluxDB

    Все это есть в моем курсе JMeter + InfluxDB + Grafana!

    💼 Карьера Performance Engineer

    Навыки нагрузочного тестирования высоко ценятся:

    • Зарплата в России: 150,000-350,000₽/месяц
    • Зарплата в США: $80,000-150,000/год
    • Удаленка: $50,000-100,000/год

    Performance Engineer — это QA-специалист с уникальной специализацией, которого не хватает на рынке!

    📚 Дополнительные ресурсы

    Официальная документация

    Плагины JMeter

    • JMeter Plugins Manager — коллекция полезных плагинов
    • Stepping Thread Group — постепенное увеличение нагрузки
    • PerfMon — мониторинг сервера во время теста
    • Custom Thread Groups — гибкая настройка профилей нагрузки

    Мои курсы

    🚀 Начните карьеру в Performance Testing

    Курс JMeter + InfluxDB + Grafana — это ваш быстрый старт

    • ⚡ 6+ часов практических видеоуроков
    • 📊 Реальные проекты для портфолио
    • ♾️ Доступ навсегда (смотрите когда удобно)
    • 💰 Всего €39 (вместо €99)
    • 🎓 От автора этой статьи
    Купить курс за €39

    50+ студентов уже прошли курс | Рейтинг 5/5

    💬 Есть вопросы?

    Напишите мне в Telegram, и я помогу разобраться с нагрузочным тестированием!

    Написать в Telegram

    📚 Рекомендуемые материалы

    📖 Postman руководство

    Узнайте больше о связанных темах

    📖 REST API основы

    Узнайте больше о связанных темах

    📖 Карьера QA в США

    Узнайте больше о связанных темах

    🎓 Курс: JMeter / InfluxDB / Grafana

    Индивидуальное обучение с ментором. Практические задания, поддержка 24/7.

    🎓 Курс: QA Automation Individual

    Индивидуальное обучение с ментором. Практические задания, поддержка 24/7.

🚀 Готовы начать обучение?

Если вам понравилась эта статья, запишитесь на курс!
Индивидуальное обучение 1 на 1, практические задания, поддержка 24/7. Начните свой путь в IT уже сегодня!

📚 JMeter / InfluxDB / Grafana

Курс в записи по нагрузочному тестированию

Узнать о курсе →

📚 QA Automation Individual

Полный курс QA Automation

Узнать о курсе →
💬 Задать вопрос в Telegram