Exclude JMeter Component at Runtime
This post in trying to be answer of one of the question on the stackoverflow.
As you may already know that, JMeter Scripts are saved with extension as jmx
which is nothing but a XML in disguise.
I have created sample JMeter Test Plan (also available on GitHub) for demonstration of this POC. Script looks like this -
And below is the JMX structure of it -
JMeter jmx demo script
you can see, all the JMeter components, XML tag highlighted in the picture, have property enabled
for which true
and false
are only two valid values. To see this in action I will disable one of the Thread group of JMeter Script.
Disabled threadgroup in JMeter GUI
Now see above change is also gets reflected in the jmx
file in the mentioned enabled
property for Thread Group in below code
Enabled property is changed got diabaled component in UI to false
So above simple analysis shows that if we want to toggle script at the runtime execution in CLI mode, we need to make the changes in jmx
file such that required component must be marked as false for enabled property.
I expect, some of you might also knew this. So to solve the problem at hand, we need to change the flag at run time and for that we can leverage host OS on which script is running or we can use below approach:
To see the required change in effective way, I’m executing above script first in non-gui mode using below command :
jmeter -n -t .\ExcludeJMeterComponent.jmx -l result.CSV -e -o "Output"
You can see the result generated by the command : all the samplers including JSR and Debug sampler got executed
APDEX Result with Debug Sampler.png
APDEX result of non-gui execution of demo script
Now, let’s go to the actual solution, I will edit the jmx
script in below way
Updated jmx file - demo script
Debug Sampler and View Result Tree is updated to consume property which can be passed as parameter in non GUI mode
Now I will re-execute the script in non gui mode sending additional property as below
jmeter -n -t .\ExcludeJMeterComponent.jmx -l result.CSV -e -o "Output" -DenabledDebugComponents=false
APDEX result of non-gui execution of demo script: You can see Debug sampler
Does not get execute.
APDEX Result WITHOUT Debug Sampler
Of course, if you load this script again in JMeter this values going to go away/get override with your next save but if you are using any version control system to keep track of your jmx
script [which you should] it will be very easy to add this changes in the script again.
There is one more solution which will be posted shortly to fix this issue but its dirty fix if you are not using CI tool.