Контроллеры JMeter: как дирижировать нагрузочными тестами

Зачем нужны контроллеры в 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 — элемент неожиданности

Где применять:

  • Имитация реального поведения пользователей
  • Тестирование системы при неравномерной нагрузке
  • Проверка устойчивости к непредсказуемым сценариям

Продвинутые техники работы с контроллерами

Комбинирование контроллеров

Реальный пример:

  1. Измеряем общее время выполнения (Transaction)
  2. Повторяем 10 раз (Loop)
  3. Если товар в наличии (If)
  4. Выполняем случайное действие (Random)

Контроллеры + переменные = мощь

groovy

// В JSR223 Sampler:
vars.put("needs_retry", "true")

// В While Controller:
${__jexl3("${needs_retry}" == "true")}

Сценарий: Повторять запрос, пока сервер не вернёт успешный статус

Оптимизация производительности

  1. Избегайте вложенных If Controller
  2. Используйте JEXL вместо BeanShell для условий
  3. Выносите сложную логику в JSR223 + Groovy

Ошибки новичков и как их избежать

  1. Бесконечные циклы
    • Всегда добавляйте условие выхода в While Controller
    • Устанавливайте разумные Limits в Loop Controller
  2. Неочевидные условияgroovy// Плохо: ${status} == success // Хорошо: ${__jexl3(«${status}».equals(«success»))}
  3. Избыточная вложенность
    • Максимум 3 уровня вложенности
    • Сложную логику выносите в отдельные элементы
  4. Игнорирование Transaction Controller
    • Всегда группируйте бизнес-процессы
    • Отдельно измеряйте критичные пути

Чек-лист выбора контроллера

ЗадачаПодходящие контроллеры
Группировка запросовSimple, Transaction
Повторение действийLoop, While
Условная логикаIf, Switch
Случайный выборRandom, Random Order
Одноразовое выполнениеOnce Only
МодульностьModule, Include
Пропускная способностьThroughput

Заключение: 3 уровня мастерства

  1. Начальный: Простые группировки + базовые циклы
  2. Продвинутый: Условия + случайные сценарии
  3. Экспертный: Комбинированные контроллеры + кастомная логика

Профессиональный совет: Начните с простых сценариев, постепенно усложняя логику. Используйте контроллеры как строительные блоки для создания реалистичных нагрузочных тестов.

«Хороший нагрузочный тест — как хороший сценарий: имеет начало, развитие и логичное завершение. Контроллеры помогают этого добиться.» — JMeter-разработчик с 10-летним опытом