Зачем нужны контроллеры в JMeter?
Контроллеры в JMeter — это дирижёры вашего нагрузочного оркестра. Они определяют:
- Порядок выполнения запросов
- Логику работы сценария
- Условия выполнения отдельных шагов
- Повторяемость действий
Без контроллеров ваш тест превратится в хаотичный набор запросов, где невозможно реализовать сложные пользовательские сценарии.
Типы контроллеров: выбираем нужный инструмент
1. Simple Controller — базовая группировка

Когда использовать:
- Для логической группировки запросов
- Когда не требуется дополнительная логика выполнения
Пример: Группировка всех запросов, связанных с корзиной покупок
2. Loop Controller — повторение сценариев
java
// Настройки: Loop Count = 5
Сценарии применения:
- Повторная авторизация с разными данными
- Имитация многократного обновления страницы
- Нагрузочное тестирование с циклическими действиями
Профессиональный совет: Комбинируйте с CSV Data Set Config для уникальных данных в каждой итерации
3. If Controller — интеллект вашего теста
groovy
// Условие: ${__jexl3("${status}" == "success")}
Практические кейсы:
- Выполнять оплату только при успешном добавлении в корзину
- Пропускать шаг верификации для гостевого доступа
- Выбирать разные сценарии в зависимости от типа пользователя
4. Transaction Controller — измеритель производительности
bash
Результат: Transaction: CheckoutProcess Samples: 10 | Avg: 1200ms | 90% Line: 1500ms
Что измеряем:
- Полное время оформления заказа
- Производительность цепочки API-вызовов
- Скорость сложных бизнес-процессов
5. Random Controller — элемент неожиданности

Где применять:
- Имитация реального поведения пользователей
- Тестирование системы при неравномерной нагрузке
- Проверка устойчивости к непредсказуемым сценариям
Продвинутые техники работы с контроллерами
Комбинирование контроллеров

Реальный пример:
- Измеряем общее время выполнения (Transaction)
- Повторяем 10 раз (Loop)
- Если товар в наличии (If)
- Выполняем случайное действие (Random)
Контроллеры + переменные = мощь
groovy
// В JSR223 Sampler: vars.put("needs_retry", "true") // В While Controller: ${__jexl3("${needs_retry}" == "true")}
Сценарий: Повторять запрос, пока сервер не вернёт успешный статус
Оптимизация производительности
- Избегайте вложенных If Controller
- Используйте JEXL вместо BeanShell для условий
- Выносите сложную логику в JSR223 + Groovy
Ошибки новичков и как их избежать
- Бесконечные циклы
- Всегда добавляйте условие выхода в While Controller
- Устанавливайте разумные Limits в Loop Controller
- Неочевидные условияgroovy// Плохо: ${status} == success // Хорошо: ${__jexl3(«${status}».equals(«success»))}
- Избыточная вложенность
- Максимум 3 уровня вложенности
- Сложную логику выносите в отдельные элементы
- Игнорирование Transaction Controller
- Всегда группируйте бизнес-процессы
- Отдельно измеряйте критичные пути
Чек-лист выбора контроллера
Задача | Подходящие контроллеры |
---|---|
Группировка запросов | Simple, Transaction |
Повторение действий | Loop, While |
Условная логика | If, Switch |
Случайный выбор | Random, Random Order |
Одноразовое выполнение | Once Only |
Модульность | Module, Include |
Пропускная способность | Throughput |
Заключение: 3 уровня мастерства
- Начальный: Простые группировки + базовые циклы
- Продвинутый: Условия + случайные сценарии
- Экспертный: Комбинированные контроллеры + кастомная логика
Профессиональный совет: Начните с простых сценариев, постепенно усложняя логику. Используйте контроллеры как строительные блоки для создания реалистичных нагрузочных тестов.
«Хороший нагрузочный тест — как хороший сценарий: имеет начало, развитие и логичное завершение. Контроллеры помогают этого добиться.» — JMeter-разработчик с 10-летним опытом