Как реализовать планирование внутри работающей группы потоков?

Я тестирую определенную "функциональность", которая происходит после входа в систему.

Тестовый пример - 500 пользователей, использующих эту функциональность в течение 5 минут.

Я могу добавить таймер синхронизации после входа в систему, чтобы убедиться, что все 500 потоков вошли в систему, но тогда он выполнит все 500 "функциональных" задач одновременно, а не 5 минут, что приведет к сбою приложения (он думает, что есть DDoS-атака). и выключается).

Прямо сейчас я решаю эту проблему, давая некоторое время на обдумывание после входа в систему, чтобы замедлить вход в систему до стабильной цифры, которую я могу предсказать, а затем запустить "функциональность" на каждом ходу потока, как запланировано:
главный планировщик
+ лог время отклика
+ время думать...

Но это немного нечетко. Есть ли способ "наращивать" задачи, когда они уже запущены?

2 ответа

По умолчанию JMeter выполняет запросы настолько быстро, насколько это возможно, вы можете "ограничить" выполнение до желаемой скорости (запроса в минуту) с помощью таймера постоянной пропускной способности.

Пример плана тестирования будет выглядеть так:

  • Группа потоков
    • Авторизоваться
      • Синхронизирующий таймер
    • функциональность
      • Таймер с постоянной пропускной способностью

Таймер постоянной пропускной способности следует правилам JMeter Scoping, поэтому вы можете применять его либо к одному сэмплеру, либо к группе сэмплеров.

Я могу думать в двух вариантах.

Первый - два случайных раза. Вы бы использовали диапазон от 0 секунд до 300 - 1 то есть [0-300) или используя миллис [0-300000), Затем спите потоком по этому времени.

Этот подход может быть немного более реалистичным, потому что, например, в определенную секунду данного интервала у вас нет запускаемых потоков, а в другую конкретную секунду у вас 2-3. Это все равно должно быть хорошо сбалансировано в целом, так как вы не будете делать все петиции при запуске.

Второй способ - равномерно запускать потоки. Во время настройки (входа в систему и до запуска потоков) вы можете использовать что-то вроде AtomicInteger, инициализируя его new AtomicInteger(0) и звонит getAndIncrement() назначить возможность резьбы, в диапазоне [0-500) а потом, когда ты запускаешь нитки спать 300.0 * id / 500.0 миллисекунды для выполнения задачи / петиции.

Другие вопросы по тегам