У меня есть слушатель JSR233, который, кажется, игнорируется в режиме JMeter не gui - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть прослушиватель JSR233 по HTTP-запросу, он хранит все значения времени ответа, создает массив, а затем сортирует массив, чтобы найти строку 90%, а затем отмечает последнюю транзакцию / запрос на пропуск или неудачу, если последний порог линии 90% равен достиг. Все отлично работает в GUI, но я запускаю этот тест в Gitlab CI, используя Docker Image, и похоже, что этот сценарий JSR233 игнорируется 8 из 10 раз, но 2 раза он также работает там хорошо. Действительно запутанный Это ведет себя странно в windows консоли JMeter, кроме - gui, игнорируется, может быть

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 Ответ

0 голосов
/ 27 апреля 2020

JMeter ничего не "игнорирует", вы можете проверить его дважды:

  1. Поместив __ counter () функцию в поле "Параметры" Ваш слушатель JSR223, например:

    ${__counter(FALSE,)}
    
  2. Добавление этой строки в качестве первой строки вашего скрипта:

    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 раз (фактический порядок может отличаться в зависимости от ваших настроек разгона )

enter image description here

Что касается самого кода, помните, что если у вас есть> 1 виртуальный пользователь, ваш так называемый «код» либо потерпит неудачу, либо выдает недопустимые результаты из-за условия гонки , так как эти значения requests и rt* равны global

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...