JMeter - Execute specific components only on GUI and not CLI - debugging

I add several components for debugging as Debug Sampler, View Results Tree and JSR223 Sampler that are useful in GUI mode, but I want it to be ignored when running load test,
Is there such option of executing Sampler/Listener only in GUI mode and not in command line/"load" mode?

I am not sure that this is the exact answer you are looking for but still let me try. We know that JMeter script is nothing but xml in disguise and structure look like this.
So for every Jmeter component, there is enable property which needs to be true so that it will get executed as part of JMeter Test plan. Now if we can change this some properties which can be passed as parameter then we can make them disable at the run time.
Change in jmx will be reflected like this...
If you run this script in Non GUI mode with additional property passed as parameter, we essentially achieve what we want.
jmeter -n -t .\ExcludeJMeterComponent.jmx -l result.CSV -e -o "Output" -DenabledDebugComponents=false
Issue with this approach is, if you load this script again in JMeter, these values, manually edited jmx 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 must be doing] it will be very easy to add this changes in the script again in no time.
I will post this with more details once my blog is set up.

Found a workaround, to send in CLI JMeter property as -JignoreFirstSampler
Add If Controller as a parent of samplers to exclude checking if property is defined
${__isPropDefined(ignoreFirstSampler)}
The __isPropDefined function returns true if property exists or false if not.

Related

How to use Taurus to modify a jmeter script

I'm trying out taurus to run some existing jmeter scripts, setting various properties to local values.
I can use the -gui mode to load the modified script in the jmeter GUI and debug. However, I can't update this and replace the original file because Taurus has added two jtl data writers. I can suppress "Errors Writer" with e.g. -o execution.0.write-xml-jtl=none, but I can't see a way to suppress "KPI Writer". It's also possible further undesirable modifications have been made.
Is there a way to launch the GUI so that I can edit the original file, using the properties from the Taurus yaml file?
You cannot run the original jmeter scripts through bzt however it is possible to manipulate few properties of the newly generated jmx file through the yml file. Modified jmx is a copy of original script where two Listeners (errors and kpi) and variables from the yml.
It now depends on what exactly are you looking to change?

how to run tests as per respective suite in jmeter

I have created some testcases in Jmeter.
Now I want to run them separately example smoke testcases only.
Is there any way in Jmeter so I can run my JMeter project for a particular group/collection/suite only.
Is Jmeter provide any annotation or containers mechanism from where I can achieve same.
I have written my cases in Jmeter in below assertions
JSR223 Assertion
Response Code
Response Text
Any workaround will be helpful and appreciated in advance
The right way to module your JMeter scripts is to save small script in different JMXs and combined them by calling each or inside a bigger JMX file which uses Include Controller to execute different JMX files
The include controller is designed to use an external JMX file. To use it, create a Test Fragment underneath the Test Plan and add any desired samplers, controllers etc. below it. Then save the Test Plan. The file is now ready to be included as part of other Test Plans.
Inside JMX you can also use Module Controller to reduce code duplication
The Module Controller provides a mechanism for substituting test plan fragments into the current test plan at run-time.
If you want to execute specific test I suggest send specific properties and check the property inside an If Controller .
for example call with property jmeter -JexcludeTest1=true ...
And add an If Controller before test 1:
"${__P(excludeTest1)}" == "true"
The easiest way is using Taurus tool as a wrapper for your JMeter script, it has Modifications for Existing Scripts feature where you can define which test elements you want to enable/disable during test execution.
scenarios:
modification_example:
script: tests/jmx/dummy.jmx
modifications:
disable: # Names of the tree elements to disable
- Thread Group 1
enable: # Names of the tree elements to enable
- Thread Group 2
See Navigating your First Steps Using Taurus to get started.
Another option is putting requests you would like to enable/disable on demand under If Controllers so you could set "run/not run" condition dynamically.

JMeter aggregate report does not aggregate in non-gui mode

