В JMeter, как сделать цикл, пока не будет найден результат - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть запрос в Jmeter, который я должен выполнить до тех пор, пока не найду нужный результат.Я прочитал несколько битов о контроллере while, но нашел их бесполезными, поскольку они, кажется, просматривают жизненно важную информацию или используют более старую версию Jmeter

. В настоящее время я использую Jmeter 5.0 и пытался реализоватьКонтроллер while, но потерпел неудачу, так как, я думаю, я не понимаю, как правильно обработать ответ или даже захватить его, а затем использовать его в качестве сравнения, чтобы утверждать, существует ли элемент.

Я получаю ответ отОтвет на запрос HTTP, который выглядит примерно так:

{"data":{"getIDs":{"Page": 1,"PageSize": 25,"PageCount": 1,"isFirstPage": true,"batches":[{"id":"b601a257-13fe-4de3-b779-a5922e89765a"},{"id":"b601a257-13fe-4de3-b779-a5922e89765b"},{"id":"b601a257-13fe-4de3-b779-a5922e89765c"}]}}

Мне нужно вызывать конечную точку до тех пор, пока я не найду нужный идентификатор или отменить его после 10 попыток

1 Ответ

1 голос
/ 18 апреля 2019

Так что, немного повозившись со мной, я решил, что мой собственный ответ, похоже, работает хорошо.Но я бы посоветовал взглянуть на другие источники, прежде чем воспринимать мой как Евангелие.

Основная структура выглядит следующим образом:

Setup of loop

Внутри потока я устанавливаю переменные, а затем создаю цикл while как следующий шаг.В цикле While я создал счетчик, а затем добавил запрос, после которого я хотел выполнить цикл.Чтобы петля работала для меня, у меня есть три элемента, которые находятся под запросом.

  • Подтверждение ответа: эта проверка состояния 200, поскольку вызов никогда не должен прерываться
  • A Постоянный таймер: между опросами конечной точки существует задержка
  • Утверждение JSR223: используемый код groovy обеспечивает обработку логики цикла while

Переменные, определенные пользователем:

User Defined Variables

Здесь я настроил две переменные:

  • DONE: Done - строковое значение, которое я изменяю, если мое утверждение JSR223 находит нужные мне значения в HTTP-запросе
  • MyValue (это динамически определяется в моем реальном тесте, для демонстрации, я просто объявляю значение, которое нужно искать, например, 12345)

Пока контроллер:

While Controller

Я все еще чувствую, что не могу понять это правильно, однако после некоторого поиска в Google я наткнулся на следующий код, который работает для меня, несмотря нанекоторые ошибки в консоли JMeter:

${__javaScript(("${DONE}" != "yep" && ${Counter} < 10),)}

Этот код говорит, что цикл whileЯ буду продолжать до тех пор, пока не будет выполнено любое из этих двух условий:

  • DONE, ранее созданная переменная равна значению yep
  • Счетчик меньше 10 (Счетчикобъявлено под циклом while)

Счетчик:

Counter

это былпростой шаг настройки, который сработал, как только я понял, что он должен быть внутри цикла while, я настроил следующее:

  • Начальное значение = 1
  • Увеличение = 1
  • Имя экспортируемой переменной = Счетчик
  • Отметка «Счетчик дорожек независимо для каждого пользователя»
  • Отметка «Сброс счетчика на каждой итерации группы потоков»

(Имя экспортируемой переменной: вы можете называть это как угодно, для целей этой демонстрации я назвал его счетчиком)

JSR223 Утверждение:

JSR223 Assertion

Это простое утверждение сценария, которое просто использует логическое значение и паруоператоры для подтверждения состояния теста.

import org.apache.commons.lang3.StringUtils;

def done = vars.get("DONE");
String response = prev.getResponseDataAsString(); //retrieves the http request response as text
String MyValue = vars.get("MyValue");
def counter = vars.get("Counter");


//Find Substring within response string and stor result as boolean
String container = response;
String content = MyValue;
boolean containerContainsContent = StringUtils.containsIgnoreCase(container, content);

//Check if the true condition is met and change the value so the loop exits
if (containerContainsContent == true){
    log.info("------------------------Got Here");
    vars.put("DONE", "yep");

    }

//Force test to fail after 10 loops 
if (Counter.toString() == "10"){
    assert 1 == 2
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...