#error-handling #jmeter
Вопрос:
В Jmeter, в группе потоков, у меня есть список запросов на веб-сервис. Вместо того, чтобы обрабатывать ошибку для каждого запроса отдельно, могу ли я иметь общий обработчик ошибок для группы потоков, который в конце каждой итерации будет выводить необходимые данные для неудачного запроса (например, имя службы, идентификатор задания, сообщение об ошибке). Для каждого запроса определено его утверждение.
Или это лучший подход для обработки и записи вывода ошибок для каждого запроса отдельно с использованием сценариев постпроцессора.
Ответ №1:
Для каждого запроса определено свое утверждение
Если логика утверждения является общей для всех запросов, я бы предпочел рекомендовать использовать одно утверждение для всех запросов. Утверждения JMeter подчиняются правилам области видимости JMeter, поэтому вы сможете применять критерии прохождения/отказа ко всем запросам за один раз.
Ваша текущая настройка нарушает принцип DRY, делая ваш план тестирования больше и менее подходящим для рефакторинга, если у вас есть только одно утверждение и вам нужно что — то изменить — вам нужно будет что-то изменить только в одном месте, если у вас есть утверждение на запрос-вам придется посещать каждый запрос
Ответ №2:
Утверждение-хороший способ поиска сценариев ошибок. Чтобы сделать обработку ошибок универсальной, вы можете воспользоваться тем фактом, что если вы добавите утверждение (или любой из пред — /постпроцессоров, таймеров) на уровне группы потоков или на определенном контроллере, оно будет выполняться после завершения каждого пробоотборника
Утверждения используются для выполнения дополнительных проверок пробоотборников и обрабатываются после каждого пробоотборника в той же области. Чтобы убедиться, что Утверждение применяется только к определенному образцу, добавьте его в качестве дочернего элемента этого образца.
Более подробная информация здесь
Ответ №3:
Вы можете использовать почтовый процессор JSR223 для проверки статуса ответа и печати необходимых полей.
if(vars.get("JMeterThread.last_sample_ok").toBoolean()){
log.info("Request: ${prev.getSampleLabel()} Service Name : ${prev.getUrlAsString()} JobId: ${vars.get('jobid')} Error : ${prev.getResponseMessage()}")
}
Вы можете изменить сценарий в соответствии с вашими потребностями.