I have a JMeter test plan which is running two thread groups, with each thread group containing a controller and HTTP cookie manager. The controller is a custom controller, but I don't think this should affect JMeter's output.
Outside the two thread groups, I have an Aggregate Report component. Here is a screenshot of my TestPlan:
If I run the test in GUI mode, as you would expect, the Aggregate Report creates an.... aggregate report. That is, the results are aggregated on my test/sample labels, and I get one row for each test, and a range of attributes, as below:
I also have configured this Aggregate Report component to output to a file, by entering a filename in the "Filename" section, and pressing the "Configure" button and checking the attributes I'd like to be output (I've kept it simple for now with just the label, elapsed time and response code).
When I run my test from non-gui mode, this output file is the only way to view the results. However, the output file is rather useless and it does not aggregate the results, but instead gives me output similar to the usual jtl output, i.e. it doesn't aggregate the results at all. Pretty useless. Here is the top few lines of my output file, you can clearly see they are not aggregated:
778,HRLogin,200
426,HRLogin,200
784,HRLogin,200
...
So, the obvious question, am I doing something wrong here? Why is my aggregate report output not an aggregate report? Surely JMeter has a way for producing aggregate output in non-gui mode, without me adding any plug-in or extensions. For the record I need to script this process at some point, so opening a JTL in gui mode is not acceptable, I need this entire process to occur within non-gui JMeter and scripts.
Thanks!
The values you see in the Aggregate Report GUI are calculated from the raw data which is stored in the .jtl file.
If you need to make the process unattended, depending on metrics you need to obtain here are the options:
Since JMeter 3.0 there is a HTML Reporting Dashboard which contains some tables and charts. You can either generate a dashboard from existing results file or make it a part of your test. See Generating Reports chapter for the relevant commands.
Another way to get basic HTML report is running JMeter via Ant Task or Maven Plugin - in both cases you'll get test output like:
See Five Ways To Launch a JMeter Test without Using the JMeter GUI guide for details on configuring a JMeter test run through Ant and/or Maven. There is a number of pre-defined .xsl stylesheets in "extras" folder, you can take whatever you like and customize if needed.
You can also consider running your JMeter test via Taurus tool, it provides interactive console and web-based reporting and has few more options to export test results.

Overriding jmeter.properties

Is it possible to re-read jmeter.properties without closing and restarting JMeter?
Maybe any additional class that will trigger this process?
Sometimes I need to play with a property's values, and it is not convenient to restart JMeter every time, so I'd like to automate this process.
There is no need to re-read jmeter properties from file - jmeter has enough built-in functionality to read/set values of properties.
At least the following below:
jmeter functions:
_setProperty(),
_property(),
__P;
props - JMeterProperties (class java.util.Properties) - to access from beanshell code;
Property Display.
Look also into the following for more info and examples:
Using JMeter properties
How to set a javascript value as a JMeter property
Jmeter Wiki

How do I write a Jmeter script without using the GUI?

Is there a way to create a JMeter test plan without going through the GUI?
I.E. can you create a script with pure code?
In a way - yes. You can create the JMX file in a text editor, but it would require knowing what every component needs.
You're better off creating in GUI mode and modifying the JMX file manually as needed.
Yes it's possible to write a test plan just by writing JAVA code.
The key classes to look into are:
StandardJMeterEngine - the main class which configures the Test Plan and executes it
HashTree - a special collection which holds Test Plan elements
A minimum of JMeter Controllers necessary to run the test.
Reference: http://blazemeter.com/blog/5-ways-launch-jmeter-test-without-using-jmeter-gui
I can write and run JMeter without GUI. JMeter use JMX file, as you can here.
Not entirely sure why you would want to write a JMX in this way? ... But yes, entirely possible if you understand the structure of the document.
You could use any basic text editor to achieve this (notepad / notepad++ for example).
A JMX file is a saved JMeter project in XML format. ~ Ref
Depending on your needs you could the browser editor from the JMeter Plugins website.
jmeter-plugins.org/editor/
Or simply save a basic JMX as a template and spend loads of time learning the structure, syntax and namings etc.

Resources