Согласно документации JMeter:
16.12 Совместное использование переменных между потоками и группами потоков
Переменные являются локальными для потока, в котором невозможно прочитать переменную, установленную в одном потоке
другой. Это по замыслу. Для переменных, которые могут быть определены
перед началом теста см. Параметризация тестов (выше). Если значение
неизвестно до начала теста, есть различные варианты:
- Сохраните переменную как свойство - свойства являются глобальными для
Экземпляр JMeter
- Записать переменные в файл и перечитать их.
- Используйте пространство имен bsh.shared - см. 16.8.2 Совместное использование переменных
- Напишите свои собственные классы Java
Другой способ передать переменную между потоками - использовать jmeter-plugins, как , о котором Андрей Боталов упомянул ниже .
Но я обнаружил, что использовать его впервые немного сложно, но он дает полный контроль над переменной при передаче из потока в поток.
Следуйте моему примеру с использованием BeanShell, и вы увидите, насколько это просто:
Далее, ссылаясь на разделы на картинке ниже:
(1.1) Здесь я создал пользовательскую переменную в определяемых пользователем переменных (или вы можете сделать это с помощью BSF Proccessor - в этом примере отключен (1.2))
(2.1) (2.4) Я успешно использовал переменную в первом потоке - ничего особенного:)
(2.2) Добавлен BeanShell PostProcessor и настроена моя переменная
(2.3) Добавлено в очередь
(3.1) Во втором потоке - переменная берется из очереди - с любым именем, которое вы хотите. Но будьте осторожны, используйте мудро Timeout, потому что этот поток будет ждать до предыдущего завершения, чтобы он мог получить измененную переменную (поэкспериментируйте с некоторым длинным ответом)
(3.2) (3.3) (3,4) Это повторяет шаги использования и изменения переменной
(3.5) Переменная отправляется еще раз в новой очереди, поэтому укажите новое имя для нее
(4.1) (4.2) (4.3) Получение измененной переменной из новой очереди работает как charm
Внимание
Если вы добавите больше потоков, то добавьте некоторый счетчик в группу потоков с переменной и добавьте это имя переменной в имя очереди - сделайте то же самое в группе потоков, где вы пытаетесь перехватить очередь, чтобы у очереди было уникальное имя для каждого потока (напишите комментарий, если вам нужно более четкое объяснение)
Если у вас есть несколько запросов HTTP в одной группе потоков, добавьте предварительный процессор связи потоков в качестве дочернего элемента последнего (или другого, если вы хотите получить какую-то особую вещь) http Request
Играйте, изменяйте, настраивайте, чтобы получить лучший результат :) Добавление большего количества потоков может привести к нежелательному поведению, поэтому вам нужно быть внимательным.