План тестирования JMeter для вызова API A, а затем API B, как это сделать?

Я хочу разработать план тестирования 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.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Вам понадобится 2 группы потоков, чтобы выполнять запросы к API A и API B с разным количеством пользователей и параллелизмом.

  2. Чтобы повторять запрос к 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, либо снаружи, в зависимости от вашего сценария.

  3. Что касается остановки теста при достижении конца CSV-файла, это просто вопрос установки следующих параметров в конфигурации набора данных CSV:

Спасибо за ответ. Что означает число 42 в vars.get('code') ?: 42?

ace 21.11.2022 02:45

Просто значение по умолчанию, во время первой итерации переменная code будет null , поэтому я использовал оператор Groovy elvis , чтобы вернуть какое-то магическое число вместо нуля, чтобы избежать ошибок в файле jmeter.log . См. Apache Groovy: для чего используется Groovy? статья для получения дополнительной информации о сценариях Groovy в JMeter

Dmitri T 21.11.2022 10:09

Есть две основные проблемы. 1. Обе группы потоков запускаются параллельно, если API A терпит неудачу и занят повторной попыткой во время вызова lopp, API B. API B во второй группе потоков не должен вызываться до тех пор, пока API A не будет успешно завершен. 2. когда API B завершен (достигнут EOF csv), вторая группа потоков завершается, но первая группа потоков продолжает работать. Требование состоит в том, что когда API B завершен, программа должна завершиться.

ace 21.11.2022 15:52

Действие управления потоком с задержкой 600000 миллисекунд и выбранной паузой находится на том же уровне, что и контроллер «Пока», т.е. является родственным, а не дочерним по отношению к контроллеру «Пока». первая группа потоков для API A имеет выбранный Contniue и 1 поток, а нарастание равно 1, а количество циклов выбрано Infinite и выбран тот же пользователь на каждой итерации. Вторая группа потоков имеет 2 потока, наращивание равно 1, а количество циклов бесконечно, Выбирается один и тот же пользователь на каждой итерации.

ace 21.11.2022 20:36

Чтобы запустить API B только в случае успешного выполнения API A, вы можете использовать Плагин межпоточной связи . Чтобы остановить тест, когда в CSV-файле нет значений, используйте While Controller (см. главу «Чтение всех значений из CSV и продолжение»). Затем используйте Sampler Action Control Flow с логическим действием Stop

Dmitri T 22.11.2022 08:10

спасибо за комментарий. Я добавил действие управления потоком с логическим действием stop и target All threads сразу после контроллера while, т.е. оно должно выполняться только после выхода из цикла while. Но он не выполняется, программа продолжает работать после EOF файла csv.

ace 22.11.2022 19:08

Другие вопросы по теме