#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 способа:
- если Event_RequestN создан — поместите в переменную определенное значение, затем используйте его в условии IF-перед 2-м действием пользователя с Event_RequestN;
- добавьте действие с определенным утверждением перед 2-м действием пользователя с помощью Event_RequestN и используйте ${JMeterThread.last_sample_ok} в условии IF;
- добавьте действие с помощью экстрактора xpath перед 2-м пользовательским действием с помощью Event_RequestN и используйте ${_isVarDefined(EventRequest_Subject${N}_FOUND)} в IF-условии;
и в итоге 3-й вариант оказался лучшим на практике.
Ответ №1:
- Не используйте Beanshell, так как JMeter 3.1 вы должны использовать тестовые элементы JSR223 и язык Groovy для написания сценариев
- Не вставляйте функции или переменные JMeter в сценарии, вместо этого используйте эквиваленты на основе кода
- Согласно документации JMeter
Свойства не совпадают с переменными. Переменные являются локальными для потока; свойства являются общими для всех потоков
поэтому , если вы хотите поделиться частью данных между 2 потоками (виртуальными пользователями), вам нужно использовать
props
, а неvars
- Проще реализовать свой сценарий с помощью плагина для взаимодействия между потоками
Комментарии:
1. Спасибо, интересно о плагине межпотоковой связи, но в реализации используется только 1 группа потоков на стороне клиента (теперь это отлично работает таким образом). Точка стека по-прежнему является обходным путем с IF-условием.