В этом руководстве по 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}
как показано ниже: