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 -

JMeter GUI Demo scriptJMeter GUI Demo script

And below is the JMX structure of it -

JMeter-jmx-demo-scriptJMeter 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-GUIDisabled 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

Disabled-threadgroup-in-JMeter-jmxEnabled 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-SamplerAPDEX 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 scriptUpdated 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 SamplerAPDEX 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.

Performance Testing : Few Takeaways

learning performance testing jmeter