JMeter IF-проверка состояния

#if-statement #jmeter #client-side

Вопрос:

В клиентском сценарии 1-й пользователь создает события в календаре для 2-го пользователя, 2-й пользователь принимает/отклоняет их.

Я хотел бы исключить возможные ошибки при создании событий и проверить, был ли запрос на событие создан до того, как 2-й пользователь попытается принять его, используя xpath, построенный на шаблоне запроса на событие, например:

EventRequest_SubjectN
(N-номер итерации запроса события в цикле, поэтому, если запрос события N не был создан 1-м пользователем, действие 2-го пользователя с событием N завершается неудачно).

Между этими действиями находятся другие действия обоих пользователей, по этой причине я не могу использовать ${JMeterThread.last_sample_ok}.

Есть ли какой-либо аналог этой функции, но для необходимого/конкретного действия несколько шагов назад, а не для последнего образца?

Каков наилучший способ организации, если-условие в этом случае?

Я подумываю о том, чтобы добавить постпроцессор BeanShell после 1-го запроса события пользователя N с кодом, подобным:

var rc = предшествующий getResponseCode(); если(rc.равно(«200»)){

vars.put(‘EventRequest_Subject_${N}’, ‘EventRequest_Subject_${N}’); }

и используйте условие not null для EventRequest_Subject_${N} в IF-контроллере для 2-го пользователя.

Но это не работает таким образом. Где я ошибаюсь?

UPD. Решение:

Попробовал 3 способа:

  1. если Event_RequestN создан — поместите в переменную определенное значение, затем используйте его в условии IF-перед 2-м действием пользователя с Event_RequestN;
  2. добавьте действие с определенным утверждением перед 2-м действием пользователя с помощью Event_RequestN и используйте ${JMeterThread.last_sample_ok} в условии IF;
  3. добавьте действие с помощью экстрактора xpath перед 2-м пользовательским действием с помощью Event_RequestN и используйте ${_isVarDefined(EventRequest_Subject${N}_FOUND)} в IF-условии;

и в итоге 3-й вариант оказался лучшим на практике.

Ответ №1:

  1. Не используйте Beanshell, так как JMeter 3.1 вы должны использовать тестовые элементы JSR223 и язык Groovy для написания сценариев
  2. Не вставляйте функции или переменные JMeter в сценарии, вместо этого используйте эквиваленты на основе кода
  3. Согласно документации JMeter

    Свойства не совпадают с переменными. Переменные являются локальными для потока; свойства являются общими для всех потоков

    поэтому , если вы хотите поделиться частью данных между 2 потоками (виртуальными пользователями), вам нужно использовать props , а не vars

  4. Проще реализовать свой сценарий с помощью плагина для взаимодействия между потоками

Комментарии:

1. Спасибо, интересно о плагине межпотоковой связи, но в реализации используется только 1 группа потоков на стороне клиента (теперь это отлично работает таким образом). Точка стека по-прежнему является обходным путем с IF-условием.