У меня есть слушатель JSR233, который, похоже, игнорируется в режиме JMeter без графического интерфейса
У меня есть прослушиватель JSR233 в HTTP-запросе, он хранит все значения времени ответа, создает массив, а затем сортирует массив, чтобы найти строку 90%, а затем отмечает последнюю транзакцию / запрос Pass или Fail, если достигнут конечный порог строки 90%. Все работает отлично в графическом интерфейсе, но я запускаю этот тест в Gitlab CI с использованием Docker Image, и похоже, что этот сценарий JSR233 игнорируется 8 раз из 10, но 2 раза он и там работает нормально. Действительно запутано Он ведет себя странно в консоли Windows JMeter без графического интерфейса тоже, он игнорируется, может быть
String requests = props.get("requests");
long requestsSum = 0;
if (requests != null) {
requestsSum = Long.parseLong(props.get("requests"));
}
long thisRequest = sampleResult.getTime();
requestsSum++;
props.put("requests", String.valueOf(requestsSum));
props.put("rt"+String.valueOf(requestsSum), String.valueOf(thisRequest));
if ( requestsSum > 4 ) {
ArrayList strList = new ArrayList();
for (int i=1;i<6; i++){
strList.add(Integer.parseInt(props.get("rt"+String.valueOf(i))));
}
vars.putObject("ArrayListBeforeSorting",strList);
Collections.sort(strList);
vars.putObject("ArrayListAfterSorting",strList);
String HID = vars.get("ArrayListAfterSorting"); String[] words = HID.split(",");
log.info("ninetypercent line is: " + words[3]);
vars.put("NPL" , words[3]);
int ninetypercentline = Integer.parseInt(words[3].trim());
if ( ninetypercentline > 100 ) {
sampleResult.setSuccessful(false);
sampleResult.setResponseMessage("ninety percent line is reached");
}
}
1 ответ
JMeter ничего не "игнорирует", вы можете дважды проверить это сами:
Ввод __counter() функции в поле "Параметры" вашего JSR223 Listener, как:
${__counter(FALSE,)}
Добавьте эту строку в качестве первой строки вашего скрипта:
println('Executing listener #' + ((Parameters as int) -1))
Вы должны увидеть следующий вывод в stdout:
Executing listener #1
Executing listener #2
Executing listener #3
Executing listener #4
Executing listener #5
Executing listener #6
Executing listener #7
Executing listener #8
Executing listener #9
Executing listener #10
что означает, что слушатель был выполнен 10 раз (фактический порядок может отличаться в зависимости от ваших настроек наращивания)
Что касается самого вашего кода, имейте в виду, что если у вас> 1 виртуальный пользователь, ваш так называемый "код" либо завершится ошибкой, либо выдаст недопустимые результаты из-за состояния гонки, так как этиrequests
, а также rt*
ценности глобальны
Свойства - это не то же самое, что переменные. Переменные являются локальными для потока; свойства общие для всех потоков