Я хочу разработать план тестирования JMeter 5 со следующей спецификацией:
Сначала вызовите HTTP Rest API A. Если код состояния от A не равен 200, продолжайте повторно вызывать A до тех пор, пока код состояния не станет 200. После первого успешного вызова A перейдите к вызову Rest API B.
Существует конфигурация набора данных CSV для API B, которая считывает файл CSV, каждая запись в CSV вызывает вызов API B. При достижении EOF JMeter должен автоматически выйти (прекратить работу).
API A необходимо вызывать каждые 10 минут, пока API B все еще вызывается (или JMeter все еще обрабатывает файл CSV).
Как достичь этой цели? Требуются 2 группы потоков или одна группа потоков может выполнять эту работу?
Пожалуйста, предоставьте подробную информацию, например, какие должны быть конфигурации для плана тестирования и группы (групп) потоков, последовательность элементов JMeter, таких как While Controller и т. д.
Целью плана тестирования является нагрузочное тестирование API B, поэтому несколько потоков могут вызывать API B, в то время как один поток используется для вызова API A.
Вам понадобится 2 группы потоков, чтобы выполнять запросы к API A и API B с разным количеством пользователей и параллелизмом.
Чтобы повторять запрос к API A до тех пор, пока код состояния ответа не станет 200:
Добавьте While Controller и используйте следующую функцию __groovy() в качестве условия:
${__groovy((vars.get('code') ?: 42) as int != 200,)}
Добавьте свой HTTP-запрос для API A в качестве дочернего элемента контроллера While.
Добавьте Boundary Extractor в качестве дочернего элемента HTTP-запроса и настройте его следующим образом:
Добавьте сэмплер Flow Control Action и настройте его на спящий режим в течение 600000 миллисекунд либо внутри цикла While, либо снаружи, в зависимости от вашего сценария.
Что касается остановки теста при достижении конца CSV-файла, это просто вопрос установки следующих параметров в конфигурации набора данных CSV:
Просто значение по умолчанию, во время первой итерации переменная code
будет null , поэтому я использовал оператор Groovy elvis , чтобы вернуть какое-то магическое число вместо нуля, чтобы избежать ошибок в файле jmeter.log . См. Apache Groovy: для чего используется Groovy? статья для получения дополнительной информации о сценариях Groovy в JMeter
Есть две основные проблемы. 1. Обе группы потоков запускаются параллельно, если API A терпит неудачу и занят повторной попыткой во время вызова lopp, API B. API B во второй группе потоков не должен вызываться до тех пор, пока API A не будет успешно завершен. 2. когда API B завершен (достигнут EOF csv), вторая группа потоков завершается, но первая группа потоков продолжает работать. Требование состоит в том, что когда API B завершен, программа должна завершиться.
Действие управления потоком с задержкой 600000 миллисекунд и выбранной паузой находится на том же уровне, что и контроллер «Пока», т.е. является родственным, а не дочерним по отношению к контроллеру «Пока». первая группа потоков для API A имеет выбранный Contniue и 1 поток, а нарастание равно 1, а количество циклов выбрано Infinite и выбран тот же пользователь на каждой итерации. Вторая группа потоков имеет 2 потока, наращивание равно 1, а количество циклов бесконечно, Выбирается один и тот же пользователь на каждой итерации.
Чтобы запустить API B только в случае успешного выполнения API A, вы можете использовать Плагин межпоточной связи . Чтобы остановить тест, когда в CSV-файле нет значений, используйте While Controller (см. главу «Чтение всех значений из CSV и продолжение»). Затем используйте Sampler Action Control Flow с логическим действием Stop
спасибо за комментарий. Я добавил действие управления потоком с логическим действием stop и target All threads сразу после контроллера while, т.е. оно должно выполняться только после выхода из цикла while. Но он не выполняется, программа продолжает работать после EOF файла csv.
Спасибо за ответ. Что означает число 42 в vars.get('code') ?: 42?