<!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: Elements of 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="../security.html">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://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</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="build-test-plan.html">&lt; Prev</a>
                </li>
                <li>
                    <a href="../index.html">Index</a>
                </li>
                <li>
                    <a href="build-web-test-plan.html">Next &gt;</a>
                </li>
            </ul>
            <div class="section">
                <h1>3. Elements of a Test Plan</h1>
                
                <p>
This section describes the different parts of a test plan.
</p>
                
                <p>
A minimal test will consist of the Test Plan, a Thread Group and one or more Samplers.
</p>
                
                <div class="subsection">
                    <h2 id="test_plan">
                        3.0 Test Plan<a class="sectionlink" href="#test_plan" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        The Test Plan object has a checkbox called "<span class="code">Functional Testing</span>".  If selected, it
will cause JMeter to record the data returned from the server for each sample.  If you have
selected a file in your test listeners, this data will be written to file.  This can be useful if
you are doing a small run to ensure that JMeter is configured correctly, and that your server
is returning the expected results.  The consequence is that the file will grow huge quickly, and
JMeter's performance will suffer.  This option should be off if you are doing stress-testing (it
is off by default).  
                    </p>
                    
                    <p>If you are not recording the data to file, this option makes no difference.</p>
                    
                    <p>
                        You can also use the <span class="code">Configuration</span> button on a listener to decide what fields to save.
                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="thread_group">
                        3.1 Thread Group<a class="sectionlink" href="#thread_group" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        Thread group elements are the beginning points of any test plan.
All controllers and samplers must be under a thread group.
Other elements, e.g. Listeners, may be placed directly under the test plan,
in which case they will apply to all the thread groups.
As the name implies, the thread group
element controls the number of threads JMeter will use to execute your test.  The
controls for a thread group allow you to:

                        <ul>
                            <li>Set the number of threads</li>
                            
                            <li>Set the ramp-up period</li>
                            
                            <li>Set the number of times to execute the test</li>
                            
                        </ul>
                    </p>
                    
                    <p>Each thread will execute the test plan in its entirety and completely independently
of other test threads.  Multiple threads are used to simulate concurrent connections
to your server application.</p>
                    
                    <p>The ramp-up period tells JMeter how long to take to "ramp-up" to the full number of
threads chosen.  If 10 threads are used, and the ramp-up period is 100 seconds, then
JMeter will take 100 seconds to get all 10 threads up and running.  Each thread will
start 10 (100/10) seconds after the previous thread was begun.  If there are 30 threads
and a ramp-up period of 120 seconds, then each successive thread will be delayed by 4 seconds.</p>
                    
                    <p>Ramp-up needs to be long enough to avoid too large a work-load at the start
of a test, and short enough that the last threads start running before
the first ones finish (unless one wants that to happen).
</p>
                    
                    <p>
Start with Ramp-up = number of threads and adjust up or down as needed.
</p>
                    
                    <p>By default, the thread group is configured to loop once through its elements.</p>
                    
                    <p>
                        Thread Group also allows to specify <b>Thread lifetime</b>.
    Click the checkbox at the bottom of the Thread Group panel to enable/disable extra fields
     in which you can enter the duration of test and the startup delay
     You can configure <span class="code">Duration (seconds)</span> and <span class="code">Startup Delay (seconds)</span> to control
     the duration of each thread group and the after how much seconds it starts.
     When the test is started, JMeter will wait <span class="code">Startup Delay (seconds)</span> before starting the Threads
     of the Thread Group and run for the configured <span class="code">Duration (seconds)</span> time.

                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="controllers">
                        3.2 Controllers<a class="sectionlink" href="#controllers" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
JMeter has two types of Controllers: Samplers and Logical Controllers.
These drive the processing of a test.
</p>
                    
                    <p>
                        Samplers tell JMeter to send requests to a server. For
example, add an HTTP Request Sampler if you want JMeter
to send an HTTP request.  You can also customize a request by adding one
or more Configuration Elements to a Sampler.  For more
information, see
<a href="#samplers">Samplers</a>.
                    </p>
                    
                    <p>
                        Logical Controllers let you customize the logic that JMeter uses to
decide when to send requests.  For example, you can add an Interleave
Logic Controller to alternate between two HTTP Request Samplers.
For more information, see <a href="#logic_controller">Logical Controllers</a>.
                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="samplers">
                        3.2.1 Samplers<a class="sectionlink" href="#samplers" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
