Переменные передачи JMeter между группами потоков

В этом руководстве по JMeter мы рассмотрим, как мы можем совместно использовать и передавать переменные между группами потоков.

При разработке сложных сценариев JMeter, скорее всего, у вас будет несколько групп потоков. Каждая группа потоков будет выполнять разные запросы.

Хороший пример этого - когда нам нужно аутентифицировать пользователей с помощью токенов на предъявителя. Одна группа потоков выполняет аутентификацию и сохраняет токен. Другой группе потоков необходимо получить доступ к этому токену и использовать его в другом запросе.


Следовательно, нам нужен механизм для передачи переменных между группами потоков.



Передача переменных между группами потоков в JMeter

В этом примере наш план тестирования будет иметь две группы потоков. Первая группа потоков делает запрос GET к веб-службе. Затем мы используем Экстрактор JSON плагин для анализа ответа JSON.


Используя JSONPath, мы извлекаем значение для определенного ключа и сохраняем его как переменную JMeter.

Вот так выглядит наш запрос JMeter:

Результат вышеуказанного запроса дает следующий ответ в формате JSON:


и наш JSONPath для извлечения первого URL-адреса выглядит так:

Значение запроса JSONPath сохраняется как first_url. Эта переменная доступна только в той же группе потоков, и мы можем получить ее значение, используя ${first_url}. Теперь, как мы собираемся сделать эту переменную доступной через другие группы потоков?


Ответ - использовать BeanShell Assertion чтобы сохранить переменную как глобальное свойство. Таким образом, мы можем передавать переменные между группами потоков.

Чтобы добавить утверждение BeanShell, щелкните правой кнопкой мыши План тестирования> Добавить> Утверждение> Утверждение BeanShell.

В нашем утверждении BeanShell мы можем ввести следующий код

${__setProperty(first_url, ${first_url})};


Теперь в группе потоков 2 мы можем получить доступ к этой переменной напрямую, используя ${__property(first_url)} как показано ниже:

Или мы можем использовать BeanShell PreProcessor для управления переменной:


В препроцессоре BeanShell мы можем получить доступ к переменной, переданной из другой группы потоков, используя props.get('name_of_variable'). Затем мы можем выполнить некоторые манипуляции со строкой и сохранить результат как новую переменную.

В приведенном выше примере мы удалили http:// из переменной, переданной из группы потоков 1, и мы сохраняем результат как переменную host.

Переменная host теперь является локальной для группы потоков 2 и получает прямой доступ к ней с помощью ${host} как показано ниже: