Перейти к содержимому

Фотография

Разветвление с неравной вероятностью в сценарии JMeter


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 fesd

fesd

    Опытный участник

  • Members
  • PipPipPipPip
  • 262 сообщений

Отправлено 15 августа 2011 - 11:43

Иногда возникает необходимость сделать разветвление сценария Jmeter, чтобы каждый тип запроса вызывался с определенной вероятностью. Для этого можно использовать BeanShell Sampler + Switch Controller.
Ставлю BeanShell Sampler перед Switch Controller и пишу там небольшой скрипт:
Random generator = new Random();
double myRandom = generator.nextDouble();
if (myRandom < 0.9) {
       vars.put("REPORT_SWITCH","0");
} else if (myRandom < 0.95) {
       vars.put("REPORT_SWITCH","1");
} else {
       vars.put("REPORT_SWITCH","2");
}
Затем использую заданную переменную ${REPORT_SWITCH} в поле Switch Value(Switch Controller);
Вставляю в Switch Controller 3 семплера;
Чтобы не включать BeanShell Sampler в результаты листенеров, указываю их(Listeners) внутри Switch Controller.

У данной реализации я вижу проблему:
- BeanShell Sampler включается в результаты листенеров, это можно обойти поставив Listeners внутри Switch Controller. Но иногда это не подходит.

Возможно есть другие варианты реализации сабжа ?
  • 0

#2 APC

APC

    Опытный участник

  • Members
  • PipPipPipPip
  • 293 сообщений
  • ФИО:Похилько Андрей Федорович
  • Город:Москва


Отправлено 15 августа 2011 - 13:33

Можно просто random variable и if controller юзать.
Поскольку случайное число (например от 0 до 100) имеет равномерное распределение, то оно с вероятностью 100-N будет больше порога. Ну а дальше пишем в контроллерах:
если число оказалось больше 10, то выполняем запросы, вероятность которых 90%
если число оказалось больше 50, то выполняем запросы, вероятность которых 50%
если число оказалось больше 80, то выполняем запросы, вероятность которых 20%

Вуаля. А beanshell медленноват. Хотя никто не исследовал, какой вариант окажется быстрее и эффективнее.
  • 1

#3 ligreen

ligreen

    Новый участник

  • Members
  • Pip
  • 52 сообщений

Отправлено 30 августа 2011 - 10:38

В жметре 2.5 появился интересный контроллер(может был и раньше, не помню). По моему он очень хорошо решает подобные задачи - "Throughput Controller". В нем можно задать % запусков содержимого контроллера. Можно внутрь него запихнуть http request и сказать, что например выполнять его в 10% случаев. Прикрепил пример сценария.

Прикрепленные файлы

  • Прикрепленный файл  tc.jmx.gz   1,42К   25 Количество загрузок:

  • 0

#4 fesd

fesd

    Опытный участник

  • Members
  • PipPipPipPip
  • 262 сообщений

Отправлено 05 сентября 2011 - 13:49

В жметре 2.5 появился интересный контроллер(может был и раньше, не помню). По моему он очень хорошо решает подобные задачи - "Throughput Controller". В нем можно задать % запусков содержимого контроллера. Можно внутрь него запихнуть http request и сказать, что например выполнять его в 10% случаев. Прикрепил пример сценария.


Не пробовал такой, но на первый взгляд немного не то. В твоем сценарии есть последовательные три таких контроллера. В каждом указано с какой вероятностью будет выполнятся отдельный запрос. Будут итерации, когда все три запроса выполнятся за один проход, а будут ситуации когда не выполнится ни один из них. А нужно организовать рапределение между несколькими запросами так, чтобы с определенной вероятностью выбирался один из этих запросов.
  • 0

#5 ligreen

ligreen

    Новый участник

  • Members
  • Pip
  • 52 сообщений

Отправлено 05 сентября 2011 - 13:59

Ненене:) Такого что, за один проход выполнятся либо все, либо ничего не будет. Я попробовал поставить 1 тред и loop count=1, срабатывает всегда только один контроллер, при чем всегда 60%, т.е. тот у кого вероятность срабатывания больше. Но нужно конечно обкатать бы такой вариант на каком либо боевом сервисе.
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных