Как я могу установить условие для выполнения некоторых шагов только для определенного количества пользователей

Как я могу установить условие в jmeter для шага, что 80% пользователей выполнят его, а 20% пользователей не будут. Пожалуйста, помогите мне в этом. У меня есть http-сэмплер, и я хочу, чтобы он выполнялся только для 80% пользователей в тесте, поэтому, когда количество пользователей (потоков) изменится, процент выполненных запросов для этого сэмплера останется прежним.


person Neha Bansal    schedule 21.09.2015    source источник
comment
Можете ли вы дать некоторый контекст кода для этого?   -  person lenz    schedule 21.09.2015
comment
это условие. у меня нет кода   -  person Neha Bansal    schedule 21.09.2015


Ответы (2)


Если у вас есть семплеры, с которыми вы хотите работать только в некоторых потоках, а не во всех, проще всего добавить их в If Controller, а в Condition добавить что-то вроде:

${__Random(1,100)} <= 80

В этом случае запросы в этом контроллере будут выполняться с вероятностью 80% (срабатывает только тогда, когда random меньше или равно 80). Конечно, он не идеален, так как иногда он может работать с +-5% запросов, но это самый быстрый и простой способ, который я знаю. И с такой случайностью это больше похоже на реальный жизненный опыт.

person Faflok    schedule 21.09.2015
comment
это не работает. я пробовал с 10 циклами и этим выражением в контроллере if, ${__Random(1,100)} ‹= 80. но когда я запускаю это, он каждый раз пропускает шаг - person Neha Bansal; 21.09.2015
comment
тогда попробуйте ${__Random(1,10)} ‹= 8. Когда вы запускаете всего десять циклов, он всегда может достигать где-то между 81 и 100. Больше потоков и циклов дает результаты, более близкие к желаемому проценту. - person Faflok; 21.09.2015
comment
Я проверил это на своей машине, и запрос был запущен 816 для 1000 циклов, так что это достаточно близко - 81%. Второй раунд дал мне 825/1000 (82,5%), так что это не идеально, но работает. - person Faflok; 21.09.2015
comment
спасибо, это работает, но когда я запускаю ${__Random(1,10)} ‹= 8, это для 10 циклов, а затем выполняется 9 раз, это означает, что это дает 90%, и мне нужны результаты в соотношении 20/80. - person Neha Bansal; 21.09.2015

Я добавлю его как другой ответ, так как это еще один подход к этой проблеме. Вы можете добавить счетчик в свой план тестирования (Добавить -> Элемент конфигурации -> Счетчик) и установить его как Start: 1, Increment: 1, Max: 10, Reference name: count. Когда вы это сделаете, вы можете изменить условие вашего контроллера If на ${count} <= 8. Он выполнит сэмплер в контроллере всего 8 раз, а последние два цикла этого не сделают.

Конечно, вы можете параметризовать его и в качестве значения добавить количество циклов/потоков, которые вы используете, и отрегулировать максимальное число в условии из пропорции, но если вы используете только 10 циклов, этот подход будет в порядке.

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

И просто дополнительное примечание о параметрах для этого случая и о том, как я установил их простым способом (с этой настройкой количество потоков не имеет значения - он всегда будет работать правильно):

  • Счетчик с началом: 1, приращение: 1, справочное имя: счетчик и выбрано поле «Отслеживать счетчик независимо для каждого пользователя».
  • Группа потоков с числом циклов, заданным переменной loopCount, которая также используется для подсчета количества сэмплеров, необходимых для покрытия надлежащего процента.
  • Если контроллер с условием установлен как ${Count} <= (${loopCount}*0.8) (это 0,8 также может быть установлено с некоторой переменной для более легкого управления)
person Faflok    schedule 21.09.2015
comment
спасибо, но я хочу соотношение 80 и 20. например, если я возьму 10 петель, то он будет выполняться 8 раз, а не 2 раза. и если я возьму 20 циклов, то он будет выполняться 16 раз, а не 4 раза. в настоящее время он выполняется 8 раз, если я возьму 10 петель и 20 петель. его специфичность. он будет работать только 8 раз в каждом состоянии. - person Neha Bansal; 21.09.2015
comment
Прочтите остальную часть комментария — вы можете его параметризовать. Добавьте переменную loopCount, используйте ее в своем потоке в Loop Count (как ${loopCount}) и в этом случае, если контроллер использует ее как Condition: ${Count} ‹= (${loopCount}*0.8) - это самый простой способ, я думаю - person Faflok; 21.09.2015