JMeter error rate too high despite successful requests - jmeter

Update - Deleting the Aggregate report and rerunning the test now gives an error rate of 0. Why is this required?
I am using JMeter 4.0 to hit a REST web service with 20 thread groups by sending a POST request with a JSON body. All 20 requests succeed and give proper response (200 with a correct JSON body). Why is the error rate above 99%? (See image below). Also, why is no of samples is 10063 in report even though View Results Tree tab shows 20 HTTP requests (each with error count 0).

If you run JMeter test which assumes 20 HTTP Request and seeing > 10 000 in the listener - most probably you are opening an incorrect .jtl results file in the listener.
Double check that "Filename" input field is empty
Prior to running a new test make sure to clean "in-memory" results by choosing Run -> Clear All from JMeter's main menu (or click Control+E)
Be aware that using Listeners is a some form of a performance anti-pattern, they don't add any value but consume valuable system resources which can be either used for something else or left intact to save the trees. So:
Remove all the listeners from the test plan
Run your test in command-line non-GUI mode like:
jmeter -n -t test.jmx -l result.jtl
When your test is finished either open JMeter GUI and inspect the result.jtl file with the listener of your choice (you can load it using aforementioned "Filename" tab)
Or generate an HTML Reporting Dashboard out of the result.jtl file - it will contain statistical information, tables and charts outlining your test results.

View Results Tree since few versions only keep last 500 SampleResult and only refreshes every few seconds.
So the number of samples in view results tree is not the total.
Besides, you should never run a load test in GUI mode as it impacts negatively performances of Jmeter injection.
see this for best practices :
https://www.ubik-ingenierie.com/blog/jmeter_performance_tuning_tips/

Related

Injecting custom fields into JMeter report

I have a JMeter test that is invoking an API (send API) in an asynchronous manner. The result of the invocation is then available via the other API call (results API). When I consume results, I do have a metrics about several phases of processing in the JSON response, which I would like to push into the resulting JMeter report.
I would like to get averages for that data, not just average times on the overall end-to-end test.
Is it something that can be implemented in JMeter?
Injecting custom fields into .jtl results file can be done using sample_variables property
Given you have 2 JMeter Variables, i.e. foo and bar you can "tell" JMeter to add them to the results file by either adding next line to user.properties file
sample_variables=foo,bar
or passing the values via -J command-line argument like:
jmeter -Jsample_variables=foo,bar -n -t test.jmx -l result.jtl
Once your test finishes you will see 2 extra columns in the .jtl results file holding the values for foo and bar JMeter Variables, hopefully getting average for this data will not be a problem.
References:
Configuring JMeter
Apache JMeter Properties Customization Guide
This is a job for the Summary Report:
The summary report creates a table row for each differently named request in your test. This is similar to the Aggregate Report , except that it uses less memory
See example:
Average: It is the average time taken by all the samples to execute specific label. In our case, average time for Label 1 is 942 milliseconds & total average time is 584 milliseconds.

jmeter aggregation listener not producing aggregated results

I have a jmeter test plan that is composed of a single threadgroup a number of custom java request samplers as children of the thread group and an aggregation listener.
The aggregation listener is writing to a file which includes a row for each invocation of each one of the java samplers. However it is not performing or writing any aggregations.
The default summary however is being produced and written to the log and that contains the aggregated requests/per second etc that I would expect from the aggregation listener.
Can anyone tell me how to either :a) Get the aggregation listener to produce aggregations rather than just a csv file containing rows with the results of each java sampler request? b) Redirect the output of the default test summary to another file?
Don't use listeners as they don't add any value, they just create memory and disk IO overhead. You should be running your JMeter test in command-line non-GUI mode telling JMeter to store the results in a file using -l command-line argument like:
jmeter -n -t test.jmx -l results.jtl
Once your test is done you should be able to open results.jtl file with the listener of your choice and see the results and export them into a file if needed. See Greedy Listeners - Memory Leeches of Performance Testing guide for detailed explanation regarding why you should not be using JMeter Listeners for anything but tests development and/or debugging
If you need to generate the Aggregate Report in unattended manner without interim manual step you will need JMeterPluginsCMD Command Line Tool, using it you will be able to generate different tables and charts from the .jtl results files
For the moment you have only 2 options of storing summariser output: [stdout] (console)5 and jmeter.log file. You can play with JMeter log4j configuration to choose what you want to store there.
To get summarized results add to your test plan Generate Summary Results:
Generates a summary of the test run so far to the log file and/or standard output
Update interval in jmeter.properties to your needs
# interval between summaries (in seconds) default 3 minutes
#summariser.interval=30

In Summary report csv,how to add Average, Min and Max when running from console

