blob: 7777f0011bcd7c048c9d04efb4f1329ab2db933f [file] [log] [blame]
<!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
-
User's Manual: Building a Test Plan</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://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="https://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="https://jmeter.apache.org/"><img class="logo" src="../images/logo.svg" alt="Apache JMeter"></a>
</div>
<div class="banner">
<a href="https://www.apache.org/events/current-event.html"><img src="https://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="https://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="https://cwiki.apache.org/confluence/display/JMETER/Home">JMeter Wiki</a>
</li>
<li>
<a href="https://cwiki.apache.org/confluence/display/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="https://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="https://cwiki.apache.org/confluence/display/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="https://www.apache.org/">The Apache Software Foundation (ASF)</a>
</li>
<li>
<a href="https://www.apache.org/foundation/getinvolved.html">Get Involved in the ASF</a>
</li>
<li>
<a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
</li>
<li>
<a href="https://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="get-started.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="test_plan.html">Next &gt;</a>
</li>
</ul>
<div class="section">
<h1>2. Building a Test Plan</h1>
<p>A test plan describes a series of steps JMeter will execute when run. A complete
test plan will consist of one or more Thread Groups, logic controllers, sample generating
controllers, listeners, timers, assertions, and configuration elements.
</p>
<div class="subsection">
<h2 id="add_remove">2.1 Adding and Removing Elements<a class="sectionlink" href="#add_remove" title="Link to here">&para;</a>
</h2>
<p>Adding <a href="test_plan.html">elements to a test plan</a> can be done by right-clicking on an element in the
tree, and choosing a new element from the "<span class="code">add</span>" list. Alternatively, elements can
be loaded from file and added by choosing the "<span class="code">merge</span>" or "<span class="code">open</span>" option.</p>
<p>To remove an element, make sure the element is selected, right-click on the element,
and choose the "<span class="code">remove</span>" option.</p>
</div>
<div class="subsection">
<h2 id="load_save">2.2 Loading and Saving Elements<a class="sectionlink" href="#load_save" title="Link to here">&para;</a>
</h2>
<p>To load an element from file, right click on the existing tree elements to which
you want to add the loaded element, and select the "<span class="code">merge</span>" option. Choose the file where
your elements are saved. JMeter will merge the elements into the tree.</p>
<p>To save tree elements, right click on an element and choose the "<span class="code">Save Selection As &hellip;</span>" option.
JMeter will save the element selected, plus all child elements beneath it. In this way,
you can save test tree fragments and individual elements for later use.</p>
</div>
<div class="subsection">
<h2 id="config_element">2.3 Configuring Tree Elements<a class="sectionlink" href="#config_element" title="Link to here">&para;</a>
</h2>
<p>Any element in the test tree will present controls in JMeter's right-hand frame. These
controls allow you to configure the behavior of that particular test element. What can be
configured for an element depends on what type of element it is.</p>
<div class="clear"></div>
<div class="note">The Test Tree itself can be manipulated by dragging and dropping components around the test tree.</div>
<div class="clear"></div>
</div>
<div class="subsection">
<h2 id="saving">2.4 Saving the Test Plan<a class="sectionlink" href="#saving" title="Link to here">&para;</a>
</h2>
<p>Although it is not required, we recommend that you save the Test Plan to a
file before running it. To save the Test Plan, select "<span class="code">Save</span>" or "<span class="code">Save Test Plan As &hellip;</span>" from the
File menu (with the latest release, it is no longer necessary to select the
Test Plan element first).</p>
<div class="clear"></div>
<div class="note">JMeter allows you to save the entire Test Plan tree or
only a portion of it. To save only the elements located in a particular "branch"
of the Test Plan tree, select the Test Plan element in the tree from which to start
the "branch", and then click your right mouse button to access the "<span class="code">Save Selection As &hellip;</span>" menu item.
Alternatively, select the appropriate Test Plan element and then select "<span class="code">Save Selection As &hellip;</span>" from
the Edit menu.
</div>
<div class="clear"></div>
</div>
<div class="subsection">
<h2 id="run">2.5 Running a Test Plan<a class="sectionlink" href="#run" title="Link to here">&para;</a>
</h2>
<p>To run your test plan, choose "<span class="code">Start</span>" (<span class="keycombo"><span class="keysym">Control</span>&nbsp;+&nbsp;<span class="keysym">r</span></span>)
from the "<span class="code">Run</span>" menu item.
When JMeter is running, it shows a small green box at the right hand end of the section just under the menu bar.
You can also check the "<span class="code">Run</span>" menu.
If "<span class="code">Start</span>" is disabled, and "<span class="code">Stop</span>" is enabled,
then JMeter is running your test plan (or, at least, it thinks it is).</p>
<p>
The numbers to the left of the green box are the number of active threads / total number of threads.
These only apply to a locally run test; they do not include any threads started on remote systems when using client-server mode.
</p>
<div class="clear"></div>
<div class="note">Using GUI mode as described here should only be used when debugging your Test Plan. To run the real load test, use CLI mode.</div>
<div class="clear"></div>
</div>
<div class="subsection">
<h2 id="stop">2.6 Stopping a Test<a class="sectionlink" href="#stop" title="Link to here">&para;</a>
</h2>
<p>
There are two types of stop command available from the menu:
<ul>
<li>
<span class="code">Stop</span> (<span class="keycombo"><span class="keysym">Control</span>&nbsp;+&nbsp;<span class="keysym">.</span></span>) - stops the threads immediately if possible.
Many samplers are Interruptible which means that active samples can be terminated early.
The stop command will check that all threads have stopped within the default timeout, which is 5000 ms = 5 seconds.
[This can be changed using the JMeter property <span class="code">jmeterengine.threadstop.wait</span>]
If the threads have not stopped, then a message is displayed.
The Stop command can be retried, but if it fails, then it is necessary to exit JMeter to clean up.
</li>
<li>
<span class="code">Shutdown</span> (<span class="keycombo"><span class="keysym">Control</span>&nbsp;+&nbsp;<span class="keysym">,</span></span>) - requests the
threads to stop at the end of any current work.
Will not interrupt any active samples.
The modal shutdown dialog box will remain active until all threads have stopped.</li>
</ul>
If Shutdown is taking too long. Close the Shutdown dialog box and select <span class="code">Run</span>/<span class="code">Stop</span>, or just press <span class="keycombo"><span class="keysym">Control</span>&nbsp;+&nbsp;<span class="keysym">.</span></span>.
</p>
<p>
When running JMeter in CLI mode, there is no Menu, and JMeter does not react to keystrokes such as <span class="keycombo"><span class="keysym">Control</span>&nbsp;+&nbsp;<span class="keysym">.</span></span>.
So JMeter CLI mode will listen for commands on a specific port (default <span class="code">4445</span>, see the JMeter property <span class="code">jmeterengine.nongui.port</span>).
JMeter supports automatic choice of an alternate port if the default port is being used
(for example by another JMeter instance). In this case, JMeter will try the next higher port, continuing until
it reaches the JMeter property <span class="code">jmeterengine.nongui.maxport</span>) which defaults to <span class="code">4455</span>.
If <span class="code">maxport</span> is less than or equal to <span class="code">port</span>, port scanning will not take place.
<br>
The chosen port is displayed in the console window.
<br>
The commands currently supported are:
<ul>
<li>
<span class="code">Shutdown</span> - graceful shutdown</li>
<li>
<span class="code">StopTestNow</span> - immediate shutdown</li>
</ul>
These commands can be sent by using the <span class="code">shutdown[.cmd|.sh]</span> or <span class="code">stoptest[.cmd|.sh]</span> script
respectively. The scripts are to be found in the JMeter <span class="code">bin</span> directory.
The commands will only be accepted if the script is run from the same host.
</p>
</div>
<div class="subsection">
<h2 id="error_reporting">2.7 Error reporting<a class="sectionlink" href="#error_reporting" title="Link to here">&para;</a>
</h2>
<p>
JMeter reports warnings and errors to the <span class="code">jmeter.log</span> file, as well as some information on the test run itself.
JMeter shows the number of warnings/errors found in <span class="code">jmeter.log</span> file next to the warning icon (triangle) at the right hand end of its window.
Click on the warning icon to show the <span class="code">jmeter.log</span> file at the bottom of JMeter's window.
Just occasionally there may be some errors that JMeter is unable to trap and log; these will appear on the command console.
If a test is not behaving as you expect, please check the log file in case any errors have been reported (e.g. perhaps a syntax error in a function call).
</p>
<p>
Sampling errors (e.g. HTTP 404 - file not found) are not normally reported in the log file.
Instead these are stored as attributes of the sample result.
The status of a sample result can be seen in the various different Listeners.
</p>
</div>
</div>
<ul class="pagelinks">
<li>
<a href="get-started.html">&lt; Prev</a>
</li>
<li>
<a href="../index.html">Index</a>
</li>
<li>
<a href="test_plan.html">Next &gt;</a>
</li>
</ul>
<div class="share-links">
Share this page:
<ul>
<li class="fb">
<a data-social-url="https://facebook.com/sharer/sharer.php?u=" title="Share on facebook"><i class="fa fa-facebook" aria-hidden="true"></i>share</a>
</li>
<li class="twitter">
<a data-social-url="https://twitter.com/intent/tweet?url=" title="Tweet on twitter"><i class="fa fa-twitter" aria-hidden="true"></i>tweet</a>
</li>
</ul>
</div>
<a href="#top" id="topButton">Go to top</a>
</div>
<div class="footer">
<div class="copyright">
Copyright &copy;
1999 &ndash;
2020
, Apache Software Foundation
</div>
<div class="trademarks">Apache, Apache JMeter, JMeter, the Apache
feather, and the Apache JMeter logo are
trademarks of the
Apache Software Foundation.
</div>
</div>
<script>(function(){
"use strict";
// enable 'go to top' button functionality
document.addEventListener('scroll', function() {
if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
document.getElementById("topButton").style.display = "block";
} else {
document.getElementById("topButton").style.display = "none";
}
});
// fill in the current location into social links on this page.
var as = document.getElementsByTagName('a');
var loc = document.location.href;
if (!loc.toLowerCase().startsWith('http')) {
return;
}
for (var i=0; i<as.length; i++) {
var href = as[i].getAttribute('data-social-url');
if (href !== null) {
as[i].href = href + encodeURIComponent(loc);
}
}
})();</script>
</body>
</html>