| <!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 --> |