When I run the test in GUI, i see the Average, Min, Max in GUI. But when I run in console, is there a way to add these to the csv file?
These values are being calculated so you will be able to see the values only when you open .jtl results file after test finishes in the listener of your choice, i.e. Aggregate Report or Summary Report.
If you want to see the interim statistics while your test is being executed you have the following choices:
JMeter Summarizer output. JMeter reports some numbers into stdout while your test is being running
You can get some extended information if you run your JMeter test using Taurus tool as a wrapper
Both console and web interface options are available, in order to see current test execution stats in browser start your test like:
bzt yourtest.jmx -report
And finally you can use Backend Listener to send your results into database, message queue or web service and use custom plotting application to print out either raw or parsed statistics, here you are limited only by your fantasy:
More information:
JMeter: Real Time Results
How to Use Grafana to Monitor JMeter Non-GUI Results
JMeter produces some basic fields/result_field. JMeter doesn't create everything you see in different types of Listeners.
You can give this a try.
Create a plan
Generate atleast 100 samples (As large amount of data is required for some listeners), using a single sampler (request)
Use as many Listeners as you want of different types (say 15 types of listeners)
Run the plan....
Now in the filename field of all the listeners give series of names of files like a1.jtl a2.jtl
and so on....
see the screen shot
enter image description here
Now again run the plan. Go to the files and open them in some good editors like notepad++.
For your surprise you will find the same data in all the files irrespective of the type of listener generating the file.
Crux of the matter is : JMeter gathers only handful of information from the run, the rest information which is shown in different Listeners is COMPUTED by the JMeter.
So you can read the *.jtl file into any of the listener.
In JMeter, the new way since 3.0 to have results is to use the Web report generated at end of test:
http://jmeter.apache.org/usermanual/generating-dashboard.html

Jmeter - View Results In Table and View Results In Tree differ

I am using the View Results in Table and View Results In Tree to view some results of a test.
My thread group has a number of users = 20; Rump up period =1; Loop=1000; This is a request to send the coordinates to server. After running these results differ. In View Results in Table displays error statuses:
But in View Results In Tree the result is successful, without errors:
What does it mean?
Problem with the view "Results in Tree" is that it doesnt show all Samples. It just shows the latest 500 sampels
From the User's Manual...
Starting with version 3.2 the number of entries in the View is restricted to the
value of the property view.results.tree.max_results which defaults to 500 entries. The old behaviour can be restored by setting the property to 0. Beware, that this might consume a lot of memory.
So the last 500 entires from your table should match with the tree. For more information you might wanna check this
You'll have to restart JMeter for it to apply the new setting
As per JMeter Changelog for version 3.2
Starting with JMeter version 3.2 the number of results in View Results Tree is limited by default to 500 entries. If you want more entries, you have to set the property view.results.tree.max_results to a higher value, or to 0, if you don't want to impose any limit. You can set the property in bin/user.properties. More info might be found here.
Add the next line to user.properties file (it lives in JMeter's "bin" folder)
view.results.tree.max_results=0
Restart JMeter to pick the property up
This way you will "tell" View Results Tree listener to show all the samplers (be aware that JMeter can fail to display 20 000 samplers in the View Results Tree listener)
Out of topic, but still important:
As per View Results Tree listener documentation
View Results Tree MUST NOT BE USED during load test as it consumes a lot of resources (memory and CPU). Use it only for either functional testing or during Test Plan debugging and Validation.
As far as I can see, you are running your test in GUI mode. Please don't, JMeter GUI should be used for tests development and debugging only, when it comes to test execution you should run your test in command-line non-GUI mode.

Autosaving Jmeter reports summary form non GUI

I'm using Jmeter for various performance and load tests and would like to save summary of Summary report and aggregate report automatically when test is done.
Usually summary table when you running form GUI looks like this :
Label | Samples | Average | Min |Max |Error |Throughput |etc.
When I use Write results to file/ Read form file filed , generated report will contain all http requests I generate, it can be millions. File would be huge and even then, no summary on the end . **No average time **
Same situation for aggregate report, I can not auto generate Summary of aggregate reports same as when you use GUI mode. Saved file contain all requests which is not useful at all.
Can I force Jmeter to save those two summaries when test is over ?
thanks in advance
First of all, don't run your test using GUI. Run your JMeter test using command-line non-GUI mode as
jmeter -n -t /path/to/testplan.jmx -l /path/to/results/jtl
Second, disable all the listeners during test run. Once test execution is finished you will be able to open JMeter's GUI, add Listener of your choice to Test Plan or Workbench and use "Browse" button to locate your results.jtl file.
JMeter cannot display only summary as all the "Total" fields are being calculated.
№ Samples - is count of all executed requests
Average - is arithmetical mean of all requests time (sum of all samples elapsed time divided by count)
etc. See JMeter Glossary for metrics explanation
So you got the idea right, it is better to store the necessary minimum, but you need to store something in order to be able to perform results analysis.
You can control what to store by amending properties which names start with jmeter.save.saveservice.. See jmeter.properties file in bin folder of your JMeter installation for the details.

Resources