Next Practical Step
Configure custom APDEX thresholds in user.properties and generate an updated HTML dashboard report with jmeter -g results.jtl -o ./report/.
Customize JMeter HTML Dashboard reports: configure APDEX thresholds per transaction, filter samplers, adjust percentiles, and add custom branding.
Apache JMeter includes a built-in HTML Dashboard Generator that transforms raw JTL/CSV execution logs into responsive, interactive web dashboards featuring APDEX ratings, response time percentiles, throughput curves, and error breakdowns.
While the default report is functional, performance engineers can customize APDEX satisfaction thresholds per transaction, filter internal samplers, adjust percentile granularities (p90, p95, p99), and customize report titles.
This guide explains how to customize your HTML dashboard generator via user.properties and CLI arguments.
jmeter -n -t plan.jmx -l results.jtl -e -o ./report/(The output folder ./report/ must be completely empty or non-existent).
jmeter -g results.jtl -o ./report/By default, JMeter uses a global APDEX satisfied threshold (T) of 500 ms and tolerated threshold (F) of 1500 ms:
≤ TT < response time ≤ F)> F or the request failedIn real applications, lightweight static requests should have T = 100 ms, while heavy database reports may tolerate T = 3000 ms.
In bin/user.properties (or passed via -J):
# Global default APDEX thresholds (in milliseconds)jmeter.reportgenerator.apdex_satisfied_threshold=500jmeter.reportgenerator.apdex_tolerated_threshold=1500
# Per-Transaction custom APDEX override (using regex sample name matching)jmeter.reportgenerator.apdex_per_transaction=^(Login|AuthToken)$:200,600;\ ^(Checkout_Payment)$:1000,3000;\ ^(Download_Report)$:5000,15000If your test plan contains health checks, debug requests, or token preparation calls that should not skew executive reporting metrics, filter them using regular expressions:
# Include only samplers matching patternjmeter.reportgenerator.exporter.html.series_filter=^(TC_|API_).*
# Exclude specific internal stepsjmeter.reportgenerator.exporter.html.series_filter=^(?!Debug_|Health_).*$By default, the dashboard displays 90th, 95th, and 99th percentiles in summary tables and charts. You can adjust these buckets in user.properties:
# Custom percentile values (e.g. 50th, 90th, 99.9th)jmeter.reportgenerator.statistic.percentiles=50,90,95,99,99.9
# Custom graph granulatity (in milliseconds) - default is 60000ms (1 minute)jmeter.reportgenerator.overall_granularity=10000(Setting granularity to 10000 (10 seconds) provides higher-resolution time-series response time and throughput graphs).
You can change the header title displayed on the generated web report:
# Custom report title in top navigation barjmeter.reportgenerator.report_title=Acme Core Banking API - Performance Benchmarkjmeter -n -t plan.jmx -l results.jtl -e -o ./report/ \ -Jjmeter.reportgenerator.report_title="Nightly Build Regression Report" \ -Jjmeter.reportgenerator.overall_granularity=15000/api/users/{id} instead of /api/users/12345). Dynamic names create thousands of distinct rows in the dashboard table, bloating HTML file size.jmeter.save.saveservice.output_format=csv) to allow fast parsing by the report generator.