Samplers tell JMeter to send requests to a server and wait for a response.
They are processed in the order they appear in the tree.
Controllers can be used to modify the number of repetitions of a sampler.
</p>
                    
                    <p>
                        JMeter samplers include:

                        <ul>
                                
                            <li>FTP Request</li>
                                
                            <li>HTTP Request (can be used for SOAP or REST Webservice also)</li>
                                
                            <li>JDBC Request</li>
                                
                            <li>Java object request</li>
                                
                            <li>JMS request</li>
                                
                            <li>JUnit Test request</li>
                                
                            <li>LDAP Request</li>
                                
                            <li>Mail request</li>
                                
                            <li>OS Process request</li>
                                
                            <li>TCP request</li>
                            
                        </ul>
                        Each sampler has several properties you can set.
You can further customize a sampler by adding one or more Configuration Elements to the Test Plan.

                    </p>
                    
                    <p>If you are going to send multiple requests of the same type (for example,
HTTP Request) to the same server, consider using a Defaults Configuration
Element. Each controller has one or more Defaults elements (see below). </p>
                    
                    <p>Remember to add a Listener to your test plan to view and/or store the
results of your requests to disk.</p>
                    
                    <p>
                        If you are interested in having JMeter perform basic validation on
the response of your request, add an <a href="#assertions">Assertion</a> to
the sampler.  For example, in stress testing a web application, the server
may return a successful "HTTP Response" code, but the page may have errors on it or
may be missing sections. You could add assertions to check for certain HTML tags,
common error strings, and so on. JMeter lets you create these assertions using regular
expressions.
                    </p>
                    
                    <p>
                        <a href="component_reference.html#samplers">JMeter's built-in samplers</a>
                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="logic_controller">
                        3.2.2 Logic Controllers<a class="sectionlink" href="#logic_controller" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>Logic Controllers let you customize the logic that JMeter uses to
decide when to send requests.
Logic Controllers can change the order of requests coming from their
child elements.  They can modify the requests themselves, cause JMeter to repeat
requests, etc.
</p>
                    
                    <p>To understand the effect of Logic Controllers on a test plan, consider the
following test tree:</p>
                    
                    <p>
                        
                        <ul>
                            
                            <li>Test Plan</li>
                                
                            <ul>
                                    
                                <li>Thread Group</li>
                                        
                                <ul>
                                            
                                    <li>Once Only Controller</li>
                                                
                                    <ul>
                                                    
                                        <li>
                                            Login Request (an <a href="../usermanual/component_reference.html#HTTP_Request">HTTP Request</a>)
                                        </li>
                                                    
                                    </ul>
                                            
                                    <li>Load Search Page (HTTP Sampler)</li>
                                            
                                    <li>Interleave Controller</li>
                                                
                                    <ul>
                                                    
                                        <li>Search "A" (HTTP Sampler)</li>
                                                    
                                        <li>Search "B" (HTTP Sampler)</li>
                                                    
                                        <li>HTTP default request (Configuration Element)</li>
                                                    
                                    </ul>
                                            
                                    <li>HTTP default request (Configuration Element)</li>
                                            
                                    <li>Cookie Manager (Configuration Element)</li>
                                            
                                </ul>
                                    
                            </ul>
                            
                        </ul>
                        
                    </p>
                    
                    <p>
                        The first thing about this test is that the login request will be executed only
the first time through.  Subsequent iterations will skip it.  This is due to the
effects of the <a href="../usermanual/component_reference.html#Once_Only_Controller">Once Only Controller</a>.
                    </p>
                    
                    <p>After the login, the next Sampler loads the search page (imagine a
web application where the user logs in, and then goes to a search page to do a search).  This
is just a simple request, not filtered through any Logic Controller.</p>
                    
                    <p>
                        After loading the search page, we want to do a search.  Actually, we want to do
