Modified: jmeter/trunk/docs/usermanual/generating-dashboard.html URL: http://svn.apache.org/viewvc/jmeter/trunk/docs/usermanual/generating-dashboard.html?rev=1808646&r1=1808645&r2=1808646&view=diff ============================================================================== --- jmeter/trunk/docs/usermanual/generating-dashboard.html (original) +++ jmeter/trunk/docs/usermanual/generating-dashboard.html Sun Sep 17 18:22:16 2017 @@ -1,63 +1,374 @@ <!DOCTYPE html SYSTEM "about:legacy-compat"> -<html lang="en"><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-15"><title>Apache JMeter +<html lang="en"> +<head> +<META http-equiv="Content-Type" content="text/html; charset=iso-8859-15"> +<title>Apache JMeter - - User's Manual: Generating Dashboard Report</title><meta name="viewport" content="width=device-width, initial-scale=1"><link href="http://fonts.googleapis.com/css?family=Merriweather:400normal" rel="stylesheet" type="text/css"><link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css"><link rel="stylesheet" type="text/css" href="../css/new-style.css"><link rel="apple-touch-icon-precomposed" href="../images/apple-touch-icon.png"><link rel="icon" href="../images/favicon.png"><meta name="msapplication-TileColor" content="#ffffff"><meta name="msapplication-TileImage" content="../images/mstile-144x144.png"><meta name="theme-color" content="#ffffff"></head><body role="document"><a href="#content" class="hidden">Main content</a><div class="header"><!-- + User's Manual: Generating Dashboard Report</title> +<meta name="viewport" content="width=device-width, initial-scale=1"> +<link href="http://fonts.googleapis.com/css?family=Merriweather:400normal" rel="stylesheet" type="text/css"> +<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css"> +<link rel="stylesheet" type="text/css" href="../css/new-style.css"> +<link rel="apple-touch-icon-precomposed" href="../images/apple-touch-icon.png"> +<link rel="icon" href="../images/favicon.png"> +<meta name="msapplication-TileColor" content="#ffffff"> +<meta name="msapplication-TileImage" content="../images/mstile-144x144.png"> +<meta name="theme-color" content="#ffffff"> +</head> +<body role="document"> +<a href="#content" class="hidden">Main content</a> +<div class="header"> +<!-- APACHE LOGO - --><div><a href="http://www.apache.org"><img title="Apache Software Foundation" class="asf-logo logo" src="../images/asf-logo.svg" alt="Logo ASF"></a></div><!-- + --> +<div> +<a href="http://www.apache.org"><img title="Apache Software Foundation" class="asf-logo logo" src="../images/asf-logo.svg" alt="Logo ASF"></a> +</div> +<!-- PROJECT LOGO - --><div><a href="http://jmeter.apache.org/"><img class="logo" src="../images/logo.svg" alt="Apache JMeter"></a></div><div class="banner"><a href="http://www.apache.org/events/current-event.html"><img src="http://www.apache.org/events/current-event-234x60.png" alt="Current Apache event teaser"></a><div class="clear"></div></div></div><div class="nav"><ul class="menu"><li onClick="return true"><div class="menu-title">About</div><ul><li><a href="../index.html">Overview</a></li><li><a href="http://www.apache.org/licenses/">License</a></li></ul></li></ul><ul class="menu"><li onClick="return true"><div class="menu-title">Download</div><ul><li><a href="../download_jmeter.cgi">Download Releases</a></li><li><a href="../changes.html">Release Notes</a></li></ul></li></ul><ul class="menu"><li onClick="return true"><div class="menu-title">Documentation</div><ul><li><a href="../usermanual/get-started.html">Get Started</a></li><li><a href="../usermanual/index.html">User Manual</a></li> <li><a href="../usermanual/best-practices.html">Best Practices</a></li><li><a href="../usermanual/component_reference.html">Component Reference</a></li><li><a href="../usermanual/functions.html">Functions Reference</a></li><li><a href="../usermanual/properties_reference.html">Properties Reference</a></li><li><a href="../changes_history.html">Change History</a></li><li><a href="../api/index.html">Javadocs</a></li><li><a href="http://wiki.apache.org/jmeter">JMeter Wiki</a></li><li><a href="http://wiki.apache.org/jmeter/JMeterFAQ">FAQ (Wiki)</a></li></ul></li></ul><ul class="menu"><li onClick="return true"><div class="menu-title">Tutorials</div><ul><li><a href="../usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a></li><li><a href="../usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a></li><li><a href="../usermanual/junitsampler_tutorial.html">JUnit Sampler</a></li><li><a href="../usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a></li><li><a href="../usermanual/jmeter_tutorial.html">Extending JMeter</a></li></ul></li></ul><ul class="menu"><li onClick="return true"><div class="menu-title">Community</div><ul><li><a href="../issues.html">Issue Tracking</a></li><li><a href="../mail.html">Mailing Lists</a></li><li><a href="../svnindex.html">Source Repositories</a></li><li><a href="../building.html">Building and Contributing</a></li><li><a href="https://projects.apache.org/project.html?jmeter">Project info at Apache</a></li><li><a href="http://wiki.apache.org/jmeter/JMeterCommitters">Contributors</a></li></ul></li></ul><ul class="menu"><li onClick="return true"><div class="menu-title">Foundation</div><ul><li><a href="http://www.apache.org/">ASF</a></li><li><a href="http://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a></li><li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>< /ul></li></ul></div><div class="main" id="content"><div class="social-media"><ul class="social-media-links"><li class="twitter"><a href="https://twitter.com/ApacheJMeter" title="Follow us on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i>Twitter</a></li><li class="github"><a href="https://github.com/apache/jmeter" title="Fork us on github"><i class="fa fa-github" aria-hidden="true"></i>github</a></li></ul></div><ul class="pagelinks"><li><a href="remote-test.html">< Prev</a></li><li><a href="../index.html">Index</a></li><li><a href="realtime-results.html">Next ></a></li></ul><div class="section"><h1 id="generation">15. Generating Report Dashboard<a class="sectionlink" href="#generation" title="Link to here">¶</a></h1> - <p>JMeter supports dashboard report generation to get graphs and + --> +<div> +<a href="http://jmeter.apache.org/"><img class="logo" src="../images/logo.svg" alt="Apache JMeter"></a> +</div> +<div class="banner"> +<a href="http://www.apache.org/events/current-event.html"><img src="http://www.apache.org/events/current-event-234x60.png" alt="Current Apache event teaser"></a> +<div class="clear"></div> +</div> +</div> +<div class="nav"> +<ul class="menu"> +<li onClick="return true"> +<div class="menu-title">About</div> +<ul> +<li> +<a href="../index.html">Overview</a> +</li> +<li> +<a href="http://www.apache.org/licenses/">License</a> +</li> +</ul> +</li> +</ul> +<ul class="menu"> +<li onClick="return true"> +<div class="menu-title">Download</div> +<ul> +<li> +<a href="../download_jmeter.cgi">Download Releases</a> +</li> +<li> +<a href="../changes.html">Release Notes</a> +</li> +</ul> +</li> +</ul> +<ul class="menu"> +<li onClick="return true"> +<div class="menu-title">Documentation</div> +<ul> +<li> +<a href="../usermanual/get-started.html">Get Started</a> +</li> +<li> +<a href="../usermanual/index.html">User Manual</a> +</li> +<li> +<a href="../usermanual/best-practices.html">Best Practices</a> +</li> +<li> +<a href="../usermanual/component_reference.html">Component Reference</a> +</li> +<li> +<a href="../usermanual/functions.html">Functions Reference</a> +</li> +<li> +<a href="../usermanual/properties_reference.html">Properties Reference</a> +</li> +<li> +<a href="../changes_history.html">Change History</a> +</li> +<li> +<a href="../api/index.html">Javadocs</a> +</li> +<li> +<a href="http://wiki.apache.org/jmeter">JMeter Wiki</a> +</li> +<li> +<a href="http://wiki.apache.org/jmeter/JMeterFAQ">FAQ (Wiki)</a> +</li> +</ul> +</li> +</ul> +<ul class="menu"> +<li onClick="return true"> +<div class="menu-title">Tutorials</div> +<ul> +<li> +<a href="../usermanual/jmeter_distributed_testing_step_by_step.html">Distributed Testing</a> +</li> +<li> +<a href="../usermanual/jmeter_proxy_step_by_step.html">Recording Tests</a> +</li> +<li> +<a href="../usermanual/junitsampler_tutorial.html">JUnit Sampler</a> +</li> +<li> +<a href="../usermanual/jmeter_accesslog_sampler_step_by_step.html">Access Log Sampler</a> +</li> +<li> +<a href="../usermanual/jmeter_tutorial.html">Extending JMeter</a> +</li> +</ul> +</li> +</ul> +<ul class="menu"> +<li onClick="return true"> +<div class="menu-title">Community</div> +<ul> +<li> +<a href="../issues.html">Issue Tracking</a> +</li> +<li> +<a href="http://www.apache.org/security/">Security</a> +</li> +<li> +<a href="../mail.html">Mailing Lists</a> +</li> +<li> +<a href="../svnindex.html">Source Repositories</a> +</li> +<li> +<a href="../building.html">Building and Contributing</a> +</li> +<li> +<a href="https://projects.apache.org/project.html?jmeter">Project info at Apache</a> +</li> +<li> +<a href="http://wiki.apache.org/jmeter/JMeterCommitters">Contributors</a> +</li> +</ul> +</li> +</ul> +<ul class="menu"> +<li onClick="return true"> +<div class="menu-title">Foundation</div> +<ul> +<li> +<a href="http://www.apache.org/">The Apache Software Foundation (ASF)</a> +</li> +<li> +<a href="http://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a> +</li> +<li> +<a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a> +</li> +<li> +<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> +</li> +</ul> +</li> +</ul> +</div> +<div class="main" id="content"> +<div class="social-media"> +<ul class="social-media-links"> +<li class="twitter"> +<a href="https://twitter.com/ApacheJMeter" title="Follow us on Twitter"><i class="fa fa-twitter" aria-hidden="true"></i>Twitter</a> +</li> +<li class="github"> +<a href="https://github.com/apache/jmeter" title="Fork us on github"><i class="fa fa-github" aria-hidden="true"></i>github</a> +</li> +</ul> +</div> +<ul class="pagelinks"> +<li> +<a href="remote-test.html">< Prev</a> +</li> +<li> +<a href="../index.html">Index</a> +</li> +<li> +<a href="realtime-results.html">Next ></a> +</li> +</ul> +<div class="section"> +<h1 id="generation">14. Generating Report Dashboard<a class="sectionlink" href="#generation" title="Link to here">¶</a> +</h1> + +<p>JMeter supports dashboard report generation to get graphs and statistics from a test plan.<br> This chapter describes how to configure and use the generator.</p> - <div class="subsection"><h2 id="overview">15.1 Overview<a class="sectionlink" href="#overview" title="Link to here">¶</a></h2> - <p>The dashboard generator is a modular extension of JMeter. + +<div class="subsection"> +<h2 id="overview">14.1 Overview<a class="sectionlink" href="#overview" title="Link to here">¶</a> +</h2> + +<p>The dashboard generator is a modular extension of JMeter. Its default behavior is to read and process samples from CSV files to generate HTML files containing graph views. It can generate the report at end of a load test or on demand. </p> - <p> + +<p> This report provides the following metrics: <ul> - <li><a href="https://en.wikipedia.org/wiki/Apdex" title="Application Performance Index" target="_blank">APDEX</a> (Application Performance Index) table that computes for every transaction the APDEX based on configurable values for tolerated and satisfied thresholds</li> - <li>A request summary graph showing the Success and failed requests (Transaction Controller Sample Results are not taken into account) percentage: <figure><a href="../images/screenshots/dashboard/report_apdex_and_summary.png"><img src="../images/screenshots/dashboard/report_apdex_and_summary.png" width="1636" height="982" alt=""></a><figcaption></figcaption></figure></li> - <li>A Statistics table providing in one table a summary of all metrics per transaction including 3 configurable percentiles : <figure><a href="../images/screenshots/dashboard/report_statistics.png"><img src="../images/screenshots/dashboard/report_statistics.png" width="1639" height="467" alt=""></a><figcaption></figcaption></figure></li> - <li>An error table providing a summary of all errors and their proportion in the total requests : <figure><a href="../images/screenshots/dashboard/report_errors.png"><img src="../images/screenshots/dashboard/report_errors.png" width="1344" height="455" alt=""></a><figcaption></figcaption></figure></li> - <li>A Top 5 Errors by Sampler table providing for every Sampler (excluding Transaction Controller by default) the top 5 Errors : <figure><a href="../images/screenshots/dashboard/top_5_errors_by_sampler.png"><img src="../images/screenshots/dashboard/top_5_errors_by_sampler.png" width="1609" height="508" alt=""></a><figcaption></figcaption></figure></li> - <li>Zoomable chart where you can check/uncheck every transaction to show/hide it for: + +<li> +<a href="https://en.wikipedia.org/wiki/Apdex" title="Application Performance Index" target="_blank">APDEX</a> (Application Performance Index) table that computes for every transaction the APDEX based on configurable values for tolerated and satisfied thresholds</li> + +<li>A request summary graph showing the Success and failed requests (Transaction Controller Sample Results are not taken into account) percentage: <figure> +<a href="../images/screenshots/dashboard/report_apdex_and_summary.png"><img src="../images/screenshots/dashboard/report_apdex_and_summary.png" width="1636" height="982" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>A Statistics table providing in one table a summary of all metrics per transaction including 3 configurable percentiles : <figure> +<a href="../images/screenshots/dashboard/report_statistics.png"><img src="../images/screenshots/dashboard/report_statistics.png" width="1639" height="467" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>An error table providing a summary of all errors and their proportion in the total requests : <figure> +<a href="../images/screenshots/dashboard/report_errors.png"><img src="../images/screenshots/dashboard/report_errors.png" width="1344" height="455" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>A Top 5 Errors by Sampler table providing for every Sampler (excluding Transaction Controller by default) the top 5 Errors : <figure> +<a href="../images/screenshots/dashboard/top_5_errors_by_sampler.png"><img src="../images/screenshots/dashboard/top_5_errors_by_sampler.png" width="1609" height="508" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Zoomable chart where you can check/uncheck every transaction to show/hide it for: <ul> - <li>Response times Over Time (Includes Transaction Controller Sample Results) : <figure><a href="../images/screenshots/dashboard/report_response_times_over_time.png"><img src="../images/screenshots/dashboard/report_response_times_over_time.png" width="1398" height="566" alt=""></a><figcaption></figcaption></figure></li> - <li>Response times Percentiles Over Time (successful responses only) : <figure><a href="../images/screenshots/dashboard/response_time_percentiles_over_time.png"><img src="../images/screenshots/dashboard/response_time_percentiles_over_time.png" width="1640" height="539" alt=""></a><figcaption></figcaption></figure></li> - <li>Active Threads Over Time : <figure><a href="../images/screenshots/dashboard/report_active_threads_over_time.png"><img src="../images/screenshots/dashboard/report_active_threads_over_time.png" width="1638" height="544" alt=""></a><figcaption></figcaption></figure></li> - <li>Bytes throughput Over Time (Ignores Transaction Controller Sample Results) : <figure><a href="../images/screenshots/dashboard/report_bytes_throughput_over_time.png"><img src="../images/screenshots/dashboard/report_bytes_throughput_over_time.png" width="1373" height="543" alt=""></a><figcaption></figcaption></figure></li> - <li>Latencies Over Time (Includes Transaction Controller Sample Results) : <figure><a href="../images/screenshots/dashboard/report_latencies_over_time.png"><img src="../images/screenshots/dashboard/report_latencies_over_time.png" width="1373" height="547" alt=""></a><figcaption></figcaption></figure></li> - <li>Connect Time Over Time (Includes Transaction Controller Sample Results) : <figure><a href="../images/screenshots/dashboard/report_connect_time_over_time.png"><img src="../images/screenshots/dashboard/report_connect_time_over_time.png" width="1635" height="520" alt=""></a><figcaption></figcaption></figure></li> - <li>Hits per second (Ignores Transaction Controller Sample Results): <figure><a href="../images/screenshots/dashboard/report_hits_per_second.png"><img src="../images/screenshots/dashboard/report_hits_per_second.png" width="1375" height="552" alt=""></a><figcaption></figcaption></figure></li> - <li>Response codes per second (Ignores Transaction Controller Sample Results): <figure><a href="../images/screenshots/dashboard/report_codes_per_second.png"><img src="../images/screenshots/dashboard/report_codes_per_second.png" width="1380" height="558" alt=""></a><figcaption></figcaption></figure></li> - <li>Transactions per second (Includes Transaction Controller Sample Results): <figure><a href="../images/screenshots/dashboard/report_transactions_per_second.png"><img src="../images/screenshots/dashboard/report_transactions_per_second.png" width="1372" height="577" alt=""></a><figcaption></figcaption></figure></li> - <li>Response Time vs Request per second (Ignores Transaction Controller Sample Results): <figure><a href="../images/screenshots/dashboard/report_response_time_vs_request.png"><img src="../images/screenshots/dashboard/report_response_time_vs_request.png" width="1380" height="545" alt=""></a><figcaption></figcaption></figure></li> - <li>Latency vs Request per second (Ignores Transaction Controller Sample Results): <figure><a href="../images/screenshots/dashboard/report_latencies_vs_request.png"><img src="../images/screenshots/dashboard/report_latencies_vs_request.png" width="1373" height="543" alt=""></a><figcaption></figcaption></figure></li> - <li>Response time Overview (Excludes Transaction Controller Sample Results) : <figure><a href="../images/screenshots/dashboard/response_time_overview.png"><img src="../images/screenshots/dashboard/response_time_overview.png" width="1645" height="562" alt=""></a><figcaption></figcaption></figure></li> - <li>Response times percentiles (Includes Transaction Controller Sample Results): <figure><a href="../images/screenshots/dashboard/report_response_time_percentiles.png"><img src="../images/screenshots/dashboard/report_response_time_percentiles.png" width="1374" height="551" alt=""></a><figcaption></figcaption></figure></li> - <li>Times vs Threads (Includes Transaction Controller Sample Results): <figure><a href="../images/screenshots/dashboard/report_time_vs_threads.png"><img src="../images/screenshots/dashboard/report_time_vs_threads.png" width="1373" height="567" alt=""></a><figcaption></figcaption></figure> - <div class="clear"></div><div class="note">In distributed mode, this graph shows a horizontal axis the number of threads for 1 server. It's a current limitation</div><div class="clear"></div> - </li> - <li>Response Time Distribution (Includes Transaction Controller Sample Results): <figure><a href="../images/screenshots/dashboard/report_response_time_distribution.png"><img src="../images/screenshots/dashboard/report_response_time_distribution.png" width="1373" height="549" alt=""></a><figcaption></figcaption></figure></li> - </ul> - </li> - </ul> - </p> + +<li>Response times Over Time (Includes Transaction Controller Sample Results) : <figure> +<a href="../images/screenshots/dashboard/report_response_times_over_time.png"><img src="../images/screenshots/dashboard/report_response_times_over_time.png" width="1398" height="566" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Response times Percentiles Over Time (successful responses only) : <figure> +<a href="../images/screenshots/dashboard/response_time_percentiles_over_time.png"><img src="../images/screenshots/dashboard/response_time_percentiles_over_time.png" width="1640" height="539" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Active Threads Over Time : <figure> +<a href="../images/screenshots/dashboard/report_active_threads_over_time.png"><img src="../images/screenshots/dashboard/report_active_threads_over_time.png" width="1638" height="544" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Bytes throughput Over Time (Ignores Transaction Controller Sample Results) : <figure> +<a href="../images/screenshots/dashboard/report_bytes_throughput_over_time.png"><img src="../images/screenshots/dashboard/report_bytes_throughput_over_time.png" width="1373" height="543" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Latencies Over Time (Includes Transaction Controller Sample Results) : <figure> +<a href="../images/screenshots/dashboard/report_latencies_over_time.png"><img src="../images/screenshots/dashboard/report_latencies_over_time.png" width="1373" height="547" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Connect Time Over Time (Includes Transaction Controller Sample Results) : <figure> +<a href="../images/screenshots/dashboard/report_connect_time_over_time.png"><img src="../images/screenshots/dashboard/report_connect_time_over_time.png" width="1635" height="520" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Hits per second (Ignores Transaction Controller Sample Results): <figure> +<a href="../images/screenshots/dashboard/report_hits_per_second.png"><img src="../images/screenshots/dashboard/report_hits_per_second.png" width="1375" height="552" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Response codes per second (Ignores Transaction Controller Sample Results): <figure> +<a href="../images/screenshots/dashboard/report_codes_per_second.png"><img src="../images/screenshots/dashboard/report_codes_per_second.png" width="1380" height="558" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Transactions per second (Includes Transaction Controller Sample Results): <figure> +<a href="../images/screenshots/dashboard/report_transactions_per_second.png"><img src="../images/screenshots/dashboard/report_transactions_per_second.png" width="1372" height="577" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Response Time vs Request per second (Ignores Transaction Controller Sample Results): <figure> +<a href="../images/screenshots/dashboard/report_response_time_vs_request.png"><img src="../images/screenshots/dashboard/report_response_time_vs_request.png" width="1380" height="545" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Latency vs Request per second (Ignores Transaction Controller Sample Results): <figure> +<a href="../images/screenshots/dashboard/report_latencies_vs_request.png"><img src="../images/screenshots/dashboard/report_latencies_vs_request.png" width="1373" height="543" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Response time Overview (Excludes Transaction Controller Sample Results) : <figure> +<a href="../images/screenshots/dashboard/response_time_overview.png"><img src="../images/screenshots/dashboard/response_time_overview.png" width="1645" height="562" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Response times percentiles (Includes Transaction Controller Sample Results): <figure> +<a href="../images/screenshots/dashboard/report_response_time_percentiles.png"><img src="../images/screenshots/dashboard/report_response_time_percentiles.png" width="1374" height="551" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +<li>Times vs Threads (Includes Transaction Controller Sample Results): <figure> +<a href="../images/screenshots/dashboard/report_time_vs_threads.png"><img src="../images/screenshots/dashboard/report_time_vs_threads.png" width="1373" height="567" alt=""></a> +<figcaption></figcaption> +</figure> + +<div class="clear"></div> +<div class="note">In distributed mode, this graph shows a horizontal axis the number of threads for 1 server. It's a current limitation</div> +<div class="clear"></div> + +</li> + +<li>Response Time Distribution (Includes Transaction Controller Sample Results): <figure> +<a href="../images/screenshots/dashboard/report_response_time_distribution.png"><img src="../images/screenshots/dashboard/report_response_time_distribution.png" width="1373" height="549" alt=""></a> +<figcaption></figcaption> +</figure> +</li> + +</ul> + +</li> - </div> - <div class="subsection"><h2 id="configuration">15.2 Configuring Dashboard Generation<a class="sectionlink" href="#configuration" title="Link to here">¶</a></h2> - <p> +</ul> + +</p> + + +</div> + +<div class="subsection"> +<h2 id="configuration">14.2 Configuring Dashboard Generation<a class="sectionlink" href="#configuration" title="Link to here">¶</a> +</h2> + +<p> Dashboard generation uses JMeter properties to customize the report. Some properties are used for general settings and others are used for a particular graph configuration or exporter configuration. - <div class="clear"></div><div class="note">All report generator properties can be found in file <span class="code">reportgenerator.properties</span>. - To customize these properties, you should copy them in <span class="code">user.properties</span> file and modify them.</div><div class="clear"></div> - </p> - <div class="subsection"><h2 id="configuration_requirements">15.2.1 Requirements<a class="sectionlink" href="#configuration_requirements" title="Link to here">¶</a></h2> - <p> + <div class="clear"></div> +<div class="note">All report generator properties can be found in file <span class="code">reportgenerator.properties</span>. + To customize these properties, you should copy them in <span class="code">user.properties</span> file and modify them.</div> +<div class="clear"></div> + +</p> + +<div class="subsection"> +<h2 id="configuration_requirements">14.2.1 Requirements<a class="sectionlink" href="#configuration_requirements" title="Link to here">¶</a> +</h2> + +<p> To enable the generator to operate, the input CSV files must include certain required data. Check that your JMeter configuration follows these settings (these are the defaults): @@ -80,149 +391,297 @@ jmeter.save.saveservice.timestamp_format # Or the following would also be suitable jmeter.save.saveservice.timestamp_format = yyyy/MM/dd HH:mm:ss </pre> - <div class="clear"></div><div class="note"> + +<div class="clear"></div> +<div class="note"> The input CSV file must include the timeStamp - </div><div class="clear"></div> - <div class="clear"></div><div class="note"> + </div> +<div class="clear"></div> + +<div class="clear"></div> +<div class="note"> To ensure most accurate results, if you use a transaction controller, uncheck the box: <span class="code">Generate parent sample</span> - <figure><a href="../images/screenshots/transactioncontroller.png"><img src="../images/screenshots/transactioncontroller.png" width="" height="" alt=""></a><figcaption></figcaption></figure> - </div><div class="clear"></div> - <div class="clear"></div><div class="note"> + +<figure> +<a href="../images/screenshots/transactioncontroller.png"><img src="../images/screenshots/transactioncontroller.png" width="" height="" alt=""></a> +<figcaption></figcaption> +</figure> + +</div> +<div class="clear"></div> + +<div class="clear"></div> +<div class="note"> The "<span class="code">Errors</span>" summary table shows more accurate data if these settings are fulfilled: <ul> - <li><pre class="source">jmeter.save.saveservice.assertion_results_failure_message = true</pre></li> - <li> + +<li> +<pre class="source">jmeter.save.saveservice.assertion_results_failure_message = true</pre> +</li> + +<li> If you use a transaction controller, uncheck the box <span class="code">Generate parent sample</span> - <figure><a href="../images/screenshots/transactioncontroller.png"><img src="../images/screenshots/transactioncontroller.png" width="" height="" alt=""></a><figcaption></figcaption></figure> - </li> - </ul> - </div><div class="clear"></div> - <div class="clear"></div><div class="note">When using JMeter distributed mode with multiple jmeter-server instances, ensure you add in your Thread Groups something that uniquely identifies ThreadGroup for every JVM, example: + +<figure> +<a href="../images/screenshots/transactioncontroller.png"><img src="../images/screenshots/transactioncontroller.png" width="" height="" alt=""></a> +<figcaption></figcaption> +</figure> + +</li> + +</ul> + +</div> +<div class="clear"></div> + +<div class="clear"></div> +<div class="note">When using JMeter distributed mode with multiple jmeter-server instances, ensure you add in your Thread Groups something that uniquely identifies ThreadGroup for every JVM, example: <pre class="source">ThreadXXX_${__P(JVM_ID)}</pre> where you pass a different JVM_ID property for each jmeter-server through: <pre class="source">-JJVM_ID=i</pre> where <span class="code">i</span> varies between 1 and the number of jmeter-server you are using. - </div><div class="clear"></div> - </p> - </div> + </div> +<div class="clear"></div> + +</p> + +</div> - <div class="subsection"><h2 id="configuration_general">15.2.2 General settings<a class="sectionlink" href="#configuration_general" title="Link to here">¶</a></h2> - <div class="clear"></div><div class="note"> + +<div class="subsection"> +<h2 id="configuration_general">14.2.2 General settings<a class="sectionlink" href="#configuration_general" title="Link to here">¶</a> +</h2> + +<div class="clear"></div> +<div class="note"> All properties must be prefixed with <pre class="source">jmeter.reportgenerator.</pre> - </div><div class="clear"></div> - <div class="properties"><h3> + +</div> +<div class="clear"></div> + +<div class="properties"> +<h3> Parameters - </h3><div class="property title"><div class="name title">Attribute</div><div class="description title">Description</div><div class="required title">Required</div></div> - <div class="property"><div class="name req-false">report_title</div><div class="description req-false"> + </h3> +<div class="property title"> +<div class="name title">Attribute</div> +<div class="description title">Description</div> +<div class="required title">Required</div> +</div> + +<div class="property"> +<div class="name req-false">report_title</div> +<div class="description req-false"> Title used in the generated report.<br> Default: "Apache JMeter Dashboard" - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">date_format</div><div class="description req-false"> + </div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">date_format</div> +<div class="description req-false"> Default date format from <a href="http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html"> SimpleDateFormat Java API</a> with Locale.ENGLISH.<br> - Default Date format is <span class="code">yyyyMMddHHmmss</span><br> + Default Date format is <span class="code">yyyyMMddHHmmss</span> +<br> Useful when you would like to generate a report after the load test, and the results file contains timestamp in another time zone. In this case the date format must include the time zone (zzz). - <div class="clear"></div><div class="note">If <span class="code">jmeter.save.saveservice.timestamp_format</span> does not contain year then use 1970 as year</div><div class="clear"></div> - <br> + <div class="clear"></div> +<div class="note">If <span class="code">jmeter.save.saveservice.timestamp_format</span> does not contain year then use 1970 as year</div> +<div class="clear"></div> + +<br> Example: <span class="code">dd/MM/yyyy HH:mm:ss zzz</span> - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">start_date</div><div class="description req-false"> + +</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">start_date</div> +<div class="description req-false"> Start date of the range of data to use for report.<br> Date format is defined by date_format property.<br> Default: not filled which means data range will be used from the beginning - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">end_date</div><div class="description req-false"> + </div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">end_date</div> +<div class="description req-false"> End date of the range of data to use for report.<br> Date format is defined by date_format property.<br> Default: not filled which means data range will be used until the end - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">overall_granularity</div><div class="description req-false"> + </div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">overall_granularity</div> +<div class="description req-false"> Granularity of over time graphs. Data is aggregated to have 1 minute ticks.<br> - <div class="clear"></div><div class="note">Granularity must be higher than 1 second (1000) otherwise throughput graphs will be incorrect</div><div class="clear"></div> + +<div class="clear"></div> +<div class="note">Granularity must be higher than 1 second (1000) otherwise throughput graphs will be incorrect</div> +<div class="clear"></div> Default: "60000" (1 minute) - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">apdex_satisfied_threshold</div><div class="description req-false"> + </div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">apdex_satisfied_threshold</div> +<div class="description req-false"> Sets the satisfaction threshold for the <a href="https://en.wikipedia.org/wiki/Apdex" target="_blank">APDEX</a> calculation (in ms).<br> Default: <span class="code">500</span> - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">apdex_tolerated_threshold</div><div class="description req-false"> + +</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">apdex_tolerated_threshold</div> +<div class="description req-false"> Sets the tolerance threshold for the APDEX calculation (in ms).<br> Default: <span class="code">1500</span> - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">jmeter.reportgenerator.apdex_per_transaction</div><div class="description req-false"> + +</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">jmeter.reportgenerator.apdex_per_transaction</div> +<div class="description req-false"> Sets satisfaction and tolerance threshold to specific samples.<br> Use sample names or regular expression.<br> - Format is <span class="code">sample_name:satisfaction|tolerance[;]</span><br> + Format is <span class="code">sample_name:satisfaction|tolerance[;]</span> +<br> Values are in milliseconds. - <div class="clear"></div><div class="note"> + <div class="clear"></div> +<div class="note"> Notice the colon between sample name and values, the pipe between thresholds and the semicolon at the end to separate different samples. Don't forget to escape after semicolon to span multiple lines. - </div><div class="clear"></div> + </div> +<div class="clear"></div> Example: <pre class="source">jmeter.reportgenerator.apdex_per_transaction=sample(\\d+):1000|2000;\ samples12:3000|4000;\ scenar01-12:5000|6000</pre> - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">sample_filter</div><div class="description req-false"> + +</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">sample_filter</div> +<div class="description req-false"> Sets the filter of samples to keep for generating graphs and statistics. An empty value deactivates the filtering.<br> Format: Regular expression.<br> Default: "" - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">temp_dir</div><div class="description req-false"> + </div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">temp_dir</div> +<div class="description req-false"> Sets the temporary directory used by the generation process if it needs file I/O operations.<br> Default: <span class="code">temp</span> - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">statistic_window</div><div class="description req-false"> + +</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">statistic_window</div> +<div class="description req-false"> Sets the size of the sliding window used by percentile evaluation. Caution: higher value provides a better accuracy but needs more memory.<br> Default: <span class="code">20000</span> - </div><div class="required req-false">No</div></div> - </div> - <div class="clear"></div><div class="note">Percentiles used by Summary table and Percentile graphs can be adjusted to different values by using the 3 properties: + +</div> +<div class="required req-false">No</div> +</div> + +</div> + +<div class="clear"></div> +<div class="note">Percentiles used by Summary table and Percentile graphs can be adjusted to different values by using the 3 properties: <ul> - <li>aggregate_rpt_pct1 : Defaults to 90</li> - <li>aggregate_rpt_pct2 : Defaults to 95</li> - <li>aggregate_rpt_pct3 : Defaults to 99</li> - </ul> - </div><div class="clear"></div> - <div class="clear"></div><div class="note">Relative paths are built from the JMeter working directory - (default: <span class="code">bin</span>).</div><div class="clear"></div> + +<li>aggregate_rpt_pct1 : Defaults to 90</li> + +<li>aggregate_rpt_pct2 : Defaults to 95</li> + +<li>aggregate_rpt_pct3 : Defaults to 99</li> + +</ul> + +</div> +<div class="clear"></div> + +<div class="clear"></div> +<div class="note">Relative paths are built from the JMeter working directory + (default: <span class="code">bin</span>).</div> +<div class="clear"></div> - <div class="clear"></div><div class="note"> - <p> + +<div class="clear"></div> +<div class="note"> + +<p> You can define some overall properties which are used by the generator configuration. These properties are freely named but you should use the prefix <pre class="source">jmeter.reportgenerator.</pre> in order to avoid property overlap. </p> - <p> + +<p> E.g.: </p> - <dl> - <dt>Property definition:</dt> - <dd><pre class="source">jmeter.reportgenerator.overall_granularity=60000</pre></dd> - <dt>Property reference:</dt> - <dd><pre class="source">${jmeter.reportgenerator.overall_granularity}</pre></dd> - </dl> - </div><div class="clear"></div> - </div> + +<dl> + +<dt>Property definition:</dt> + +<dd> +<pre class="source">jmeter.reportgenerator.overall_granularity=60000</pre> +</dd> + +<dt>Property reference:</dt> + +<dd> +<pre class="source">${jmeter.reportgenerator.overall_granularity}</pre> +</dd> + +</dl> + +</div> +<div class="clear"></div> + +</div> - <div class="subsection"><h2 id="configure_graph">15.2.3 Graph settings<a class="sectionlink" href="#configure_graph" title="Link to here">¶</a></h2> - <p> + +<div class="subsection"> +<h2 id="configure_graph">14.2.3 Graph settings<a class="sectionlink" href="#configure_graph" title="Link to here">¶</a> +</h2> + +<p> Each property describing a graph configuration must be prefixed with <pre class="source">jmeter.reportgenerator.graph.</pre> @@ -230,12 +689,26 @@ jmeter.save.saveservice.timestamp_format </p> - <div class="subsection"><h2 id="general_graph_properties">15.2.3.1 General properties<a class="sectionlink" href="#general_graph_properties" title="Link to here">¶</a></h2> - <p>All graphs support these properties:</p> - <div class="properties"><h3> + +<div class="subsection"> +<h2 id="general_graph_properties">14.2.3.1 General properties<a class="sectionlink" href="#general_graph_properties" title="Link to here">¶</a> +</h2> + +<p>All graphs support these properties:</p> + +<div class="properties"> +<h3> Parameters - </h3><div class="property title"><div class="name title">Attribute</div><div class="description title">Description</div><div class="required title">Required</div></div> - <div class="property"><div class="name req-true">classname</div><div class="description req-true"> + </h3> +<div class="property title"> +<div class="name title">Attribute</div> +<div class="description title">Description</div> +<div class="required title">Required</div> +</div> + +<div class="property"> +<div class="name req-true">classname</div> +<div class="description req-true"> The fully qualified class name of the graph <br> The class of the graph must extend @@ -244,123 +717,250 @@ jmeter.save.saveservice.timestamp_format See <a href="#default_graphs">Default graph section</a> for more details. - </div><div class="required req-true">Yes</div></div> - <div class="property"><div class="name req-false">exclude_controllers</div><div class="description req-false">Defines + </div> +<div class="required req-true">Yes</div> +</div> + +<div class="property"> +<div class="name req-false">exclude_controllers</div> +<div class="description req-false">Defines whether the graph discards controller samples. Default: <span class="code">false</span> - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">title</div><div class="description req-false">Sets the title of the + +</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">title</div> +<div class="description req-false">Sets the title of the graph. Default: "" - </div><div class="required req-false">No</div></div> - </div> - </div> + </div> +<div class="required req-false">No</div> +</div> + +</div> + +</div> - <div class="subsection"><h2 id="specific_graph_properties">15.2.3.2 Specific properties<a class="sectionlink" href="#specific_graph_properties" title="Link to here">¶</a></h2> - <p> + +<div class="subsection"> +<h2 id="specific_graph_properties">14.2.3.2 Specific properties<a class="sectionlink" href="#specific_graph_properties" title="Link to here">¶</a> +</h2> + +<p> Specific graph properties must use the prefix: <pre class="source">jmeter.reportgenerator.graph.<graph_id>.property</pre> The name of the property will be mapped using camel case transformation and the matching method of the class will be called with the property value as argument. </p> - <p> + +<p> E.g.: <pre class="source">jmeter.reportgenerator.graph.<graph_id>.property.set_granularity=150</pre> induces the call of the method <span class="code">setGranularity(150)</span> on the instance of the graph. </p> - </div> + +</div> - </div> + +</div> - <div class="subsection"><h2 id="configure_export">15.2.4 Export settings<a class="sectionlink" href="#configure_export" title="Link to here">¶</a></h2> - <p> + +<div class="subsection"> +<h2 id="configure_export">14.2.4 Export settings<a class="sectionlink" href="#configure_export" title="Link to here">¶</a> +</h2> + +<p> Each property describing an exporter configuration must be prefixed with <pre class="source">jmeter.reportgenerator.exporter</pre> followed by the exporter identifier. </p> - <div class="subsection"><h2 id="general_export_properties">15.2.4.1 General properties<a class="sectionlink" href="#general_export_properties" title="Link to here">¶</a></h2> - <p>All exporters support these properties:</p> - <div class="properties"><h3> + +<div class="subsection"> +<h2 id="general_export_properties">14.2.4.1 General properties<a class="sectionlink" href="#general_export_properties" title="Link to here">¶</a> +</h2> + +<p>All exporters support these properties:</p> + +<div class="properties"> +<h3> Parameters - </h3><div class="property title"><div class="name title">Attribute</div><div class="description title">Description</div><div class="required title">Required</div></div> - <div class="property"><div class="name req-true">classname</div><div class="description req-true"> + </h3> +<div class="property title"> +<div class="name title">Attribute</div> +<div class="description title">Description</div> +<div class="required title">Required</div> +</div> + +<div class="property"> +<div class="name req-true">classname</div> +<div class="description req-true"> The fully qualified class name of the exporter <br> The class of the exporter must implement <span class="code">org.apache.jmeter.report.dashboard.DataExporter</span> . - </div><div class="required req-true">Yes</div></div> - <div class="property"><div class="name req-false">filters_only_sample_series</div><div class="description req-false"> + </div> +<div class="required req-true">Yes</div> +</div> + +<div class="property"> +<div class="name req-false">filters_only_sample_series</div> +<div class="description req-false"> Defines whether <span class="code">series_filter</span> (see below) apply only on sample series. - Default: <span class="code">true</span></div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">series_filter</div><div class="description req-false">Sets the filter + Default: <span class="code">true</span> +</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">series_filter</div> +<div class="description req-false">Sets the filter of series. An empty value deactivates the filtering. - If not empty, regex should end with <span class="code">(-success|-failure)?$</span><br> + If not empty, regex should end with <span class="code">(-success|-failure)?$</span> +<br> Format: regular expression. Default: "" - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">show_controllers_only</div><div class="description req-false"> + </div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">show_controllers_only</div> +<div class="description req-false"> Defines whether only controller series are shown. Default: <span class="code">false</span> - </div><div class="required req-false">No</div></div> - </div> - </div> + +</div> +<div class="required req-false">No</div> +</div> + +</div> + +</div> - <div class="subsection"><h2 id="specific_export_properties">15.2.4.2 Specific properties<a class="sectionlink" href="#specific_export_properties" title="Link to here">¶</a></h2> - <p> + +<div class="subsection"> +<h2 id="specific_export_properties">14.2.4.2 Specific properties<a class="sectionlink" href="#specific_export_properties" title="Link to here">¶</a> +</h2> + +<p> Specific exporter properties must use the prefix <pre class="source">jmeter.reportgenerator.exporter.<exporter_id>.property</pre> - </p> - <div class="properties"><h3> + +</p> + +<div class="properties"> +<h3> Parameters - </h3><div class="property title"><div class="name title">Attribute</div><div class="description title">Description</div><div class="required title">Required</div></div> - <div class="property"><div class="name req-false">output_dir</div><div class="description req-false"> + </h3> +<div class="property title"> +<div class="name title">Attribute</div> +<div class="description title">Description</div> +<div class="required title">Required</div> +</div> + +<div class="property"> +<div class="name req-false">output_dir</div> +<div class="description req-false"> Sets the destination directory for generated html pages. Default: <span class="code">report-output</span> - </div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">template_dir</div><div class="description req-false"> + +</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">template_dir</div> +<div class="description req-false"> Sets the source directory of template files from which the html pages are generated. Default: <span class="code">report-template</span> - </div><div class="required req-false">No</div></div> - </div> - </div> + +</div> +<div class="required req-false">No</div> +</div> + +</div> + +</div> - <div class="subsection"><h2 id="graph_export_properties">15.2.4.3 Graph properties<a class="sectionlink" href="#graph_export_properties" title="Link to here">¶</a></h2> - <p> + +<div class="subsection"> +<h2 id="graph_export_properties">14.2.4.3 Graph properties<a class="sectionlink" href="#graph_export_properties" title="Link to here">¶</a> +</h2> + +<p> Graph properties allow exporters to overwrite some graph data. <br> They must use the prefix: <pre class="source">jmeter.reportgenerator.exporter.<exporter_id>.graph_options.<graph_id></pre> - </p> - <div class="properties"><h3> + +</p> + +<div class="properties"> +<h3> Parameters - </h3><div class="property title"><div class="name title">Attribute</div><div class="description title">Description</div><div class="required title">Required</div></div> - <div class="property"><div class="name req-false">minX</div><div class="description req-false">Sets the minimum - abscissa for the graph.</div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">maxX</div><div class="description req-false">Sets the maximum - abscissa for the graph.</div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">minY</div><div class="description req-false">Sets the minimum - ordinate for the graph.</div><div class="required req-false">No</div></div> - <div class="property"><div class="name req-false">maxY</div><div class="description req-false">Sets the maximum - ordinate for the graph.</div><div class="required req-false">No</div></div> - </div> - </div> + </h3> +<div class="property title"> +<div class="name title">Attribute</div> +<div class="description title">Description</div> +<div class="required title">Required</div> +</div> + +<div class="property"> +<div class="name req-false">minX</div> +<div class="description req-false">Sets the minimum + abscissa for the graph.</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">maxX</div> +<div class="description req-false">Sets the maximum + abscissa for the graph.</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">minY</div> +<div class="description req-false">Sets the minimum + ordinate for the graph.</div> +<div class="required req-false">No</div> +</div> + +<div class="property"> +<div class="name req-false">maxY</div> +<div class="description req-false">Sets the maximum + ordinate for the graph.</div> +<div class="required req-false">No</div> +</div> + +</div> + +</div> - <div class="subsection"><h2 id="export_filtering">15.2.4.4 Filtering mechanisms<a class="sectionlink" href="#export_filtering" title="Link to here">¶</a></h2> - <p> + +<div class="subsection"> +<h2 id="export_filtering">14.2.4.4 Filtering mechanisms<a class="sectionlink" href="#export_filtering" title="Link to here">¶</a> +</h2> + +<p> Unlike the filtering in the section <a href="#configure_general">General properties</a> which discards data before calculations, here the filtering is performed after the calculations and serves to simplify the final report. </p> - <p> + +<p> The property <span class="code">series_filter</span> allows to filter which series of a graph (resp. rows of a summary table) using regular expression that matches @@ -371,147 +971,250 @@ jmeter.save.saveservice.timestamp_format discarding. Conversely if there is no matching, the other properties can allow to keep it. </p> - <p> + +<p> The following tables show how the setting of filtering properties works. </p> - <p> - <table> - <div class="nostyle"><caption>Cases of discarding when there is pattern matching</caption></div> - <thead> - <tr> - <th>filter_only_sample_series</th> + +<p> + +<table> + +<div class="nostyle"> +<caption>Cases of discarding when there is pattern matching</caption> +</div> + +<thead> + +<tr> + +<th>filter_only_sample_series</th> <th>Graph/Summary supports controllers discrimination</th> <th>The current series is a controller series</th> <th>show_controllers_only</th> <th>Discarded</th> - </tr> - </thead> - <tbody> - <tr> - <td style="border-bottom:1px solid black" rowspan="8">False</td> + +</tr> + +</thead> + +<tbody> + +<tr> + +<td style="border-bottom:1px solid black" rowspan="8">False</td> <td style="border-bottom:1px solid black" rowspan="4">False</td> <td style="border-bottom:1px solid black" rowspan="2">-</td> <td style="border-bottom:1px solid black">False</td> <td style="border-bottom:1px solid black" rowspan="13">False</td> - </tr> - <tr> - <td style="border-bottom:1px solid black">True</td> - </tr> - <tr> - <td style="border-bottom:1px solid black" rowspan="2">-</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black">True</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black" rowspan="2">-</td> <td style="border-bottom:1px solid black">False</td> - </tr> - <tr> - <td style="border-bottom:1px solid black">True</td> - </tr> - <tr> - <td style="border-bottom:1px solid black" rowspan="4">True</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black">True</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black" rowspan="4">True</td> <td style="border-bottom:1px solid black" rowspan="2">False</td> <td style="border-bottom:1px solid black">False</td> - </tr> - <tr> - <td style="border-bottom:1px solid black">True</td> - </tr> - <tr> - <td style="border-bottom:1px solid black" rowspan="2">True</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black">True</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black" rowspan="2">True</td> <td style="border-bottom:1px solid black">False</td> - </tr> - <tr> - <td style="border-bottom:1px solid black">True</td> - </tr> - <tr> - <td rowspan="8">True</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black">True</td> + +</tr> + +<tr> + +<td rowspan="8">True</td> <td style="border-bottom:1px solid black" rowspan="4">False</td> <td style="border-bottom:1px solid black" rowspan="2">-</td> <td style="border-bottom:1px solid black">False</td> - </tr> - <tr> - <td style="border-bottom:1px solid black">True</td> - </tr> - <tr> - <td style="border-bottom:1px solid black" rowspan="2">-</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black">True</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black" rowspan="2">-</td> <td style="border-bottom:1px solid black">False</td> - </tr> - <tr> - <td style="border-bottom:1px solid black">True</td> - </tr> - <tr> - <td rowspan="4">True</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black">True</td> + +</tr> + +<tr> + +<td rowspan="4">True</td> <td style="border-bottom:1px solid black" rowspan="2">False</td> <td style="border-bottom:1px solid black">False</td> - </tr> - <tr> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black">True</td> <td style="border-bottom:1px solid black">True</td> - <td style="border-bottom:1px solid black">True</td> - </tr> - <tr> - <td rowspan="2">True</td> + +</tr> + +<tr> + +<td rowspan="2">True</td> <td style="border-bottom:1px solid black">False</td> <td rowspan="2">False</td> - </tr> - <tr> - <td>True</td> - </tr> - </tbody> - </table> - </p> - <p> - <table> - <div class="nostyle"><caption>Cases of retention when there is no pattern matching</caption></div> - <thead> - <tr> - <th>filter_only_sample_series</th> + +</tr> + +<tr> + +<td>True</td> + +</tr> + +</tbody> + +</table> + +</p> + +<p> + +<table> + +<div class="nostyle"> +<caption>Cases of retention when there is no pattern matching</caption> +</div> + +<thead> + +<tr> + +<th>filter_only_sample_series</th> <th>Graph/Summary supports controllers discrimination</th> <th>Kept</th> - </tr> - </thead> - <tbody> - <tr> - <td style="border-bottom:1px solid black" rowspan="2">False</td> + +</tr> + +</thead> + +<tbody> + +<tr> + +<td style="border-bottom:1px solid black" rowspan="2">False</td> <td style="border-bottom:1px solid black">False</td> <td style="border-bottom:1px solid black" rowspan="2">False</td> - </tr> - <tr> - <td style="border-bottom:1px solid black">True</td> - </tr> - <tr> - <td rowspan="2">True</td> + +</tr> + +<tr> + +<td style="border-bottom:1px solid black">True</td> + +</tr> + +<tr> + +<td rowspan="2">True</td> <td style="border-bottom:1px solid black">False</td> <td style="border-bottom:1px solid black">True</td> - </tr> - <tr> - <td>True</td> + +</tr> + +<tr> + +<td>True</td> <td>False</td> - </tr> - </tbody> - </table> - </p> - <div class="clear"></div><div class="note"> + +</tr> + +</tbody> + +</table> + +</p> + +<div class="clear"></div> +<div class="note"> Incorrect filter configuration can lead to generate empty graphs/summary tables: <ul> - <li> + +<li> If you set the property <span class="code">show_controllers_only</span> and the graph is configured to exclude controllers. </li> - <li> + +<li> If the property <span class="code">series_filter</span> matches none series. </li> - </ul> + +</ul> - </div><div class="clear"></div> - </div> - </div> + +</div> +<div class="clear"></div> + +</div> + +</div> - <div class="subsection"><h2 id="sample_configuration">15.2.5 Sample configuration<a class="sectionlink" href="#sample_configuration" title="Link to here">¶</a></h2> - <p>You can copy the following configuration to your user.properties + +<div class="subsection"> +<h2 id="sample_configuration">14.2.5 Sample configuration<a class="sectionlink" href="#sample_configuration" title="Link to here">¶</a> +</h2> + +<p>You can copy the following configuration to your user.properties file in order to test the report generator.</p> - <pre class="source"> + +<pre class="source"> # Configure this property to change the report title #jmeter.reportgenerator.report_title=Apache JMeter Dashboard @@ -544,135 +1247,220 @@ jmeter.reportgenerator.apdex_tolerated_t # Indicates whether series filter apply only on sample series jmeter.reportgenerator.exporter.html.filters_only_sample_series=true </pre> - <div class="clear"></div><div class="note"> + +<div class="clear"></div> +<div class="note"> Adapt the parameter <span class="code">output_dir</span> to your environment. - </div><div class="clear"></div> - <p> + </div> +<div class="clear"></div> + +<p> This configuration allows to generate a report where: <ul> - <li>Over time graphs have a time granularity equal to 1 minute.</li> - <li>The satisfaction threshold for ADPEX calculation is 1 second and half.</li> - <li>The tolerance threshold for ADPEX calculation is 3 seconds.</li> - <li>The HTML files are generated in the directory <span class="code">/tmp/test-report</span>.</li> - <li>Only series which the name begins with "<span class="code">s0</span>" or "<span class="code">s1</span>" are shown.</li> - <li>The previous filter only applies to graphs (resp. summary tables) where the series (resp. rows) match samples</li> - </ul> - </p> - </div> + +<li>Over time graphs have a time granularity equal to 1 minute.</li> + +<li>The satisfaction threshold for ADPEX calculation is 1 second and half.</li> + +<li>The tolerance threshold for ADPEX calculation is 3 seconds.</li> + +<li>The HTML files are generated in the directory <span class="code">/tmp/test-report</span>.</li> + +<li>Only series which the name begins with "<span class="code">s0</span>" or "<span class="code">s1</span>" are shown.</li> + +<li>The previous filter only applies to graphs (resp. summary tables) where the series (resp. rows) match samples</li> + +</ul> + +</p> + +</div> - </div> + +</div> - <div class="subsection"><h2 id="report">15.3 Generating reports<a class="sectionlink" href="#report" title="Link to here">¶</a></h2> - <p> + +<div class="subsection"> +<h2 id="report">14.3 Generating reports<a class="sectionlink" href="#report" title="Link to here">¶</a> +</h2> + +<p> The report generation can be done as a stand alone process from a sample log file or automatically after running load test. </p> - <div class="subsection"><h2 id="report_only">15.3.1 Generation from an existing sample CSV log file<a class="sectionlink" href="#report_only" title="Link to here">¶</a></h2> - <p> + +<div class="subsection"> +<h2 id="report_only">14.3.1 Generation from an existing sample CSV log file<a class="sectionlink" href="#report_only" title="Link to here">¶</a> +</h2> + +<p> Use the following command: <pre class="source">jmeter -g <log file> -o <Path to output folder></pre> - </p> - </div> + +</p> + +</div> - <div class="subsection"><h2 id="report_after_load_test">15.3.2 Generation after load test<a class="sectionlink" href="#report_after_load_test" title="Link to here">¶</a></h2> - <p> + +<div class="subsection"> +<h2 id="report_after_load_test">14.3.2 Generation after load test<a class="sectionlink" href="#report_after_load_test" title="Link to here">¶</a> +</h2> + +<p> Use the following command: <pre class="source">jmeter -n -t <test JMX file> -l <test log file> -e -o <Path to output folder></pre> - </p> - </div> - </div> - - <div class="subsection"><h2 id="default_graphs">15.4 Default graphs<a class="sectionlink" href="#default_graphs" title="Link to here">¶</a></h2> - <div class="clear"></div><div class="note">Due to limitations of this early version, each default graph + +</p> + +</div> + +</div> + + +<div class="subsection"> +<h2 id="default_graphs">14.4 Default graphs<a class="sectionlink" href="#default_graphs" title="Link to here">¶</a> +</h2> + +<div class="clear"></div> +<div class="note">Due to limitations of this early version, each default graph must be declared in JMeter properties. Otherwise, the graph - views will be empty.</div><div class="clear"></div> + views will be empty.</div> +<div class="clear"></div> - <p> + +<p> All graphs provided by this report engine are located in the package <span class="code">org.apache.jmeter.report.processor.graph.impl</span> - </p> - <p>The dashboard generator provides the following graph classes:</p> - <table> - <thead> - <tr> - <th>Graph</th> + +</p> + +<p>The dashboard generator provides the following graph classes:</p> + +<table> + +<thead> + +<tr> + +<th>Graph</th> <th>Description</th> <th>Supports controller discrimination</th> - </tr> - </thead> - <tbody> - <tr> - <td>ActiveThreadsGraphConsumer</td> + +</tr> + +</thead> + +<tbody> + +<tr> + +<td>ActiveThreadsGraphConsumer</td> <td>This graph represents the number of active threads over time.</td> <td>False</td> - </tr> - <tr> - <td>BytesThroughputGraphConsumer</td> + +</tr> + +<tr> + +<td>BytesThroughputGraphConsumer</td> <td>This graph represents the throughput of received and sent data over time.</td> <td>False</td> - </tr> - <tr> - <td>CodesPerSecondGraphConsumer</td> + +</tr> + +<tr> + +<td>CodesPerSecondGraphConsumer</td> <td>This graph represents the rate of response codes over time.</td> <td>False</td> - </tr> - <tr> - <td>HitsPerSecondGraphConsumer</td> + +</tr> + +<tr> + +<td>HitsPerSecondGraphConsumer</td> <td>This graph represents the rate of finished requests over time.</td> <td>False</td> - </tr> - <tr> - <td>LatencyOverTimeGraphConsumer</td> + +</tr> + +<tr> + +<td>LatencyOverTimeGraphConsumer</td> <td>This graph represents the average latency time over time.</td> <td>True</td> - </tr> - <tr> - <td>ConnectTimeOverTimeGraphConsumer</td> + +</tr> + +<tr> + +<td>ConnectTimeOverTimeGraphConsumer</td> <td>This graph represents the connection time over time.</td> <td>True</td> - </tr> - <tr> - <td>LatencyVSRequestGraphConsumer</td> + +</tr> + +<tr> + +<td>LatencyVSRequestGraphConsumer</td> <td>This graph represents the median and average latency time depending on the number of current requests.</td> <td>False</td> - </tr> - <tr> - <td>ResponseTimeDistributionGraphConsumer</td> + +</tr> + +<tr> + +<td>ResponseTimeDistributionGraphConsumer</td> <td>This graph represents the distribution of the samples depending on their elapsed time and name.</td> <td>True</td> - </tr> - <tr> - <td>ResponseTimeOverTimeGraphConsumer</td> + +</tr> + +<tr> + +<td>ResponseTimeOverTimeGraphConsumer</td> <td>This graph represents the average response time over time.</td> <td>True</td> - </tr> - <tr> - <td>ResponseTimePercentilesGraphConsumer</td> + +</tr> + +<tr> +
[... 158 lines stripped ...]