The JMeter dashboard report is not just a static collection of graphs; it’s a dynamic, interactive HTML document that provides a comprehensive overview of your JMeter test execution.

Let’s see it in action. Imagine you’ve just run a JMeter test against a simple API endpoint. Your jmeter.log file might have entries like this:

2023-10-27 10:00:00,123 INFO o.a.j.t.JMeterThread: Thread Group 1-1 started on thread: Thread Group 1-1 #1
2023-10-27 10:00:00,456 INFO o.a.j.p.h.HTTPClient: Protocol: HTTP, Host: example.com, Port: 80, Path: /api/users, Method: GET
2023-10-27 10:00:01,789 INFO o.a.j.t.JMeterThread: Thread Group 1-1 finished on thread: Thread Group 1-1 #1

After the test completes, JMeter can generate an HTML report. You’d typically do this by adding the following to your jmeter.properties file (or passing it via the command line):

jmeter.save.saveservice.output_format=csv,jtl
jmeter.save.saveservice.autoflush=true
jmeter.save.saveservice.response_data=false
jmeter.save.saveservice.samplerData=false
jmeter.save.saveservice.requestHeaders=false
jmeter.save.saveservice.responseHeaders=false
jmeter.save.saveservice.bytes=true
jmeter.save.saveservice.sentBytes=true
jmeter.save.saveservice.assertionsResultTable=false
jmeter.save.saveservice.latency=true
jmeter.save.saveservice.connectTime=true
jmeter.save.saveservice.threadName=true
jmeter.save.saveservice.dataType=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.success=true
jmeter.save.saveservice.grpThreads=true
jmeter.save.saveservice.allThreads=true
jmeter.save.saveservice.URL=false
jmeter.save.saveservice.filename=test_results.jtl

And then running JMeter in non-GUI mode with the -g (generate report from existing JTL) and -o (output directory) flags:

./jmeter -g test_results.jtl -o dashboard_report

This command will process the test_results.jtl file and create a dashboard_report directory containing an index.html file and associated assets. Opening index.html in your browser reveals a dashboard with sections for:

  • Dashboard: An overview with key metrics like Average Response Time, Throughput, and Error Rate.
  • Charts: Various graphs, including Time vs. Threads, Response Times Over Time, and Throughput Over Time.
  • Errors: A breakdown of errors encountered during the test.
  • Statistics: Detailed tables of response times, throughput, and connect times for each sampler.
  • Latencies: A look at latency distribution.
  • Connect Times: Analysis of connection times.
  • Response Times: Distribution of response times.
  • Bytes Throughput: Data transfer volume.
  • Response Codes per Second: How often specific HTTP response codes were returned.
  • Response Codes Overview: A summary of response codes.
  • Latencies Overview: A summary of latencies.
  • Response Times Overview: A summary of response times.
  • Text Assertions: Results of any text assertions.
  • Duration Assertion: Results of any duration assertions.
  • Size Assertion: Results of any size assertions.
  • HTML Assertion: Results of any HTML assertions.
  • XML Assertion: Results of any XML assertions.
  • XPath Assertion: Results of any XPath assertions.
  • JSON Assertion: Results of any JSON assertions.
  • MD5 Assertion: Results of any MD5 assertions.
  • Compare Assertion: Results of any Compare assertions.
  • Beanshell Assertion: Results of any Beanshell assertions.
  • JSR223 Assertion: Results of any JSR223 assertions.
  • Aggregate Report: A summary of aggregated metrics.
  • Summary Report: A concise summary of test results.

The real power comes from the interactive nature. Hovering over a graph shows precise data points, and clicking on elements can often filter or highlight specific data. You can control the data JMeter saves to the JTL file using jmeter.save.saveservice.* properties in jmeter.properties. For instance, setting jmeter.save.saveservice.response_data=true will include the actual response bodies in your JTL, making the report much larger but potentially useful for debugging specific responses.

The dashboard report is generated by JMeter’s HtmlReporter listener. When you run JMeter with the -g and -o flags, it reads the specified JTL file, parses the results, and uses an embedded JavaScript charting library (typically Chart.js) to render the interactive HTML. The report generation process itself can consume significant memory and CPU for large result files, which is why it’s usually done after the test has finished, not during.

What most people don’t realize is that the report generation process is highly configurable. You can disable specific charts or sections by modifying the reportgenerator.properties file found in JMeter’s bin directory. For example, to disable the "Response Times Overview" chart, you’d find the line report.overview.charts=true and change it to report.overview.charts=false or remove the chart definition from the relevant property. This allows you to tailor the report to focus only on the metrics that matter most for your specific analysis, reducing generation time and report size.

The next logical step after analyzing your initial performance report is to understand how to integrate this report generation into your CI/CD pipeline for automated performance testing.

Want structured learning?

Take the full Jmeter course →