According to JMeter documentation:
16.12 Sharing variables between threads and thread groups
Variables are local to a thread a variable set in one thread cannot be read in
another. This is by design. For variables that can be determined
before a test starts, see Parameterising Tests (above). If the value
is not known until the test starts, there are various options:
- Store the variable as a property - properties are global to the
JMeter instance
- Write variables to a file and re-read them.
- Use the bsh.shared namespace - see 16.8.2 Sharing Variables
- Write your own Java classes
Another way to pass variable between the threads is to use jmeter-plugins as mentioned by Andrey Botalov below.
But I found that it is a bit confusing to use it first time but it gives full control of variable during passing from thread to thread.
Follow my example with BeanShell usage and you see how easy it is:
Next referring to sections in picture bellow:
(1.1) Here I created custom variable in User Defined Variables (or you can do it with BSF Proccessor - disabled in this example (1.2))
(2.1)(2.4)I successfully used variable in first thread - nothing special :)
(2.2)Added BeanShell PostProcessor and customized my variable
(2.3)Added it to queue
(3.1) In second thread - variable is taken from queue - with any name you want. But be careful, use wisely Timeout, because this thread will wait til previous finish so it can get modified variable (experiment with some long response)
(3.2)(3.3)(3,4)That repeated steps of using and modifying variable
(3.5) Variable is sent once again in new queue - so provide new name to it
(4.1)(4.2)(4.3) Grabbed modified variable from new queue works like charm
Warning
If you add more threads then add some Counter to Thread Group with variable and add this variable name to queue name - do the same in Thread Group where you try to catch queue so queue will have unique name for each thread (write a comment if you need some clearer explenation)
If you have more than one http Request in one Thread Group then add thread communication pre processor as a child of last (or other if you want to achieve some custom thing) http Request
Play, modify, customize to get best result :) Adding more threads can result in unwanted behavior so you need to be watchful.