<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | |
<!-- | |
Licensed to the Apache Software Foundation (ASF) under one or more | |
contributor license agreements. See the NOTICE file distributed with | |
this work for additional information regarding copyright ownership. | |
The ASF licenses this file to You under the Apache License, Version 2.0 | |
(the "License"); you may not use this file except in compliance with | |
the License. You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
--> | |
<!-- Content Stylesheet for Site --> | |
<!-- start the processing --> | |
<!-- ====================================================================== --> | |
<!-- Main Page Section --> | |
<!-- ====================================================================== --> | |
<html><head> | |
<link rel="stylesheet" type="text/css" href="HTMLParserTestFile_2_files/style.css"> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
<title>JMeter - User's Manual: Elements of a Test Plan</title> | |
</head> | |
<body bgcolor="#ffffff" link="#525D76" text="#000000"> | |
<table border="0" cellspacing="0"> | |
<!-- TOP IMAGE --> | |
<tbody><tr> | |
<td> | |
<!-- Need to specify height otherwise iframe seems to grab extra --> | |
<iframe src="HTMLParserTestFile_2_files/halfbanner.htm" style="border-width: 0pt; float: left;" frameborder="0" height="102" scrolling="no"></iframe> | |
</td> | |
<td align="left"> | |
<a href="http://jakarta.apache.org/"><img src="HTMLParserTestFile_2_files/jakarta-logo.gif" alt="Jakarta" title="Jakarta" border="0" height="48" width="505"></a> | |
</td> | |
<td align="right"> | |
<a href="http://jakarta.apache.org/jmeter/"><img src="HTMLParserTestFile_2_files/logo.jpg" alt="JMeter" title="JMeter" border="0" height="102" width="221"></a> | |
</td> | |
</tr> | |
</tbody></table> | |
<table border="0" cellspacing="4" width="100%"> | |
<tbody><tr><td colspan="2"> | |
<hr noshade="noshade" size="1"> | |
</td></tr> | |
<tr> | |
<!-- LEFT SIDE NAVIGATION --> | |
<td nowrap="true" valign="top" width="20%"> | |
<p><strong>About</strong></p> | |
<ul> | |
<li><a href="http://jakarta.apache.org/jmeter/index.html">Overview</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/jmeter/changes.html">Changes</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/jmeter/issues.html">Issues</a> | |
</li> | |
<li><a href="http://www.apache.org/licenses/">License</a> | |
</li> | |
<li><a href="http://wiki.apache.org/jakarta-jmeter/JMeterCommitters">Contributors</a> | |
</li> | |
</ul> | |
<p><strong>Download</strong></p> | |
<ul> | |
<li><a href="http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi">Download Releases</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/jmeter/nightly.html">Developer (Nightly) Builds</a> | |
</li> | |
</ul> | |
<p><strong>Documentation</strong></p> | |
<ul> | |
<li><a href="http://jakarta.apache.org/jmeter/usermanual/index.html">User Manual</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/jmeter/api/index.html">Javadocs</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/jmeter/localising/index.html">Localisation (Translator's Guide)</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/jmeter/building.html">Building JMeter and Add-Ons</a> | |
</li> | |
<li><a href="http://wiki.apache.org/jakarta-jmeter">JMeter Wiki</a> | |
</li> | |
<li><a href="http://wiki.apache.org/jakarta-jmeter/JMeterFAQ">FAQ (Wiki)</a> | |
</li> | |
</ul> | |
<p><strong>Tutorials (PDF format)</strong></p> | |
<ul> | |
<li><a href="http://jakarta.apache.org/jmeter/usermanual/jmeter_distributed_testing_step_by_step.pdf">Distributed Testing</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/jmeter/usermanual/jmeter_proxy_step_by_step.pdf">Recording Tests</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/jmeter/usermanual/junitsampler_tutorial.pdf">JUnit Sampler</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/jmeter/usermanual/jmeter_accesslog_sampler_step_by_step.pdf">Access Log Sampler</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/jmeter/extending/jmeter_tutorial.pdf">Extending JMeter</a> | |
</li> | |
</ul> | |
<p><strong>Community</strong></p> | |
<ul> | |
<li><a href="http://jakarta.apache.org/site/getinvolved.html">Get Involved</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/site/mail.html">Mailing Lists</a> | |
</li> | |
<li><a href="http://jakarta.apache.org/site/cvsindex.html">SVN Repositories</a> | |
</li> | |
</ul> | |
<p><strong>Foundation</strong></p> | |
<ul> | |
<li><a href="http://www.apache.org/">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> | |
</td> | |
<td align="left" valign="top" width="80%"> | |
<table> | |
<tbody><tr> | |
<td bgcolor="#525D76"> | |
<div align="right"><a href="http://jakarta.apache.org/jmeter/usermanual/index.html"><font color="#ffffff" face="arial,helvetica,sanserif" size="-1">Index</font></a></div> | |
</td> | |
<td bgcolor="#525D76"> | |
<div align="right"><a href="http://jakarta.apache.org/jmeter/usermanual/build-web-test-plan.html"><font color="#ffffff" face="arial,helvetica,sanserif" size="-1">Next</font></a></div> | |
</td> | |
<td bgcolor="#525D76"> | |
<div align="right"><a href="http://jakarta.apache.org/jmeter/usermanual/build-test-plan.html"><font color="#ffffff" face="arial,helvetica,sanserif" size="-1">Prev</font></a></div> | |
</td> | |
</tr> | |
</tbody></table> | |
<br> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#525D76"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<strong>4. Elements of a Test Plan</strong></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<p> | |
The Test Plan object has a checkbox called "Functional Testing". 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 Configuration button on a listener to decide what fields to save. | |
</p> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="thread_group"><strong>4.1 ThreadGroup</strong></a> | |
<a class="sectionlink" href="#thread_group" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<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: | |
</p><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> | |
<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> | |
Version 1.9 introduces a test run | |
<b> | |
scheduler | |
</b> | |
. | |
Click the checkbox at the bottom of the Thread Group panel to reveal extra fields | |
in which you can enter the start and end times of the run. | |
When the test is started, JMeter will wait if necessary until the start-time has been reached. | |
At the end of each cycle, JMeter checks if the end-time has been reached, and if so, the run is stopped, | |
otherwise the test is allowed to continue until the iteration limit is reached. | |
</p> | |
<p> | |
Alternatively, one can use the relative delay and duration fields. | |
Note that delay overrides start-time, and duration over-rides end-time. | |
</p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="controllers"><strong>4.2 Controllers</strong></a> | |
<a class="sectionlink" href="#controllers" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<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> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="samplers"><strong>4.2.1 Samplers</strong></a> | |
<a class="sectionlink" href="#samplers" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<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: | |
</p><ul> | |
<li> | |
FTP Request | |
</li> | |
<li> | |
HTTP Request | |
</li> | |
<li> | |
JDBC Request | |
</li> | |
<li> | |
Java object request | |
</li> | |
<li> | |
LDAP Request | |
</li> | |
<li> | |
SOAP/XML-RPC Request | |
</li> | |
<li> | |
WebService (SOAP) 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> | |
<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="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#samplers"> | |
JMeter's built-in samplers | |
</a> | |
</p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="logic_controller"><strong>4.2.2 Logic Controllers</strong></a> | |
<a class="sectionlink" href="#logic_controller" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<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> | |
</p><ul> | |
<li> | |
Test Plan | |
</li> | |
<ul> | |
<li> | |
Thread Group | |
</li> | |
<ul> | |
<li> | |
Once Only Controller | |
</li> | |
<ul> | |
<li> | |
Login Request (an | |
<a href="http://jakarta.apache.org/jmeter/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> | |
<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="http://jakarta.apache.org/jmeter/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="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#Interleave_Controller">Interleave Controller</a> | |
which passes on one child request each time through the test. It keeps the | |
ordering (ie - 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="http://jakarta.apache.org/jmeter/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="http://jakarta.apache.org/jmeter/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="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#logic_controllers"> | |
built-in | |
Logic Controllers | |
</a> | |
. | |
</p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="test_fragments"><strong>4.2.3 Test Fragments</strong></a> | |
<a class="sectionlink" href="#test_fragments" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<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="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#Module_Controller">Module Controller</a> | |
or an | |
<a href="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#Include_Controller">Include_Controller</a> | |
. | |
</p> | |
<p> | |
This element is purely for code re-use within Test Plans and was introduced in Version 2.5 | |
</p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="listeners"><strong>4.3 Listeners</strong></a> | |
<a class="sectionlink" href="#listeners" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<p> | |
Listeners provide access to the information JMeter gathers about the test cases while | |
JMeter runs. The | |
<a href="http://jakarta.apache.org/jmeter/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. | |
<b> | |
Note that all Listeners save the same data; the only difference is in the way the data is presented on the screen. | |
</b> | |
</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="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#listeners"> | |
listeners | |
</a> | |
that come with JMeter. | |
</p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="timers"><strong>4.4 Timers</strong></a> | |
<a class="sectionlink" href="#timers" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<p> | |
By default, a JMeter thread sends requests without pausing between each request. | |
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> | |
The 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="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#Test_Action">Test Action</a> | |
Sampler. | |
</p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="assertions"><strong>4.5 Assertions</strong></a> | |
<a class="sectionlink" href="#assertions" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<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, "</HTML>". 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> | |
<p> | |
Note that assertions apply to all samplers which are in its | |
<a href="#scoping_rules"> | |
scope | |
</a> | |
. | |
To restrict the assertion to a single sampler, add the assertion as a child of the sampler. | |
</p> | |
<p> | |
To view the 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> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="config_elements"><strong>4.6 Configuration Elements</strong></a> | |
<a class="sectionlink" href="#config_elements" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<p> | |
A configuration element works closely with a Sampler. Although it does not send requests | |
(except for | |
<a href="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#HTTP_Proxy_Server">HTTP Proxy Server</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> | |
<p></p><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><img src="HTMLParserTestFile_2_files/http-config-example.png"><br> | |
<font size="-1">Figure 1 - | |
Test Plan Showing Accessability of Configuration Elements | |
</font></td></tr></tbody></table><p></p> | |
<p> | |
</p><table bgcolor="#bbbb00" border="1" cellpadding="2" cellspacing="0" width="50%"> | |
<tbody><tr><td> | |
The | |
<a href="http://jakarta.apache.org/jmeter/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. | |
</td></tr> | |
</tbody></table> | |
<p></p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="preprocessors"><strong>4.7 Pre-Processor Elements</strong></a> | |
<a class="sectionlink" href="#preprocessors" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<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="http://jakarta.apache.org/jmeter/usermanual/build-test-plan.html#scoping_rules"> | |
<b> | |
scoping rules | |
</b> | |
</a> | |
for more details on when Pre-Processors are executed. | |
</p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="postprocessors"><strong>4.8 Post-Processor Elements</strong></a> | |
<a class="sectionlink" href="#postprocessors" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<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="http://jakarta.apache.org/jmeter/usermanual/build-test-plan.html#scoping_rules"> | |
<b> | |
scoping rules | |
</b> | |
</a> | |
for more details on when Post-Processors are executed. | |
</p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="executionorder"><strong>4.9 Execution order</strong></a> | |
<a class="sectionlink" href="#executionorder" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<ol start="0"> | |
<li> | |
Configuration elements | |
</li> | |
<li> | |
Pre-Processors | |
</li> | |
<li> | |
Timers | |
</li> | |
<li> | |
Sampler | |
</li> | |
<li> | |
Post-Processors (unless SampleResult is null) | |
</li> | |
<li> | |
Assertions (unless SampleResult is null) | |
</li> | |
<li> | |
Listeners (unless SampleResult is null) | |
</li> | |
</ol> | |
<p> | |
</p><table bgcolor="#bbbb00" border="1" cellpadding="2" cellspacing="0" width="50%"> | |
<tbody><tr><td> | |
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]. | |
</td></tr> | |
</tbody></table> | |
<p></p> | |
<p> | |
For example, in the following test plan: | |
</p><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></p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="scoping_rules"><strong>4.10 Scoping Rules</strong></a> | |
<a class="sectionlink" href="#scoping_rules" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<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-Procesors, 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> | |
<p></p><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><img src="HTMLParserTestFile_2_files/scoping1.png"><br> | |
<font size="-1">Example test tree | |
</font></td></tr></tbody></table><p></p> | |
<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="http://jakarta.apache.org/jmeter/usermanual/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> | |
<p></p><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><img src="HTMLParserTestFile_2_files/scoping2.png"><br> | |
<font size="-1">Hierarchy example | |
</font></td></tr></tbody></table><p></p> | |
<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> | |
<p></p><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td><img src="HTMLParserTestFile_2_files/scoping3.png"><br> | |
<font size="-1">complex example | |
</font></td></tr></tbody></table><p></p> | |
<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> | |
<b> | |
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 | |
<b> | |
which | |
</b> | |
is used. | |
</b> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="properties"><strong>4.11 Properties and Variables</strong></a> | |
<a class="sectionlink" href="#properties" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<p> | |
JMeter | |
<b> | |
properties | |
</b> | |
are defined in jmeter.properties (see | |
<a href="http://jakarta.apache.org/jmeter/usermanual/get-started.html#configuring_jmeter"> | |
Gettting Started - Configuring JMeter | |
</a> | |
for more details). | |
<br> | |
<br> | |
Properties are global to jmeter, and are mostly used to define some of the defaults JMeter uses. | |
For example the property remote_hosts defines the servers that JMeter will try to run remotely. | |
Properties can be referenced in test plans | |
- see | |
<a href="http://jakarta.apache.org/jmeter/usermanual/functions.html#__property"> | |
Functions - read a property | |
</a> | |
- | |
but cannot be used for thread-specific values. | |
</p> | |
<p> | |
JMeter | |
<b> | |
variables | |
</b> | |
are local to each thread. The values may be the same for each thread, or they may be different. | |
<br> | |
<br> | |
If a variable is updated by a thread, only the thread copy of the variable is changed. | |
For example the | |
<a href="http://jakarta.apache.org/jmeter/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="http://jakarta.apache.org/jmeter/usermanual/functions.html"> | |
Functions and Variables | |
</a> | |
</p> | |
<p> | |
Note that the values defined by the | |
<a href="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#Test_Plan">Test Plan</a> | |
and the | |
<a href="http://jakarta.apache.org/jmeter/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="http://jakarta.apache.org/jmeter/usermanual/component_reference.html#User_Parameters">User Parameters</a> | |
Pre-Processor or | |
<a href="http://jakarta.apache.org/jmeter/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="http://jakarta.apache.org/jmeter/usermanual/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> | |
<p> | |
</p><table bgcolor="#bbbb00" border="1" cellpadding="2" cellspacing="0" width="50%"> | |
<tbody><tr><td>Both variables and properties are case-sensitive. | |
</td></tr> | |
</tbody></table> | |
<p></p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table border="0" cellpadding="2" cellspacing="0" width="100%"> | |
<tbody><tr><td bgcolor="#828DA6"> | |
<font color="#ffffff" face="arial,helvetica,sanserif"> | |
<a name="using_variables"><strong>4.12 Using Variables to parameterise tests</strong></a> | |
<a class="sectionlink" href="#using_variables" title="Link to here">¶</a></font> | |
</td></tr> | |
<tr><td> | |
<blockquote> | |
<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 C_ or K_ 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: | |
</p><pre> | |
HOST www.example.com | |
THREADS 10 | |
LOOPS 20 | |
</pre> | |
You can refer to these in the test plan as ${HOST} ${THREADS} etc. | |
If you later want to change the host, just change the value of the HOST 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 ... -Jhost=www3.example.org -Jloops=13 | |
</pre> | |
<p></p> | |
</blockquote> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
</blockquote> | |
<p></p> | |
</td></tr> | |
<tr><td><br></td></tr> | |
</tbody></table> | |
<table> | |
<tbody><tr> | |
<td bgcolor="#525D76"> | |
<div align="right"><a href="http://jakarta.apache.org/jmeter/usermanual/index.html"><font color="#ffffff" face="arial,helvetica,sanserif" size="-1">Index</font></a></div> | |
</td> | |
<td bgcolor="#525D76"> | |
<div align="right"><a href="http://jakarta.apache.org/jmeter/usermanual/build-web-test-plan.html"><font color="#ffffff" face="arial,helvetica,sanserif" size="-1">Next</font></a></div> | |
</td> | |
<td bgcolor="#525D76"> | |
<div align="right"><a href="http://jakarta.apache.org/jmeter/usermanual/build-test-plan.html"><font color="#ffffff" face="arial,helvetica,sanserif" size="-1">Prev</font></a></div> | |
</td> | |
</tr> | |
</tbody></table> | |
<br> | |
</td> | |
</tr> | |
<tr><td colspan="2"> | |
<hr noshade="noshade" size="1"> | |
</td></tr> | |
<tr><td colspan="2"> | |
<div align="center"><font color="#525D76" size="-1"><em> | |
Copyright © 1999-2011, Apache Software Foundation | |
</em></font></div> | |
</td></tr> | |
<tr><td colspan="2"> | |
<div align="center"><font color="#525D76" size="-1"> | |
Apache, Apache JMeter, JMeter, the Apache feather, and the Apache JMeter logo are | |
trademarks of the Apache Software Foundation. | |
</font> | |
</div> | |
</td></tr> | |
</tbody></table> | |
</body></html> | |
<!-- end the processing --> |