two different searches.  However, we want to re-load the search page itself between
each search.  We could do this by having 4 simple HTTP request elements (load search,
search "A", load search, search "B").  Instead, we use the <a href="../usermanual/component_reference.html#Interleave_Controller">Interleave Controller</a> which passes on one child request each time through the test.  It keeps the
ordering (i.e. it doesn't pass one on at random, but "remembers" its place) of its
child elements.  Interleaving 2 child requests may be overkill, but there could easily have
been 8, or 20 child requests.
                    </p>
                    
                    <p>
                        Note the <a href="../usermanual/component_reference.html#HTTP_Request_Defaults">HTTP Request Defaults</a> that
belongs to the Interleave Controller.  Imagine that "Search A" and "Search B" share
the same PATH info (an HTTP request specification includes domain, port, method, protocol,
path, and arguments, plus other optional items).  This makes sense - both are search requests,
 hitting the same back-end search engine (a servlet or cgi-script, let's say).  Rather than
 configure both HTTP Samplers with the same information in their PATH field, we
 can abstract that information out to a single Configuration Element.  When the Interleave
 Controller "passes on" requests from "Search A" or "Search B", it will fill in the blanks with
 values from the HTTP default request Configuration Element.  So, we leave the PATH field
 blank for those requests, and put that information into the Configuration Element.  In this
case, this is a minor benefit at best, but it demonstrates the feature.
                    </p>
                    
                    <p>The next element in the tree is another HTTP default request, this time added to the
Thread Group itself.  The Thread Group has a built-in Logic Controller, and thus, it uses
this Configuration Element exactly as described above.  It fills in the blanks of any
Request that passes through.  It is extremely useful in web testing to leave the DOMAIN
field blank in all your HTTP Sampler elements, and instead, put that information
into an HTTP default request element, added to the Thread Group.  By doing so, you can
test your application on a different server simply by changing one field in your Test Plan.
Otherwise, you'd have to edit each and every Sampler.</p>
                    
                    <p>
                        The last element is a <a href="../usermanual/component_reference.html#HTTP_Cookie_Manager">HTTP Cookie Manager</a>.  A Cookie Manager should be added to all web tests - otherwise JMeter will
ignore cookies.  By adding it at the Thread Group level, we ensure that all HTTP requests
will share the same cookies.
                    </p>
                    
                    <p>
                        Logic Controllers can be combined to achieve various results.  See the list of <a href="component_reference.html#logic_controllers">built-in
Logic Controllers</a>.
                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="test_fragments">
                        3.2.3 Test Fragments<a class="sectionlink" href="#test_fragments" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        The Test Fragment element is a special type of <a href="#controllers">controller</a> that
exists on the Test Plan tree at the same level as the Thread Group element.  It is distinguished
from a Thread Group in that it is not executed unless it is
referenced by either a <a href="../usermanual/component_reference.html#Module_Controller">Module Controller</a> or an <a href="../usermanual/component_reference.html#Include_Controller">Include_Controller</a>.

                    </p>
                    
                    <p>This element is purely for code re-use within Test Plans</p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="listeners">
                        3.3 Listeners<a class="sectionlink" href="#listeners" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        Listeners provide access to the information JMeter gathers about the test cases while
JMeter runs.  The  <a href="../usermanual/component_reference.html#Graph_Results">Graph Results</a> listener plots the response times on a graph.
The "View Results Tree" Listener shows details of sampler requests and responses, and can display basic HTML and XML representations of the response.
Other listeners provide summary or aggregation information.

                    </p>
                    
                    <p>
                        Additionally, listeners can direct the data to a file for later use.
Every listener in JMeter provides a field to indicate the file to store data to.
There is also a Configuration button which can be used to choose which fields to save, and whether to use CSV or XML format.

                        <div class="clear"></div>
                        <div class="note">Note that all Listeners save the same data; the only difference is in the way the data is presented on the screen.</div>
                        <div class="clear"></div>
                        
                    </p>
                    
                    <p>
Listeners can be added anywhere in the test, including directly under the test plan.
They will collect data only from elements at or below their level.
</p>
                    
                    <p>
                        There are several <a href="component_reference.html#listeners">listeners</a>
that come with JMeter.
                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="timers">
                        3.4 Timers<a class="sectionlink" href="#timers" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>By default, a JMeter thread executes samplers in sequence without pausing.
We recommend that you specify a delay by adding one of the available timers to
your Thread Group. If you do not add a delay, JMeter could overwhelm your server by
making too many requests in a very short amount of time.</p>
                    
                    <p>
                        A timer will cause JMeter to delay a certain amount of time <b>before</b> each
sampler which is in its <a href="#scoping_rules">scope</a>.
                    </p>
                    
                    <p>
If you choose to add more than one timer to a Thread Group, JMeter takes the sum of
the timers and pauses for that amount of time before executing the samplers to which the timers apply.
Timers can be added as children of samplers or controllers in order to restrict the samplers to which they are applied.
</p>
                    
                    <p>
                        To provide a pause at a single place in a test plan, one can use the <a href="../usermanual/component_reference.html#Flow_Control_Action">Flow Control Action</a> Sampler.

                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="assertions">
                        3.5 Assertions<a class="sectionlink" href="#assertions" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>Assertions allow you to assert facts about responses received from the
server being tested. Using an assertion, you can essentially "test" that your
application is returning the results you expect it to. </p>
                    
                    <p>For instance, you can assert that the response to a query will contain some
particular text. The text you specify can be a Perl-style regular expression, and
you can indicate that the response is to contain the text, or that it should match
the whole response.</p>
                    
                    <p>
                        You can add an assertion to any Sampler. For example, you can
add an assertion to a HTTP Request that checks for the text, "<span class="code">&lt;/HTML&gt;</span>".  JMeter
will then check that the text is present in the HTTP response.  If JMeter cannot find the
text, then it will mark this as a failed request.
                    </p>
                    
                    <div class="clear"></div>
                    <div class="note">
                        Note that assertions apply to all samplers which are in their <a href="#scoping_rules">scope</a>.
To restrict an assertion to a single sampler, add the assertion as a child of the sampler.

                    </div>
                    <div class="clear"></div>
                    
                    <p>To view assertion results, add an Assertion Listener to the Thread Group.
Failed Assertions will also show up in the Tree View and Table Listeners,
and will count towards the error %age for example in the Aggregate and Summary reports.
</p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="config_elements">
                        3.6 Configuration Elements<a class="sectionlink" href="#config_elements" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        A configuration element works closely with a Sampler.  Although it does not send requests
(except for <a href="../usermanual/component_reference.html#HTTP(S)_Test_Script_Recorder">HTTP(S) Test Script Recorder</a>), it can add to or modify requests.
                    </p>
                    
                    <p>A configuration element is accessible from only inside the tree branch where you place the element.
For example, if you place an HTTP Cookie Manager inside a Simple Logic Controller, the Cookie Manager will
only be accessible to HTTP Request Controllers you place inside the Simple Logic Controller (see figure 1).
The Cookie Manager is accessible to the HTTP requests "Web Page 1" and "Web Page 2", but not "Web Page 3".  </p>
                    
                    <p>Also, a configuration element inside a tree branch has higher precedence than the same element in a "parent"
branch.  For example, we defined two HTTP Request Defaults elements, "Web Defaults 1" and "Web Defaults 2".
Since we placed "Web Defaults 1" inside a Loop Controller, only "Web Page 2" can access it.  The other HTTP
requests will use "Web Defaults 2", since we placed it in the Thread Group (the "parent" of all other branches).</p>
                    
                    <figure>
                        <a href="../images/screenshots/http-config/http-config-example.png"><img src="../images/screenshots/http-config/http-config-example.png" width="" height="" alt="Figure 1 -
    Test Plan Showing Accessibility of Configuration Elements"></a>
                        <figcaption>Figure 1 -
    Test Plan Showing Accessibility of Configuration Elements</figcaption>
                    </figure>
                    
                    <div class="clear"></div>
                    <div class="note">
                        The <a href="../usermanual/component_reference.html#User_Defined_Variables">User Defined Variables</a> Configuration element is different.
It is processed at the start of a test, no matter where it is placed.
For simplicity, it is suggested that the element is placed only at the start of a Thread Group.

                    </div>
                    <div class="clear"></div>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="preprocessors">
                        3.7 Pre-Processor Elements<a class="sectionlink" href="#preprocessors" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        A Pre-Processor executes some action prior to a Sampler Request being made.
If a Pre-Processor is attached to a Sampler element, then it will execute just prior to that sampler element running.
A Pre-Processor is most often used to modify the settings of a Sample Request just before it runs, or to update variables that aren't extracted from response text.
See the <a href="test_plan.html#scoping_rules"><b>scoping rules</b></a> for more details on when Pre-Processors are executed.
                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="postprocessors">
                        3.8 Post-Processor Elements<a class="sectionlink" href="#postprocessors" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        A Post-Processor executes some action after a Sampler Request has been made.
If a Post-Processor is attached to a Sampler element, then it will execute just after that sampler element runs.
A Post-Processor is most often used to process the response data, often to extract values from it.
See the <a href="test_plan.html#scoping_rules"><b>scoping rules</b></a> for more details on when Post-Processors are executed.
                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="executionorder">
                        3.9 Execution order<a class="sectionlink" href="#executionorder" title="Link to here">&para;</a>
                    </h2>
                    
                    <ol start="0">
                        
                        <li>Configuration elements</li>
                        
                        <li>Pre-Processors</li>
                        
                        <li>Timers</li>
                        
                        <li>Sampler</li>
                        
                        <li>
                            Post-Processors (unless SampleResult is <span class="code">null</span>)
                        </li>
                        
                        <li>
                            Assertions (unless SampleResult is <span class="code">null</span>)
                        </li>
                        
                        <li>
                            Listeners (unless SampleResult is <span class="code">null</span>)
                        </li>
                        
                    </ol>
                    
                    <div class="clear"></div>
                    <div class="note">
Please note that Timers, Assertions, Pre- and Post-Processors are only processed if there is a sampler to which they apply.
Logic Controllers and Samplers are processed in the order in which they appear in the tree.
Other test elements are processed according to the scope in which they are found, and the type of test element.
[Within a type, elements are processed in the order in which they appear in the tree].
</div>
                    <div class="clear"></div>
                    
                    <p>
                        For example, in the following test plan:

                        <ul>
                            
                            <li>Controller</li>
                            
                            <ul>
                                
                                <li>Post-Processor 1</li>
                                
                                <li>Sampler 1</li>
                                
                                <li>Sampler 2</li>
                                
                                <li>Timer 1</li>
                                
                                <li>Assertion 1</li>
                                
                                <li>Pre-Processor 1</li>
                                
                                <li>Timer 2</li>
                                
                                <li>Post-Processor 2</li>
                                
                            </ul>
                            
                        </ul>
                        The order of execution would be:

                        <pre>
Pre-Processor 1
Timer 1
Timer 2
Sampler 1
Post-Processor 1
Post-Processor 2
Assertion 1

Pre-Processor 1
Timer 1
Timer 2
Sampler 2
Post-Processor 1
Post-Processor 2
Assertion 1
</pre>
                        
                    </p>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="scoping_rules">
                        3.10 Scoping Rules<a class="sectionlink" href="#scoping_rules" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
The JMeter test tree contains elements that are both hierarchical and ordered.  Some elements in the test trees are strictly hierarchical (Listeners, Config Elements, Post-Processors, Pre-Processors, Assertions, Timers), and some are primarily ordered (controllers, samplers).  When you create your test plan, you will create an ordered list of sample request (via Samplers) that represent a set of steps to be executed.  These requests are often organized within controllers that are also ordered.  Given the following test tree:</p>
                    
                    <figure>
                        <a href="../images/screenshots/scoping1.png"><img src="../images/screenshots/scoping1.png" width="" height="" alt="Example test tree"></a>
                        <figcaption>Example test tree</figcaption>
                    </figure>
                    
                    <p>The order of requests will be, One, Two, Three, Four.</p>
                    
                    <p>
                        Some controllers affect the order of their subelements, and you can read about these specific controllers in <a href="component_reference.html">the component reference</a>.
                    </p>
                    
                    <p>Other elements are hierarchical.  An Assertion, for instance, is hierarchical in the test tree.
If its parent is a request, then it is applied to that request. If its
parent is a Controller, then it affects all requests that are descendants of
that Controller.  In the following test tree:</p>
                    
                    <figure>
                        <a href="../images/screenshots/scoping2.png"><img src="../images/screenshots/scoping2.png" width="" height="" alt="Hierarchy example"></a>
                        <figcaption>Hierarchy example</figcaption>
                    </figure>
                    
                    <p>Assertion #1 is applied only to Request One, while Assertion #2 is applied to Requests Two and Three.</p>
                    
                    <p>Another example, this time using Timers:</p>
                    
                    <figure>
                        <a href="../images/screenshots/scoping3.png"><img src="../images/screenshots/scoping3.png" width="" height="" alt="complex example"></a>
                        <figcaption>complex example</figcaption>
                    </figure>
                    
                    <p>In this example, the requests are named to reflect the order in which they will be executed.  Timer #1 will apply to Requests Two, Three, and Four (notice how order is irrelevant for hierarchical elements).  Assertion #1 will apply only to Request Three.  Timer #2 will affect all the requests.</p>
                    
                    <p>Hopefully these examples make it clear how configuration (hierarchical) elements are applied.  If you imagine each Request being passed up the tree branches, to its parent, then to its parent's parent, etc., and each time collecting all the configuration elements of that parent, then you will see how it works.  </p>
                    
                    <div class="clear"></div>
                    <div class="note">
                        The Configuration elements Header Manager, Cookie Manager and Authorization manager are
treated differently from the Configuration Default elements.
The settings from the Configuration Default elements are merged into a set of values that the Sampler has access to.
However, the settings from the Managers are not merged.
If more than one Manager is in the scope of a Sampler,
only one Manager is used, but there is currently no way to specify <em>which</em> is used.

                    </div>
                    <div class="clear"></div>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="properties">
                        3.11 Properties and Variables<a class="sectionlink" href="#properties" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
                        JMeter <em>properties</em> are defined in <span class="code">jmeter.properties</span> (see <a href="get-started.html#configuring_jmeter">Getting Started - Configuring JMeter</a> for more details).

                        <br>
                        Properties are global to jmeter, and are mostly used to define some of the defaults JMeter uses.
For example the property <span class="code">remote_hosts</span> defines the servers that JMeter will try to run remotely.
Properties can be referenced in test plans
- see <a href="functions.html#__property">Functions - read a property</a> -
but cannot be used for thread-specific values.

                    </p>
                    
                    <p>
                        JMeter <em>variables</em> are local to each thread. The values may be the same for each thread, or they may be different.

                        <br>
                        If a variable is updated by a thread, only the thread copy of the variable is changed.
For example the <a href="../usermanual/component_reference.html#Regular_Expression_Extractor">Regular Expression Extractor</a> Post-Processor
will set its variables according to the sample that its thread has read, and these can be used later
by the same thread.
For details of how to reference variables and functions, see <a href="functions.html">Functions and Variables</a>

                    </p>
                    
                    <p>
                        Note that the values defined by the <a href="../usermanual/component_reference.html#Test_Plan">Test Plan</a>  and the <a href="../usermanual/component_reference.html#User_Defined_Variables">User Defined Variables</a> configuration element
are made available to the whole test plan at startup.
If the same variable is defined by multiple UDV elements, then the last one takes effect.
Once a thread has started, the initial set of variables is copied to each thread.
Other elements such as the
<a href="../usermanual/component_reference.html#User_Parameters">User Parameters</a> Pre-Processor or <a href="../usermanual/component_reference.html#Regular_Expression_Extractor">Regular Expression Extractor</a> Post-Processor
may be used to redefine the same variables (or create new ones). These redefinitions only apply to the current thread.

                    </p>
                    
                    <p>
                        The <a href="functions.html#__setProperty">setProperty</a> function can be used to define a JMeter property.
These are global to the test plan, so can be used to pass information between threads - should that be needed.

                    </p>
                    
                    <div class="clear"></div>
                    <div class="note">Both variables and properties are case-sensitive.</div>
                    <div class="clear"></div>
                    
                </div>
                
                <div class="subsection">
                    <h2 id="using_variables">
                        3.12 Using Variables to parameterise tests<a class="sectionlink" href="#using_variables" title="Link to here">&para;</a>
                    </h2>
                    
                    <p>
Variables don't have to vary - they can be defined once, and if left alone, will not change value.
So you can use them as short-hand for expressions that appear frequently in a test plan.
Or for items which are constant during a run, but which may vary between runs.
For example, the name of a host, or the number of threads in a thread group.
</p>
                    
                    <p>
                        When deciding how to structure a Test Plan,
make a note of which items are constant for the run, but which may change between runs.
Decide on some variable names for these -
perhaps use a naming convention such as prefixing them with <span class="code">C_</span> or <span class="code">K_</span> or using uppercase only
to distinguish them from variables that need to change during the test.
Also consider which items need to be local to a thread -
for example counters or values extracted with the Regular Expression Post-Processor.
You may wish to use a different naming convention for these.

                    </p>
                    
                    <p>
                        For example, you might define the following on the Test Plan:

                        <pre>
HOST             www.example.com
THREADS          10
LOOPS            20
</pre>
                        You can refer to these in the test plan as <span class="code">${HOST}</span> <span class="code">${THREADS}</span> etc.
If you later want to change the host, just change the value of the <span class="code">HOST</span> variable.
This works fine for small numbers of tests, but becomes tedious when testing lots of different combinations.
One solution is to use a property to define the value of the variables, for example:

                        <pre>
HOST             ${__P(host,www.example.com)}
THREADS          ${__P(threads,10)}
LOOPS            ${__P(loops,20)}
</pre>
                        You can then change some or all of the values on the command-line as follows:

                        <pre>
jmeter &hellip; -Jhost=www3.example.org -Jloops=13
</pre>
                        
                    </p>
                    
                </div>
                
            </div>
            <ul class="pagelinks">
                <li>
                    <a href="build-test-plan.html">&lt; Prev</a>
                </li>
                <li>
                    <a href="../index.html">Index</a>
                </li>
                <li>
                    <a href="build-web-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;
            2024
            , 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>
