Так что, немного повозившись со мной, я решил, что мой собственный ответ, похоже, работает хорошо.Но я бы посоветовал взглянуть на другие источники, прежде чем воспринимать мой как Евангелие.
Основная структура выглядит следующим образом:
Внутри потока я устанавливаю переменные, а затем создаю цикл while как следующий шаг.В цикле While я создал счетчик, а затем добавил запрос, после которого я хотел выполнить цикл.Чтобы петля работала для меня, у меня есть три элемента, которые находятся под запросом.
- Подтверждение ответа: эта проверка состояния 200, поскольку вызов никогда не должен прерываться
- A Постоянный таймер: между опросами конечной точки существует задержка
- Утверждение JSR223: используемый код groovy обеспечивает обработку логики цикла while
Переменные, определенные пользователем:
Здесь я настроил две переменные:
- DONE: Done - строковое значение, которое я изменяю, если мое утверждение JSR223 находит нужные мне значения в HTTP-запросе
- MyValue (это динамически определяется в моем реальном тесте, для демонстрации, я просто объявляю значение, которое нужно искать, например, 12345)
Пока контроллер:
Я все еще чувствую, что не могу понять это правильно, однако после некоторого поиска в Google я наткнулся на следующий код, который работает для меня, несмотря нанекоторые ошибки в консоли JMeter:
${__javaScript(("${DONE}" != "yep" && ${Counter} < 10),)}
Этот код говорит, что цикл whileЯ буду продолжать до тех пор, пока не будет выполнено любое из этих двух условий:
- DONE, ранее созданная переменная равна значению yep
- Счетчик меньше 10 (Счетчикобъявлено под циклом while)
Счетчик:
это былпростой шаг настройки, который сработал, как только я понял, что он должен быть внутри цикла while, я настроил следующее:
- Начальное значение = 1
- Увеличение = 1
- Имя экспортируемой переменной = Счетчик
- Отметка «Счетчик дорожек независимо для каждого пользователя»
- Отметка «Сброс счетчика на каждой итерации группы потоков»
(Имя экспортируемой переменной: вы можете называть это как угодно, для целей этой демонстрации я назвал его счетчиком)
JSR223 Утверждение:
Это простое утверждение сценария, которое просто использует логическое значение и паруоператоры для подтверждения состояния теста.
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
}