mstover1    2003/07/15 10:48:50

  Modified:    xdocs/usermanual component_reference.xml
  Log:
  Doc update prior to RC3 release
  
  Revision  Changes    Path
  1.52      +419 -177  jakarta-jmeter/xdocs/usermanual/component_reference.xml
  
  Index: component_reference.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/xdocs/usermanual/component_reference.xml,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -u -r1.51 -r1.52
  --- component_reference.xml   15 Jul 2003 16:27:59 -0000      1.51
  +++ component_reference.xml   15 Jul 2003 17:48:50 -0000      1.52
  @@ -1,5 +1,5 @@
   <?xml version="1.0"?>
  -<document index="yes">
  +<document index="yes" index-level-2="yes" colbreak="13.5" prev="boss.html" 
next="functions.html" date="$Date$">
   
   <properties>
     <title>User's Manual: Component Reference</title>
  @@ -10,7 +10,7 @@
   
   <section name="13.1 Samplers" anchor="samplers">
   
  -<component index="13.1.1" name="FTP Request" 
screenshot="../images/screenshots/gen-controller/ftp-request.gif">
  +<component index="13.1.1" name="FTP Request" 
screenshot="gen-controller/ftp-request.gif">
   <description>This controller lets you send an FTP "retrieve file" request to an FTP 
server.
   If you are going to send multiple requests to the same FTP server, consider
   using a <complink name="FTP Request Defaults"/> Configuration
  @@ -32,7 +32,7 @@
   
   </component>
   
  -<component name="HTTP Request" index="13.1.2" 
screenshot="../images/screenshots/gen-controller/http-request.png">
  +<component name="HTTP Request" index="13.1.2" 
screenshot="gen-controller/http-request.png">
   
   <description>
           <p>This sampler lets you send an HTTP/HTTPS request to a web server.  It
  @@ -74,7 +74,8 @@
   "Send Parameters With the Request" section.</property>
           <property name="Send Parameters With the Request" required="No">The query 
string will
           be generated from the list of parameters you provide.  Each parameter has a 
<i>name</i> and
  -        <i>value</i>.  The query string will be generated in the correct fashion, 
depending on
  +        <i>value</i>, the options to encode the parameter, and an option to include 
or exclude an equals sign (some applications
  +        don't expect an equals when the value is the empty string).  The query 
string will be generated in the correct fashion, depending on
           the choice of "Method" you made (ie if you chose GET, the query string will 
be
           appended to the URL, if POST, then it will be sent separately).  Also, if 
you are
           sending a file using a multipart form, the query string will be created 
using the
  @@ -107,7 +108,7 @@
   
   </component>
   
  -<component name="JDBC Request" index="13.1.3" 
screenshot="../images/screenshots/gen-controller/jdbc-request.gif">
  +<component name="JDBC Request" index="13.1.3" 
screenshot="gen-controller/jdbc-request.gif">
   
   <description><p>This sampler lets you send an JDBC Request (an SQL query) to a 
database.</p>
   <p>If you are going to send multiple requests to the same database, consider
  @@ -147,7 +148,7 @@
   
   </component>
   
  -<component name="Java Request" index="13.1.4" 
screenshot="../images/screenshots/java_request.gif">
  +<component name="Java Request" index="13.1.4" screenshot="java_request.gif">
   
   <description><p>This sampler lets you control a java class that implements the
   JavaSamplerClient interface.  By writing your own implementation of this interface,
  @@ -170,9 +171,11 @@
   
   </component>
   
  -<component name="SOAP/XML-RPC Request" index="13.1.5" 
screenshot="../images/screenshots/soap_sampler.png">
  +<component name="SOAP/XML-RPC Request" index="13.1.5" screenshot="soap_sampler.png">
   
  -<description><p>This sampler lets you send a SOAP request to a webservice. It can 
also be used to send XML-RPC over HTTP. It creates an HTTP POST request, with the 
specified XML as the POST content.</p>
  +<description><p>This sampler lets you send a SOAP request to a webservice.  It can 
also be
  +used to send XML-RPC over HTTP.  It creates an HTTP POST request, with the 
specified XML as the
  +POST content.</p>
   </description>
   
   <properties>
  @@ -185,75 +188,97 @@
   
   </component>
   
  -<component name="LDAP Request" index="13.1.6" 
screenshot="../images/screenshots/ldap_request.png">
  -     <description>For testing LDAP servers</description>
  -     <p>There are two ways to create test cases for testing a LDAP Server.</p>
  -       <ol><li>Inbuilt Test cases.</li>
  -       <li>User defined Test cases.</li></ol>
  -
  -<p>There are four test scenarios of testing LDAP. The tests are given below:</p>
  -     <ol>
  -        <li>Add Test</li>
  -             <ol><li>Inbuilt test :
  -                  <p>This will add a pre-defined entry in the LDAP Server and 
calculate
  -     the execution time. After execution of the test, the created entry will be
  -     deleted from the LDAP
  -     Server.</p></li>
  -             <li>User defined test :
  -                  <p>This will add the entry in the LDAP Server. User has to enter 
all the
  -     attributes in the table.The entries are collected from the table to add. The
  -     execution time is calculated. The created entry will not be deleted after the
  -     test.</p></li></ol>
  -
  -     <li>Modify Test</li>
  -             <ol><li>Inbuilt test :
  -                  <p>This will create a pre-defined entry first, then will modify 
the
  -     created entry in the LDAP Server.And calculate the execution time. After
  - execution
  -     of the test, the created entry will be deleted from the LDAP Server.</p></li>
  -             <li>User defined test
  -                  <p>This will modify the entry in the LDAP Server. User has to 
enter all the
  -     attributes in the table. The entries are collected from the table to modify.
  -     The execution time is calculated. The entry will not be deleted from the LDAP
  -     Server.</p></li></ol>
  -
  -     <li>Search Test</li>
  -             <ol><li>Inbuilt test :
  -                    <p>This will create the entry first, then will search if the 
attributes
  -     are available. It calculates the execution time of the search query. At the
  -     end of  the execution,created entry will be deleted from the LDAP 
Server.</p></li>
  -             <li>User defined test
  -                   <p>This will search the user defined entry(Search filter) in the 
Search
  -     base (again, defined by the user). The entries should be available in the LDAP
  -     Server. The execution time is  calculated.</p></li></ol>
  -
  -        <li>Delete Test</li>
  -             <ol><li>Inbuilt test :
  -                    <p>This will create a pre-defined entry first, then it will be 
deleted
  -     from the LDAP Server. The execution time is calculated.</p></li>
  -
  -             <li>User defined test
  -                  <p>This will delete the user-defined entry in the LDAP Server. 
The entries
  -     should be available in the LDAP Server. The execution time is 
calculated.</p></li></ol></ol>
  -</component>
  +<component name="LDAP Request" index="13.1.6" screenshot="ldap_request.png">
  +  <description>This Sampler lets you send a different Ldap request(Add, Modify, 
Delete and Search) to a LDAP server.
  +    <p>If you are going to send multiple requests to the same LDAP server, consider
  +      using an <complink name="LDAP Request Defaults"/>
  +      Configuration Element so you do not have to enter the same information for 
each
  +      LDAP Request.</p> The same way the <complink name="Login Config Element"/> 
also using for Login and password.
  +  </description>
  +
  +  <p>There are two ways to create test cases for testing a LDAP Server.</p>
  +  <ol><li>Inbuilt Test cases.</li>
  +    <li>User defined Test cases.</li></ol>
  +
  +    <p>There are four test scenarios of testing LDAP. The tests are given below:</p>
  +    <ol>
  +      <li>Add Test</li>
  +      <ol><li>Inbuilt test :
  +        <p>This will add a pre-defined entry in the LDAP Server and calculate
  +          the execution time. After execution of the test, the created entry will be
  +          deleted from the LDAP
  +          Server.</p></li>
  +          <li>User defined test :
  +            <p>This will add the entry in the LDAP Server. User has to enter all the
  +              attributes in the table.The entries are collected from the table to 
add. The
  +              execution time is calculated. The created entry will not be deleted 
after the
  +              test.</p></li></ol>
  +
  +              <li>Modify Test</li>
  +              <ol><li>Inbuilt test :
  +                <p>This will create a pre-defined entry first, then will modify the
  +                  created    entry in the LDAP Server.And calculate the execution 
time. After
  +                  execution
  +                  of the test, the created entry will be deleted from the LDAP 
Server.</p></li>
  +                  <li>User defined test
  +                    <p>This will modify the entry in the LDAP Server. User has to 
enter all the
  +                      attributes in the table. The entries are collected from the 
table to modify.
  +                      The execution time is calculated. The entry will not be 
deleted from the LDAP
  +                      Server.</p></li></ol>
  +
  +                      <li>Search Test</li>
  +                      <ol><li>Inbuilt test :
  +                        <p>This will create the entry first, then will search if 
the attributes
  +                          are available. It calculates the execution time of the 
search query. At the
  +                          end of  the execution,created entry will be deleted from 
the LDAP Server.</p></li>
  +                          <li>User defined test
  +                            <p>This will search the user defined entry(Search 
filter) in the Search
  +                              base (again, defined by the user). The entries should 
be available in the LDAP
  +                              Server. The execution time is  
calculated.</p></li></ol>
  +
  +                              <li>Delete Test</li>
  +                              <ol><li>Inbuilt test :
  +                                <p>This will create a pre-defined entry first, then 
it will be deleted
  +                                  from the LDAP Server. The execution time is 
calculated.</p></li>
  +
  +                                  <li>User defined test
  +                                    <p>This will delete the user-defined entry in 
the LDAP Server. The entries
  +                                      should be available in the LDAP Server. The 
execution time is calculated.</p></li></ol></ol>
  +                                      <properties>
  +                                        <property name="Name" 
required="No">Descriptive name for this controller that is shown in the 
tree.</property>
  +                                        <property name="Server Name or IP" 
required="Yes">Domain name or IP address of the LDAP server.
  +                                          JMeter assumes the LDAP server is 
listening on the default port(389).</property>
  +                                          <property name="Port" 
required="Yes">default port(389).</property>
  +                                          <property name="root DN" 
required="Yes">DN for the server to communicate</property>
  +                                          <property name="Username" 
required="Usually">LDAP server username.</property>
  +                                          <property name="Password" 
required="Usually">LDAP server password.</property>
  +                                          <property name="Entry DN" 
required="yes">the name of the context to create or Modify; may not be empty Example: 
do you want to add cn=apache,ou=test
  +                                            you have to add in table name=cn, 
value=apache
  +                                          </property>
  +                                          <property name="Delete" 
required="yes">the name of the context to Delete; may not be empty</property>
  +                                          <property name="Search base" 
required="yes">the name of the context or object to search</property>
  +                                          <property name="Search filter" 
required="yes"> the filter expression to use for the search; may not be null</property>
  +                                          <property name="add test" required="yes"> 
this name, value pair to added in the given context object</property>
  +                                          <property name="modify test" 
required="yes"> this name, value pair to add or modify in the given context 
object</property>
  +                                      </properties>
  +
  +                                      <links>
  +                                        <link 
href="build-ldap-test-plan.html">Building a Ldap Test Plan</link>
  +                                        <complink name="LDAP Request Defaults"/>
  +                                      </links>
   
  -<component name="Webservice Request" index="13.1.7" 
screenshot="../images/screenshots/webservice_sampler.png">
  +</component>
  +<component name="WebService(SOAP) Request (Alpha Code)" index="13.1.7" 
screenshot="webservice_sampler.png">
   
  -<description><p>This sampler has been tested with IIS Webservice running .NET 1.0. 
It hasn't been tested with SUN or IBM webservice providers, but it should work. The 
sampler uses Apache SOAP driver, to serialize the message and set the header with the 
correct SOAPAction. Basic WSDL support is provided for configuring the request. Both 
IBM and SUN provide WSDL drivers, but the sampler doesn't use them. The sampler 
requires activation.jar and mail.jar since Apache SOAP requires those libraries. You 
can put the XML message in a file and use the file option. The sampler will randomly 
select a file from a directory when "message folder" has a valid entry. The order of 
precedence is path, file, then text.</p>
  -<p>If you want to configure the request using WSDL, enter the WSDL URL in the field 
and click "Load WSDL". Once the WSDL is loaded, "Webmethods" drop down will be 
populated. Select the method you want and click configure. For the message content, 
you can use either the text box, text file or a directory. If the XML Messages are 
static and don't need to change between requests, caching the DOM Document will 
improve performance and avoid parsing XML. If the client system doesn't have much 
memory, uncheck "Read SOAP Response".</p>
  +<description><p>This sampler has been tested with IIS Webservice running .NET 1.0. 
It hasn't been tested with SUN or IBM webservices providers, but it should work. The 
sampler uses Apache SOAP driver, to serialize the message and set the header with the 
correct SOAPAction. Right now the sampler doesn't support automatic WSDL handling, 
since Apache SOAP currently doesn't provide support for it. Both IBM and SUN provide 
WSDL drivers.</p>
   </description>
   
   <properties>
           <property name="Name" required="No">Descriptive name for this sampler
            that is shown in the tree.</property>
           <property name="URL" required="Yes">The URL to direct the SOAP request 
to.</property>
  -        <property name="WSDL URL" required="No">The URL where WSDL is 
located.</property>
           <property name="SOAPAction" required="Yes">The SOAPAction defined in the 
webservice description or WSDL.</property>
           <property name="Soap Data" required="Yes">The Soap XML message</property>
  -        <property name="File name" required="No">File containing the Soap XML 
message</property>
  -        <property name="Message Path" required="No">Directory containing multiple 
SOAP messages.<br/>The sampler will randomly select a file and use it.</property>
  -        <property name="Memory Cache" required="No">Cache DOM Document in memory to 
avoid parsing</property>
  -        <property name="Read SOAP Response" required="No">Should the sampler read 
and save the response</property>
           </properties>
   
   </component>
  @@ -262,12 +287,13 @@
   
   <section name="13.2 Logic Controllers" anchor="logic_controllers">
   
  -<component index="13.2.1" name="Interleave Controller" 
screenshot="../images/screenshots/logic-controller/interleave-controller.gif">
  +<component index="13.2.1" name="Interleave Controller" 
screenshot="logic-controller/interleave-controller.png">
   <description><p>If you add Generative or Logic Controllers to an Interleave 
Controller, JMeter will alternate among each of the
   other controllers for each loop iteration. </p>
   </description>
   <properties>
           <property name="name" required="No">Descriptive name for this controller 
that is shown in the tree.</property>
  +        <property name="ignore sub-controller blocks" required="No">If checked, the 
interleave controller will treat sub-controllers like single request elements and only 
allow one request per controller at a time.  </property>
   </properties>
   
   <!--
  @@ -289,21 +315,24 @@
   
   <p><a href="../demos/InterleaveTestPlan.jmx">Download</a> this example (see Figure 
1).  In this example,
   we configured the Thread Group to have two threads and a loop count of five, for a 
total of ten
  -requests. See the table below for the sequence JMeter sends the HTTP Requests.</p>
  +requests per thread. See the table below for the sequence JMeter sends the HTTP 
Requests.</p>
   
  -<figure image="../images/screenshots/logic-controller/interleave.gif">Figure 1 - 
Interleave Controller Example 1</figure>
  +<figure image="logic-controller/interleave.png">Figure 1 - Interleave Controller 
Example 1</figure>
   
   <table border="1" cellspacing="0" cellpadding="4">
   <tr valign="top"><td>Loop Iteration</td><td>Each JMeter Thread Sends These HTTP 
Requests</td></tr>
   <tr valign="top"><td>1</td><td>News Page</td></tr>
  +<tr valign="top"><td>2</td><td>Log Page</td></tr>
   <tr valign="top"><td>2</td><td>FAQ Page</td></tr>
  +<tr valign="top"><td>2</td><td>Log Page</td></tr>
   <tr valign="top"><td>3</td><td>Gump Page</td></tr>
  -<tr valign="top"><td>4</td><td>Because there are no more requests in controller, 
JMeter start over and sends the first HTTP Request, which is the News Page.</td></tr>
  +<tr valign="top"><td>2</td><td>Log Page</td></tr>
  +<tr valign="top"><td>4</td><td>Because there are no more requests in the 
controller,<br/> JMeter starts over and sends the first HTTP Request, which is the 
News Page.</td></tr>
  +<tr valign="top"><td>2</td><td>Log Page</td></tr>
   <tr valign="top"><td>5</td><td>FAQ Page</td></tr>
  +<tr valign="top"><td>2</td><td>Log Page</td></tr>
   </table>
   
  -<p>Note, the File Reporter is configured to store the results in a file named
  -"interleave-test.dat" in the current directory.</p>
   
   </example>
   
  @@ -314,18 +343,23 @@
   to have a single thread and a loop count of eight.  Notice that the Test Plan has 
an outer Interleave Controller with
   two Interleave Controllers inside of it.</p>
   
  -<figure image="../images/screenshots/logic-controller/interleave2.gif">
  +<figure image="logic-controller/interleave2.png">
           Figure 2 - Interleave Controller Example 2
   </figure>
   
   <p>The outer Interleave Controller alternates between the
   two inner ones.  Then, each inner Interleave Controller alternates between each of 
the HTTP Requests.  Each JMeter
  -thread will send the requests in the following order: Home Page, Bug Page, CVS 
Page, and FAQ Page.
  +thread will send the requests in the following order: Home Page, Interleaved, Bug 
Page, Interleaved, CVS Page, Interleaved, and FAQ Page, Interleaved.
   Note, the File Reporter is configured to store the results in a file named 
"interleave-test2.dat" in the current directory.</p>
  +
  +<figure image="logic-controller/interleave3.png">
  +        Figure 3 - Interleave Controller Example 3
  +</figure>
  +<p>If the two interleave controllers under the main interleave controller were 
instead simple controllers, then the order would be: Home Page, CVS Page, Interleaved, 
Bug Page, FAQ Page, Interleaved.  However, if "ignore sub-controller blocks" was 
checked on the main interleave controller, then the order would be: Home Page, 
Interleaved, Bug Page, Interleaved, CVS Page, Interleaved, and FAQ Page, 
Interleaved.</p>
   </example>
   </component>
   
  -<component index="13.2.2" name="Loop Controller" anchor="loop" 
screenshot="../images/screenshots/logic-controller/loop-controller.gif">
  +<component index="13.2.2" name="Loop Controller" anchor="loop" 
screenshot="logic-controller/loop-controller.gif">
   <description><p>If you add Generative or Logic Controllers to a Loop Controller, 
JMeter will
   loop through them a certain number of times, in addition to the loop value you
   specified for the Thread Group.  For example, if you add one HTTP Request to a
  @@ -349,7 +383,7 @@
   In this example, we created a Test Plan that sends a particular HTTP Request
   only once and sends another HTTP Request five times.</p>
   
  -<figure image="../images/screenshots/logic-controller/loop-example.gif">Figure 3 - 
Loop Controller Example</figure>
  +<figure image="logic-controller/loop-example.gif">Figure 3 - Loop Controller 
Example</figure>
   
   <p>We configured the Thread Group for a single thread and a loop count value of
   one. Instead of letting the Thread Group control the looping, we used a Loop
  @@ -364,11 +398,13 @@
   
   </component>
   
  -<component index="13.2.4" name="Once Only Controller" anchor="once_only_controller"
  -screenshot="../images/screenshots/logic-controller/once-only-controller.gif">
  +<component index="13.2.3" name="Once Only Controller" anchor="once_only_controller"
  +screenshot="logic-controller/once-only-controller.gif">
   <description>
  -<p>The Once Only Logic Controller tells JMeter to process the controller(s) inside 
it only once, regardless of the loop
  -count value you specify in the Thread Group or Loop Controller.</p>
  +<p>The Once Only Logic Controller tells JMeter to process the controller(s) inside 
it only once, and pass over any requests under it
  +during further iterations through the test plan.</p>
  +
  +<p>The Once Only Controller will now execute always during the first iteration of 
any looping parent controller.  Thus, if the Once Only Controller is placed under a 
Loop Controller specified to loop 5 times, then the Once Only Controller will execute 
only on the first iteration through the Loop Controller (ie, every 5 times).  Note 
this means the Once Only Controller will still behave as previously expected if put 
under a Thread Group (runs only once per test), but now the user has more flexibility 
in the use of the Once Only Controller.</p>
   
   <p>For testing that requires a login, consider placing the login request in this 
controller since each thread only needs
   to login once to establish a session.</p>
  @@ -383,14 +419,14 @@
   Each thread sends one request to the Home Page, followed by three requests to the 
Bug Page.
   Although we configured the Thread Group to iterate three times, each JMeter thread 
only
   sends one request to the Home Page because this request lives inside a Once Only 
Controller.</p>
  -<figure image="../images/screenshots/logic-controller/once-only-example.gif">Figure 
4. Once Only Controller Example</figure>
  +<figure image="logic-controller/once-only-example.png">Figure 4. Once Only 
Controller Example</figure>
   <p>Each JMeter thread will send the requests in the following order: Home Page, Bug 
Page,
   Bug Page, Bug Page. Note, the File Reporter is configured to store the results in a 
file named "loop-test.dat" in the current directory.</p>
   
   </example>
   </component>
   
  -<component index="13.2.5" name="Simple Controller" anchor="simple_controller" 
screenshot="../images/screenshots/logic-controller/simple-controller.gif">
  +<component index="13.2.4" name="Simple Controller" anchor="simple_controller" 
screenshot="logic-controller/simple-controller.gif">
   <description>
   <p>The Simple Logic Controller lets  you organize your Samplers and other
   Logic Controllers.  Unlike other Logic Controllers, this controller provides no 
functionality beyond that of a
  @@ -409,12 +445,12 @@
   following order: Ant Home Page, Ant News Page, Log4J Home Page, Log4J History Page.
   Note, the File Reporter
   is configured to store the results in a file named "simple-test.dat" in the current 
directory.</p>
  -<figure image="../images/screenshots/logic-controller/simple-example.gif">Figure 5 
Simple Controller Example</figure>
  +<figure image="logic-controller/simple-example.gif">Figure 5 Simple Controller 
Example</figure>
   
   </example>
   </component>
   
  -<component index="13.2.6" name="Random Controller" 
screenshot="../images/screenshots/logic-controller/random-controller.gif">
  +<component index="13.2.5" name="Random Controller" 
screenshot="logic-controller/random-controller.gif">
   <description>
   <p>The Random Logic Controller acts similarly to the Interleave Controller, except 
that
   instead of going in order through its sub-controllers and samplers, it picks one
  @@ -429,7 +465,7 @@
   
   </component>
   
  -<component index="13.2.7" name="Recording Controller" 
screenshot="../images/screenshots/logic-controller/recording-controller.gif">
  +<component index="13.2.6" name="Recording Controller" 
screenshot="logic-controller/recording-controller.gif">
   <description>
   <p>The Recording Controller is a place holder indicating where the proxy server 
should
   record samples to.  During test run, it has no effect, similar to the Simple 
Controller.  But during
  @@ -442,6 +478,40 @@
   </properties>
   
   </component>
  +
  +<component index="13.2.7" name="Module Controller" 
screenshot="module_controller.png">
  +<description>
  +<p>The Module Controller provides a mechanism for substituting test plan fragments 
into the current test plan at run-time.  To use this
  +module effectively, one might have a number of Controllers under the <complink 
name="WorkBench"/>, each with a different series of
  +samplers under them.  The module controller can then be used to easily switch 
between these multiple test cases simply by choosing
  +the appropriate controller in it's drop down box.  This provides convenience for 
running many alternate test plans quickly and easily.
  +</p>
  +</description>
  +<note>The Module Controller should not be used with remote testing or non-gui 
testing in conjunction with Workbench components since the Workbench test elements are 
not part of test plan .jmx files.  Any such test will fail.</note>
  +<properties>
  +        <property name="Name" required="No">Descriptive name for this controller 
that is shown in the tree.</property>
  +        <property name="Module to Run" required="Yes">The module controller 
provides a list of all controllers loaded into the gui.  Select
  +        the one you want to substitute in at runtime.</property>
  +</properties>
  +
  +</component>
  +
  +<component index="13.2.8" name="Throughput Controller" 
screenshot="throughput_controller.png">
  +<description>
  +<p>The Throughput Controller allows the user to control how often it is executed.  
There are two modes - percent execution and total executions.  Percent executions 
causes the controller to execute a certain percentage of the iterations through the 
test plan.  Total
  +executions causes the controller to stop executing after a certain number of 
executions have occurred.  Like the Once Only Controller, this
  +setting is reset when a parent Loop Controller restarts.
  +</p>
  +</description>
  +<note>The Throughput Controller can yield very complex behavior when combined with 
other controllers - in particular with interleave or random controllers as parents 
(also very useful).</note>
  +<properties>
  +        <property name="Name" required="No">Descriptive name for this controller 
that is shown in the tree.</property>
  +        <property name="Execution Style" required="Yes">Whether the controller will 
run in percent executions or total executions mode.</property>
  +        <property name="Throughput" required="Yes">A number.  for percent execution 
mode, a number from 0-100 that indicates the percentage of times the controller will 
execute.  "50" means the controller will execute during half the iterations throught 
the test plan.  for total execution mode, the number indicates the total number of 
times the controller will execute.</property>
  +        <property name="Per User" required="No">If checked, per user will cause the 
controller to calculate whether it should execute on a per user (per thread) basis.  
if unchecked, then the calculation will be global for all users.  for example, if 
using total execution mode, and uncheck "per user", then the number given for 
throughput will be the total number of executions made.  if "per user" is checked, 
then the total number of executions would be the number of users times the number 
given for throughput.</property>
  +</properties>
  +
  +</component>
   </section>
   
   <section name="13.3 Listeners" anchor="listeners">
  @@ -453,15 +523,16 @@
   The saving and reading of test results is generic.  The various
   listeners generally have a panel whereby one can specify the file to
   which the results will be written (or read).  By default,
  -the results are stored as XML
  -files, typically with a ".jtl" extension.</p>
  +the results are stored as CSV
  +files, typically with a ".jtl" extension.  Storing as CSV is the most efficient 
option, but is less detailed than XML (the other available option).</p>
  +<p>To change the format, in jmeter.properties, find the following line:</p>
  +<p>jmeter.save.saveservice.output_format=csv</p>
  +<p>Change "csv" to "xml" for greater detail.</p>
   <p>
  -The information to be saved is configurable.  If one specifies the
  -"Functional Test Mode" on the Test Plan element, one gets the largest
  -amount of information.  If this box is not checked, the default saved
  +The information to be saved is configurable.  For maximum information, choose "xml" 
as the format and specify "Functional Test Mode" on the Test Plan element.  If this 
box is not checked, the default saved
   data includes a time stamp (the number of milliseconds since midnight,
   January 1, 1970 UTC), the data type, the thread name, the label, the
  -response time, message, and code, and a success indicator.</p>
  +response time, message, and code, and a success indicator.  If checked, all 
information, including the full response data will be logged.</p>
   <p>
   One can get a more selective set of information my modifying the
   jmeter.properties file.  The following example indicates how to set
  @@ -470,10 +541,10 @@
   <p>
   <code>
   <pre>
  -    timeStamp|time|label|responseCode|threadName|dataType|success|failureMessage
  -    02/06/03 08:21:42|1187|Backoffice Home|200|Thread Group-1|text|true|
  -    02/06/03 08:21:42|47|Login BO|200|Thread Group-1|text|false|Test Failed, 
expected to contain: password
  -    etc.
  +timeStamp|time|label|responseCode|threadName|dataType|success|failureMessage
  +02/06/03 08:21:42|1187|Backoffice Home|200|Thread Group-1|text|true|
  +02/06/03 08:21:42|47|Login BO|200|Thread Group-1|text|false|Test Failed, 
  +     expected to contain: password etc.
   </pre>
   </code></p>
   <p>
  @@ -530,14 +601,10 @@
   make it impossible for JMeter to interpret the value when it is read
   in later for viewing purposes.</p>
   <p>
  -Note that reading of comma-separated values is also not
  -supported.  This format is provided for use with external viewing
  -and data manipulation tools like spreadsheets or databases.</p>
  -<p>
   The internal viewing capabilities are described in the following subsections.</p>
   
   </description>
  -<component index="13.3.1" name="Mailer Visualizer" 
screenshot="../images/screenshots/mailer_vis.png">
  +<component index="13.3.1" name="Mailer Visualizer" screenshot="mailer_vis.png">
   <description><p>The mailer visualizer can be set up to send email if a test run 
receives too many
   failed responses from the server.</p></description>
   
  @@ -564,7 +631,7 @@
   <description>No Description</description>
   </component>
   
  -<component index="13.3.3" name="Graph Results" 
screenshot="../images/screenshots/graph_results.gif">
  +<component index="13.3.3" name="Graph Results" screenshot="graph_results.png">
   <description><p>The Graph Results listener generates a simple graph that plots all 
sample times.  Along
   the bottom of the graph, the current sample (black), the current average of all 
samples(blue), the
   current standard deviation (red), and the current throughput rate (green) are 
displayed in milliseconds.</p>
  @@ -577,14 +644,14 @@
   number.</p></description>
   </component>
   
  -<component index="13.3.4" name="Spline Visualizer" 
screenshot="../images/screenshots/spline_visualizer.gif">
  +<component index="13.3.4" name="Spline Visualizer" 
screenshot="spline_visualizer.png">
   <description><p>The Spline Visualizer provides a view of all sample times from the 
start
   of the test till the end, regardless of how many samples have been taken.  The 
spline
   has 10 points, each representing 10% of the samples, and connected using spline
   logic to show a single continuous line.</p></description>
   </component>
   
  -<component index="13.3.5" name="Assertion Results" 
screenshot="../images/screenshots/assertion_results.gif">
  +<component index="13.3.5" name="Assertion Results" 
screenshot="assertion_results.png">
   <description><p>The Assertion Results visualizer shows the URL of each sample taken 
(no time information
   is shown).  It also reports failures of any <a 
href="test_plan.html#assertions">Assertions</a> that
   are part of the test plan.</p></description>
  @@ -594,7 +661,7 @@
   </links>
   </component>
   
  -<component index="13.3.6" name="View Results Tree" 
screenshot="../images/screenshots/view_results_tree.png">
  +<component index="13.3.6" name="View Results Tree" 
screenshot="view_results_tree.png">
   <description>The View Results Tree shows a tree of all sample responses, allowing 
you to view the
   response for any sample.  In addition to showing the response, you can see the time 
it took to get
   this response, and some response codes.
  @@ -608,13 +675,13 @@
   </description>
   </component>
   
  -<component index="13.3.7" name="Aggregate Report" 
screenshot="../images/screenshots/aggregate_report.png">
  +<component index="13.3.7" name="Aggregate Report" screenshot="aggregate_report.png">
   <description>The aggregate report creates a table row for each differently named 
request in your test.  For each
   request, it totals the response information and provides request count, min, max, 
average, error rate, and an
   idealized throughput calculation.</description>
   </component>
   
  -<component index="13.3.8" name="View Results in Table" 
screenshot="../images/screenshots/table_results.gif">
  +<component index="13.3.8" name="View Results in Table" 
screenshot="table_results.png">
   <description>This visualizer creates a row for every sample result.  Each sample 
result's URL,
   time in milliseconds, success/failure is displayed.  Like the <complink name="View 
Results Tree"/>,
   this visualizer uses a lot of memory.</description>
  @@ -630,7 +697,7 @@
   
   <section name="13.4 Configuration Elements" anchor="config_elements">
   
  -<component index="13.4.1" name="HTTP Authorization Manager" 
screenshot="../images/screenshots/http-config/http-auth-manager.gif">
  +<component index="13.4.1" name="HTTP Authorization Manager" 
screenshot="http-config/http-auth-manager.gif">
   
   <description>
   <p>The Authorization Manager lets you specify one or more user logins for web pages 
that are
  @@ -677,8 +744,8 @@
   to "/secret/index1.html" and "/secret/index2.html".  The other HTTP request, named 
"NoSecretPage" makes a request to
   "/index.html".</p>
   
  -<figure image="../images/screenshots/http-config/auth-manager-example1a.gif">Figure 
6 - Test Plan</figure>
  -<figure image="../images/screenshots/http-config/auth-manager-example1b.gif">Figure 
7 - Authorization Manager Control Panel</figure>
  +<figure image="http-config/auth-manager-example1a.gif">Figure 6 - Test Plan</figure>
  +<figure image="http-config/auth-manager-example1b.gif">Figure 7 - Authorization 
Manager Control Panel</figure>
   
   <p>When we run the Test Plan, JMeter looks in the Authorization table for the URL 
it is requesting.  If the Base URL matches
   the URL, then JMeter passes this information along with the request.</p>
  @@ -689,7 +756,7 @@
   
   </component>
   
  -<component index="13.4.2" name="HTTP Cookie Manager" 
screenshot="../images/screenshots/http-config/http-cookie-manager.gif">
  +<component index="13.4.2" name="HTTP Cookie Manager" 
screenshot="http-config/http-cookie-manager.gif">
   
   <description><p>The Cookie Manager element has two functions:<br/>
   First, it stores and sends cookies just like a web browser. If you have an HTTP 
Request and
  @@ -714,7 +781,7 @@
   
   </component>
   
  -<component index="13.4.3" name="HTTP Proxy Server" 
screenshot="../images/screenshots/proxy_control.png">
  +<component index="13.4.3" name="HTTP Proxy Server" screenshot="proxy_control.png">
   
   <description><p>The Proxy Server allows JMeter to watch and record your actions 
while you browse your web application
   with your normal browser (such as Internet Explorer).  JMeter will create test 
sample objects and store them
  @@ -761,11 +828,8 @@
   the port # is from the Proxy Control Panel shown above.</note>
   
   <b>Where Do Samples Get Recorded?</b>
  -<p>JMeter places the recorded samples in the Thread Group, or if you have a Simple 
Logic Controller,  JMeter places
  -them there.  Also, if you have a HTTP Request Defaults element, then the recorded 
samples will have empty fields for
  -the default values you specified.</p>
  -<note>If you have more than one Simple Logic Controller, JMeter records the samples 
to each
  -of your Simple Logic Controllers.  We plan to correct this in a future 
release.</note>
  +<p>JMeter places the recorded samples in a Recording Controller found under a 
Thread Group (so be sure to add a ThreadGroup and then a Recording Controller before 
you start recording).  Also, if you have a HTTP Request Defaults element, then the 
recorded samples will have empty fields for
  +the default values you specified.  Additionally, you can specify user-defined 
values that will replaced in your samples as they are recorded.  See <a 
href="best-practices.html#proxy_server">Best Practices with the Proxy Server</a> for 
more info.</p>
   
   <p>When you are done recording your test samples, stop the proxy server (hit the 
&quot;stop&quot; button).  Remember to reset
   your browser's proxy settings.  Now, you may want to sort and re-order the test 
script, add timers, listeners, a
  @@ -774,7 +838,7 @@
   </component>
   
   <component index="13.4.4" name="HTTP Request Defaults"
  -        screenshot="../images/screenshots/http-config/http-request-defaults.gif">
  +        screenshot="http-config/http-request-defaults.png">
   <description><p>This element lets you set default values that your HTTP Request 
controllers use.  For example, if you are
   creating a Test Plan with 25 HTTP Request controllers and all of the requests are 
being sent to the same server,
   you could add a single HTTP Request Defaults element with the "Server Name or IP" 
field filled in.  Then, when
  @@ -802,28 +866,28 @@
   </component>
   
   <component index="13.4.5" name="FTP Request Defaults"
  -                
screenshot="../images/screenshots/ftp-config/ftp-request-defaults.gif">
  +                screenshot="ftp-config/ftp-request-defaults.gif">
   <description></description>
   </component>
   
   <component index="13.4.6" name="JDBC Database Connection Pool Defaults"
  -                
screenshot="../images/screenshots/jdbc-config/jdbc-db-conn-pool.gif">
  +                screenshot="jdbc-config/jdbc-db-conn-pool.gif">
   <description></description>
   </component>
   
   <component index="13.4.7" name="JDBC Database Login Defaults"
  -                screenshot="../images/screenshots/jdbc-config/jdbc-db-login.gif">
  +                screenshot="jdbc-config/jdbc-db-login.gif">
   <description></description>
   </component>
   
   <component index="13.4.8" name="JDBC SQL Query Defaults"
  -                screenshot="../images/screenshots/jdbc-config/jdbc-sql-query.gif">
  +                screenshot="jdbc-config/jdbc-sql-query.gif">
   <description></description>
   </component>
   
   
   
  -<component index="13.4.9" name="HTTP Header Manager" 
screenshot="../images/screenshots/http-config/http-header-manager.gif">
  +<component index="13.4.9" name="HTTP Header Manager" 
screenshot="http-config/http-header-manager.gif">
   <description><p>The Header Manager lets you add or override HTTP request 
headers.</p>
   </description>
   
  @@ -846,51 +910,56 @@
   that tells JMeter to override the default "User-Agent" request header and use a 
particular Internet Explorer agent string
   instead. (see figures 9 and 10).</p>
   
  -<figure 
image="../images/screenshots/http-config/header-manager-example1a.gif">Figure 9 - Test 
Plan</figure>
  -<figure 
image="../images/screenshots/http-config/header-manager-example1b.gif">Figure 10 - 
Header Manager Control Panel</figure>
  +<figure image="http-config/header-manager-example1a.gif">Figure 9 - Test 
Plan</figure>
  +<figure image="http-config/header-manager-example1b.gif">Figure 10 - Header Manager 
Control Panel</figure>
   </example>
   
   </component>
   
  -<component index="13.4.10" name="User Parameters" 
screenshot="../images/screenshots/user_params.png">
  -<description><p>Allows the user to specify values for User Variables specific to 
individual threads.</p>
  -<p>User Variables can also be specified in the Test Plan but not specific to 
individual threads. This panel allows
  -you to specify a series of values for any User Variable. For each thread, the 
variable will be assigned one of the values from the series
  -in sequence. If there are more threads than values, the values get re-used. For 
example, this can be used to assign a distinct
  -user id to be used by each thread. User variables can be referenced in any field of 
any jMeter Component.</p>
  +<component index="13.4.10" name="Login Config Element" 
screenshot="login-config.png">
  +<description><p>The Login Config Element lets you add or override username and 
password settings in samplers that use username and password as part of their 
setup.</p>
  +</description>
   
  -<p>The variable is specified by clicking the Add Variable button in the bottom of 
the panel and filling in the Variable name in the 'Name:' column.
  -To add a new value to the series, click the 'Add User' button and fill in the 
desired value in the newly added column.</p>
  +<properties>
  +        <property name="Name" required="No">Descriptive name for this element that 
is shown in the tree. </property>
  +  <property name="Username" required="No">The default username to use.</property>
  +  <property name="Password" required="No">The default password to use.</property>
  +</properties>
   
  -<p>Values can be accessed in any test component in the same thread group, using the 
<a href="functions.html">function syntax</a>: ${variable}.</p>
  -</description>
   </component>
   
  -<component index="13.4.11" name="Counter" 
screenshot="../images/screenshots/counter.png">
  -<description><p>Allows the user to create a counter that can be referenced anywhere
  -in the Thread Group.  The counter config lets the user configure a starting point, 
a maximum,
  -and the increment.  The counter will loop from the start to the max, and then start 
over
  -with the start, continuing on like that until the test is ended.  </p></description>
  +<component index="13.4.11" name="Simple Config Element" 
screenshot="simple_config_element.png">
  +<description><p>The Simple Config Element lets you add or override arbitrary values 
in samplers.  You can choose the name of the value
  +and the value itself.  Although some adventurous users might find a use for this 
element, it's here primarily for developers as a basic
  +GUI that they can use while developing new JMeter components.</p>
  +</description>
  +
   <properties>
  -        <property name="Name" required="">Descriptive name for this element that is 
shown in the tree.</property>
  -        <property name="Start" required="Yes">The starting number for the counter.  
The counter will equal this
  -        number during the first iteration.</property>
  -        <property name="Increment" required="Yes">How much to increment the counter 
by after each
  -        iteration.</property>
  -        <property name="Maximum" required="Yes">If the counter exceeds the maximum, 
then it is reset to the Start value.</property>
  -        <property name="Reference Name" required="Yes">This controls how you refer 
to this value in other elements.  Syntax is
  -        as in <a href="functions.html">user-defined values</a>: 
<code>$(reference_name}</code>.</property>
  -        <property name="Track Counter Independently for each User" required="No">In 
other words, is this a global counter, or does each user get their
  -        own counter?  If unchecked, the counter is global (ie, user #1 will get 
value "1", and user #2 will get value "2" on
  -        the first iteration).  If checked, each user has an independent 
counter.</property>
  +        <property name="Name" required="No">Descriptive name for this element that 
is shown in the tree. </property>
  +  <property name="Parameter Name" required="Yes">The name of each parameter.  These 
values are internal to JMeter's workings and
  +  are not generally documented.  Only those familiar with the code will know these 
values.</property>
  +  <property name="Parameter Value" required="Yes">The value to apply to that 
parameter.</property>
   </properties>
  +
  +</component>
  +
  +<component index="13.4.12" name="LDAP Request Defaults" 
screenshot="ldap_defaults.png">
  +<description><p>The LDAP Request Defaults component lets you set default values for 
LDAP testing.  See the <complink name="LDAP Request"/>.</p>
  +</description>
  +
  +</component>
  +
  +<component index="13.4.13" name="Java Request Defaults" 
screenshot="java_defaults.png">
  +<description><p>The Java Request Defaults component lets you set default values for 
Java testing.  See the <complink name="Java Request"/>.</p>
  +</description>
  +
   </component>
   
   </section>
   
   <section name="13.5 Assertions" anchor="assertions">
   
  -<component index="13.5.1" name="Response Assertion" anchor="basic_assertion" 
screenshot="../images/screenshots/assertion/assertion.gif">
  +<component index="13.5.1" name="Response Assertion" anchor="basic_assertion" 
screenshot="assertion/assertion.gif">
   
   <description><p>The response assertion control panel let's you add strings to be 
tested. These strings can
   be regular expressions. You can also choose whether the strings will be expected
  @@ -911,16 +980,16 @@
   </properties>
   
   <example title="Assertion Examples" anchor="assertion_examples">
  -<figure image="../images/screenshots/assertion/example1a.gif">Figure 7 - Test 
Plan</figure>
  -<figure image="../images/screenshots/assertion/example1b.gif">Figure 8 - Assertion 
Control Panel with Pattern</figure>
  -<figure image="../images/screenshots/assertion/example1c-pass.gif">Figure 9 - 
Assertion Listener Results (Pass)</figure>
  -<figure image="../images/screenshots/assertion/example1c-fail.gif">Figure 10 - 
Assertion Listener Results (Fail)</figure>
  +<figure image="assertion/example1a.png">Figure 7 - Test Plan</figure>
  +<figure image="assertion/example1b.gif">Figure 8 - Assertion Control Panel with 
Pattern</figure>
  +<figure image="assertion/example1c-pass.gif">Figure 9 - Assertion Listener Results 
(Pass)</figure>
  +<figure image="assertion/example1c-fail.gif">Figure 10 - Assertion Listener Results 
(Fail)</figure>
   </example>
   
   
   </component>
   
  -<component index="13.5.2" name="Duration Assertion" 
screenshot="../images/screenshots/duration_assertion.png">
  +<component index="13.5.2" name="Duration Assertion" 
screenshot="duration_assertion.png">
   <description><p>The Duration Assertion tests that each response was received within 
a given amount
   of time.  Any response that takes longer than the given number of milliseconds 
(specified by the
   user) is marked as a failed response.</p></description>
  @@ -933,11 +1002,34 @@
   </properties>
   </component>
   
  +<component index="13.5.3" name="Size Assertion" screenshot="size_assertion.png">
  +<description><p>The Size Assertion tests that each response contains the right 
number of bytes in it.  You can specify that
  +the size be equal to, greater than, less than, or not equal to a given number of 
bytes.</p></description>
  +
  +<properties>
  +<property name="Name" required="">Descriptive name for this element that is shown 
in the tree.</property>
  +        <property name="Size in bytes" required="Yes">The number of bytes to use in 
testing the size of the response.</property>
  +        <property name="Type of Comparison" required="Yes">Whether to test that the 
response is equal to, greater than, less than,
  +        or not equal to, the number of bytes specified.</property>
  +
  +</properties>
  +</component>
  +
  +<component index="13.5.4" name="XML Assertion" screenshot="xml_assertion.png">
  +<description><p>The XML Assertion tests that the response data consists of a 
formally correct XML document.  It does not
  +validate the XML based on a DTD or schema or do any further 
validation.</p></description>
  +
  +<properties>
  +<property name="Name" required="">Descriptive name for this element that is shown 
in the tree.</property>
  +
  +</properties>
  +</component>
  +
   </section>
   
   <section name="13.6 Timers" anchor="timers">
   
  -<component index="13.6.1" name="Constant Timer" anchor="constant" 
screenshot="../images/screenshots/timers/constant_timer.gif">
  +<component index="13.6.1" name="Constant Timer" anchor="constant" 
screenshot="timers/constant_timer.gif">
   <description>
   <p>If you want to have each thread pause for the same amount of time between
   requests, use this timer.</p></description>
  @@ -948,7 +1040,7 @@
   </properties>
   </component>
   
  -<component index="13.6.2" name="Gaussian Random Timer" 
screenshot="../images/screenshots/timers/gauss_random_timer.gif">
  +<component index="13.6.2" name="Gaussian Random Timer" 
screenshot="timers/gauss_random_timer.gif">
   
   <description><p>This timer pauses each thread request for a random amount of time, 
with most
   of the time intervals ocurring near a particular value.  The total delay is the
  @@ -965,7 +1057,7 @@
   
   </component>
   
  -<component index="13.6.3" name="Uniform Random Timer" 
screenshot="../images/screenshots/timers/uniform_random_timer.gif">
  +<component index="13.6.3" name="Uniform Random Timer" 
screenshot="timers/uniform_random_timer.gif">
   
   <description><p>This timer pauses each thread request for a random amount of time, 
with
   each time interval having the same probability of occurring. The total delay
  @@ -981,7 +1073,7 @@
   
   </component>
   
  -<component index="13.6.4" name="Constant Throughput Timer" 
screenshot="../images/screenshots/timers/constant_throughput_timer.gif">
  +<component index="13.6.4" name="Constant Throughput Timer" 
screenshot="timers/constant_throughput_timer.gif">
   
   <description><p>This timer introduces variable pauses, calculated to keep the total 
throughput (in terms of samples per minute) as close as possible to a give figure. Of 
course the throughput will be lower if the server is not capable of handling it, or if 
other timers or time-consuming test elements prevent it.</p>
   
  @@ -995,7 +1087,7 @@
   </component>
   </section>
   
  -<section name="13.7 Modifiers" anchor="Modifiers">
  +<section name="13.7 Pre Processors" anchor="preprocessors">
   <component index="13.7.1" name="HTML Link Parser" anchor="html_link_parser">
   <description>
   <p>This modifier parses HTML response from the server and extracts
  @@ -1010,7 +1102,7 @@
   <p>Consider a simple example: let's say you wanted JMeter to &quot;spider&quot; 
through your site,
   hitting link after link parsed from the HTML returned from your server (this is not
   actually the most useful thing to do, but it serves as a good example).  You would 
create
  -a <complink name="Simple Controller"/>, and add the &quot;HTML Link Parser&quot; to 
it.  Then, create a
  +a <complink name="Simple Controller"/>, and add the &quot;HTML Link Parser&quot; to 
it.  Then, create an
   HTTP Request, and set the domain to &quot;.*&quot;, and the path likewise. This will
   cause your test sample to match with any link found on the returned pages.  If you 
wanted to
   restrict the spidering to a particular domain, then change the domain value
  @@ -1037,7 +1129,7 @@
   will choose at random, and replace the value in your URL test sample.  Each time 
through
   the test, a new random value will be chosen.</p>
   
  -<figure image="../images/screenshots/modification.png">Figure 8 - Online Poll 
Example</figure>
  +<figure image="modification.png">Figure 8 - Online Poll Example</figure>
   
   <note>One important thing to remember is that you must create a test sample 
immediately
   prior that will return an HTML page with the links and forms that are relevant to
  @@ -1046,7 +1138,7 @@
   
   </component>
   
  -<component index="13.7.2" name="HTTP URL Re-writing Modifier" 
screenshot="../images/screenshots/url_rewriter.gif">
  +<component index="13.7.2" name="HTTP URL Re-writing Modifier" 
screenshot="url_rewriter.png">
   <description><p>This modifier works similarly to the HTML Link Parser, except it 
has a specific purpose for which
   it is easier to use than the HTML Link Parser, and more efficient.  For web 
applications that
   use URL Re-writing to store session ids instead of cookies, this element can be 
attached at the
  @@ -1065,10 +1157,11 @@
           grab the value assigned to it, whether it's in an HREF or a form.</property>
           <property name="Path Extension" required="No">Some web apps rewrite URLs by 
appending
           a semi-colon plus the session id parameter.  Check this box if that is 
so.</property>
  +        <property name="Do not use equals in path extension" required="No">Some web 
apps rewrite URLs without using an &quot;=&quot; sign between the parameter name and 
value (such as Intershop Enfinity).</property>
   </properties>
   </component>
   
  -<component index="13.7.3" name="HTML Parameter Mask" useinstead="Counter" 
screenshot="../images/screenshots/parameter_mask.png">
  +<component index="13.7.3" name="HTML Parameter Mask" useinstead="Counter" 
screenshot="parameter_mask.png">
   <description><p>The HTML Parameter Mask is used to generate unique values for HTML 
arguments.  By
   specifying the name of the parameter, a value prefix and suffix, and counter 
parameters, this
   modifier will generate values of the form "<code>name=prefixcountersuffix</code>".  
Any HTTP
  @@ -1096,7 +1189,7 @@
   </properties>
   </component>
   
  -<component index="13.7.4" name="HTTP User Parameter Modifier" useinstead="User 
Parameters" screenshot="../images/screenshots/user_param_modifier.gif">
  +<component index="13.7.4" name="HTTP User Parameter Modifier" useinstead="User 
Parameters" screenshot="user_param_modifier.gif">
   <description><p>The User Parameter Modifier uses an XML file get values for HTTP 
arguments.  Any
   HTTP Request that this modifier modifies will be checked for the existence of the 
specified
   arguments.  If found, the values for those arguments will be replaced by the values 
found in the
  @@ -1115,11 +1208,95 @@
   </properties>
   </component>
   
  +<component index="13.7.5" name="User Parameters" screenshot="user_params.png">
  +<description><p>Allows the user to specify values for User Variables specific to 
individual threads.</p>
  +<p>User Variables can also be specified in the Test Plan but not specific to 
individual threads. This panel allows
  +you to specify a series of values for any User Variable. For each thread, the 
variable will be assigned one of the values from the series
  +in sequence. If there are more threads than values, the values get re-used. For 
example, this can be used to assign a distinct
  +user id to be used by each thread. User variables can be referenced in any field of 
any jMeter Component.</p>
  +
  +<p>The variable is specified by clicking the Add Variable button in the bottom of 
the panel and filling in the Variable name in the 'Name:' column.
  +To add a new value to the series, click the 'Add User' button and fill in the 
desired value in the newly added column.</p>
  +
  +<p>Values can be accessed in any test component in the same thread group, using the 
<a href="functions.html">function syntax</a>: ${variable}.</p>
  +</description>
  +
  +<properties>
  +        <property name="Name" required="">Descriptive name for this element that is 
shown in the tree.</property>
  +        <property name="Update Once Per Iteration" required="Yes">A flag to 
indicate whether the User Paramters element
  +        should update it's variables only once per iteration.  if you embed 
functions into the UP, then you may need greater
  +        control over how often the values of the variables are updated.  Keep this 
box checked to ensure the values are
  +        updated each time through the UP's parent controller.  Uncheck the box, and 
the UP will update the parameters for 
  +        every sample request made within it's <a 
href="build-test-plan.html#scoping_rules">scope</a>.</property>
  +        
  +</properties>
  +</component>
  +
  +<component index="13.7.6" name="Counter" screenshot="counter.png">
  +<description><p>Allows the user to create a counter that can be referenced anywhere
  +in the Thread Group.  The counter config lets the user configure a starting point, 
a maximum,
  +and the increment.  The counter will loop from the start to the max, and then start 
over
  +with the start, continuing on like that until the test is ended.  </p></description>
  +<properties>
  +        <property name="Name" required="">Descriptive name for this element that is 
shown in the tree.</property>
  +        <property name="Start" required="Yes">The starting number for the counter.  
The counter will equal this
  +        number during the first iteration.</property>
  +        <property name="Increment" required="Yes">How much to increment the counter 
by after each
  +        iteration.</property>
  +        <property name="Maximum" required="Yes">If the counter exceeds the maximum, 
then it is reset to the Start value.</property>
  +        <property name="Reference Name" required="Yes">This controls how you refer 
to this value in other elements.  Syntax is
  +        as in <a href="functions.html">user-defined values</a>: 
<code>$(reference_name}</code>.</property>
  +        <property name="Track Counter Independently for each User" required="No">In 
other words, is this a global counter, or does each user get their
  +        own counter?  If unchecked, the counter is global (ie, user #1 will get 
value "1", and user #2 will get value "2" on
  +        the first iteration).  If checked, each user has an independent 
counter.</property>
  +</properties>
  +</component>
  +
  +</section>
  +
  +<section name="13.8 Post-Processors" anchor="postprocessors">
  +<component index="13.8.1" name="Regular Expression Extractor" 
screenshot="regex_extractor.png">
  +<description><p>Allows the user to extract values from a server response using a 
Perl-type regular expression.  As a post-processor,
  +this element will execute after each Sample request in its <scope/>, applying the 
regular expression, extracting the requested values,
  +generate the template string, and store the result into the given variable 
name.</p></description>
  +<properties>
  +        <property name="Name" required="">Descriptive name for this element that is 
shown in the tree.</property>
  +        <property name="Reference Name" required="Yes">The name of the JMeter 
variable in which to store the result.  Also note that each group is stored as 
[refname]_g#, where [refname] is the string you entered as the reference name, and # 
is the group number, where group 0 is the entire match, group 1 is the match from the 
first set of parentheses, etc.</property>
  +        <property name="Regular Expression" required="Yes">The regular expression 
used to parse the response data.</property>
  +        <property name="Template" required="Yes">The template used to create a 
string from the matches found.  This is an arbitrary string
  +        with special elements to refer to groups within the regular expression.  
The syntax to refer to a group is: '$1$' to refer to
  +        group 1, '$2$' to refer to group 2, etc.</property>
  +        <property name="Match No." required="Yes">Indicates which match to use.  
The regular expression may match multiple times.  Use a
  +        value of zero to indicate JMeter should choose a match at random.  
Otherwise, select the numbered match assuming they
  +        are ordered as they appear in the response data.</property>
  +        <property name="Default Value" required="No">If no matches are found, the 
default value is stored in the variable.</property>
  +</properties>
  +</component>
   </section>
   
  -<section name="13.8 Miscellaneous Features" anchor="Miscellaneous_Features">
  +<section name="13.9 Miscellaneous Features" anchor="Miscellaneous_Features">
  +
  +<component index="13.9.1" name="Test Plan" screenshot="testplan.png">
  +<description><p>At the Test Plan level, static variables can be defined that allow 
users to abstract values that are repeated throughout their tests, such as server 
names.  Here, one can instruct JMeter to save the maximum sample information to file 
by selecting "functional testing".  Also, an option exists here to instruct JMeter to 
run the <complink name="Thread Group"/> serially rather than in 
parallel.</p></description>
  +</component>
  +
  +<component index="13.9.2" name="Thread Group" screenshot="threadgroup.png">
  +<description><p>A Thread Group defines a pool of users that will execute a 
particular test case against your server.  In the Thread Group GUI, you can control 
the number of users simulated (num of threads), the ramp up time (how long it takes to 
start all the threads), the number of times to perform the test, and optionally, a 
start and stop time for the test.</p></description>
  +
  +<properties>
  +        <property name="Name" required="">Descriptive name for this element that is 
shown in the tree.</property>
  +        <property name="Number of Threads" required="Yes">Number of users to 
simulate.</property>
  +        <property name="Ramp-up Period" required="Yes">How long JMeter should take 
to get all the threads started.  If there are 10 threads and a ramp-up time of 100 
seconds, then each thread will begin 10 seconds after the previous thread started, for 
a total time of 100 seconds to get the test fully up to speed.</property>
  +        <property name="Loop Count" required="No">Number of times to perform the 
test case.  Alternatively, "forever" can be selected causing the test to run until 
manually stopped.</property>
  +        <property name="Start Time" required="No">If the scheduler checkbox is 
selected, one can choose an absolute start time.  When you start your test, JMeter 
will wait until the specified start time to begin testing.</property>
  +        <property name="End Time" required="No">If the scheduler checkbox is 
selected, one can choose an absolute end time.  When you start your test, JMeter will 
wait until the specified start time to begin testing, and it will stop at the 
specified end time.</property></properties>
  +</component>
  +
  +<component index="13.9.3" name="WorkBench" screenshot="workbench.png">
  +<description><p>The WorkBench simply provides a place to temporarily store test 
elements while not in use, for copy/paste purposes, or any other purpose you desire.  
When you save your test plan, WorkBench items are not saved with it.  Your WorkBench 
can be saved independently, if you like (right-click on WorkBench and choose 
Save).</p></description>
  +</component>
   
  -<component index="13.8.1" name="SSL Manager" screenshot="">
  +<component index="13.9.4" name="SSL Manager" screenshot="">
   <p>
     The SSL Manager is a way to select a client certificate so that you can test
     applications that use Public Key Infrastructure (PKI).  In order to use it,
  @@ -1174,11 +1351,11 @@
   </component>
   </section>
   
  -<section name="13.9 Functions" anchor="functions">
  +<section name="13.10 Functions" anchor="functions">
   <p>Please read the <a href="functions.html">general description</a> of how 
functions work.  Here is given only the details of
   specific functions.</p>
   
  -<component index="13.9.1" name="__regexFunction">
  +<component index="13.10.1" name="__regexFunction">
   <description><p>The Regex Function is used to parse the previous response using any 
regular
   expression (provided by user).  The function returns the template string with 
variable values filled
   in.</p>
  @@ -1225,7 +1402,7 @@
   </properties>
   </component>
   
  -<component index="13.9.2" name="__counter">
  +<component index="13.10.2" name="__counter">
   <description><p>The counter generates a new number each time it is called, starting 
with 1
   and incrementing by +1 each time.  The counter can be configured to keep each 
simulated user's values
   separate, or to use the same counter for all user.  If each user's values is 
incremented separately,
  @@ -1242,7 +1419,7 @@
   </properties>
   </component>
   
  -<component index="13.9.3" name="__threadNum">
  +<component index="13.10.3" name="__threadNum">
   <description><p>The thread number function simply returns the number of the thread 
currently
   being executed.  These numbers are independent of ThreadGroup, meaning thread #1 in 
one threadgroup
   is indistinguishable from thread #1 in another threadgroup, from the point of view 
of this function.</p>
  @@ -1251,7 +1428,7 @@
   </description>
   </component>
   
  -<component index="13.9.4" name="__intsum">
  +<component index="13.10.4" name="__intSum">
   <description><p>The intsum function can be used to compute the sum of two or more 
integer values.
   </p></description>
   
  @@ -1264,7 +1441,7 @@
   </properties>
   </component>
   
  -<component index="13.9.5" name="_StringFromFile">
  +<component index="13.10.5" name="_StringFromFile">
   <description>
        <p>
        The StringFromFile function can be used to read strings from a text file. 
  @@ -1286,13 +1463,78 @@
                (The path can be relative to the JMeter launch directory)
           </property>
           <property name="Second argument" required="No">
  -             A reference name - refName - for reusing the value created by this 
function.
  -                     Stored values are of the form ${refName}.
  +A reference name - refName - for reusing the value created by this function. Stored 
values are of the form ${refName}.
           </property>
   </properties>
   <p>The file name parameter is resolved when the file is opened or re-opened.</p>
   <p>The reference name parameter (if supplied) is resolved every time the function 
is executed.</p>
   </component>
  +
  +<component index="13.10.6" name="__machineName">
  +<description><p>The machineName function returns the local host 
name</p></description>
  +
  +<properties>
  +        <property name="Name of function" required="Yes">A reference name for 
reusing the value
  +                computed by this function.</property>
  +</properties>
  +</component>
  +
  +<component index="13.10.7" name="__javaScript">
  +<description><p>The javaScript function executes a piece of JavaScript (not Java!) 
code and returns its value</p>
  +     </description>
  +
  +<properties>
  +        <property name="Expression" required="Yes">The JavaScript expression to be 
executed. For example:
  +             <ul>
  +                     <li>new Date() - return the current date and time</li>
  +                     <li>Math.floor(Math.random()*(${maxRandom}+1))
  +                             - a random number between 0 and the variable 
maxRandom</li>
  +                     
<li>${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1))
  +                             - a random number between the variables minRandom and 
maxRandom</li>
  +             </ul>
  +             </property>
  +        <property name="Name of function" required="Yes">A reference name for 
reusing the value
  +                computed by this function.</property>
  +</properties>
  +</component>
  +
  +<component index="13.10.8" name="__Random">
  +<description><p>The random function returns a random number that lies between the 
given min and max values.</p></description>
  +
  +<properties>
  +        <property name="Minimum value" required="Yes">A number</property>
  +        <property name="Maximum value" required="Yes">A bigger number</property>
  +        <property name="Name of function" required="Yes">A reference name for 
reusing the value
  +                computed by this function.</property>
  +</properties>
  +</component>
  +
  +<component index="13.10.8" name="__CSVRead">
  +<description><p>The CSVFile function returns a string from a CSV file (c.f. <a 
href="#_StringFromFile">StringFromFile</a>)</p>
  +     <p>NOTE: A single instance of the file is opened and used for all 
threads.</p></description>
  +
  +<properties>
  +        <property name="File Name" required="Yes">The file to read from</property>
  +        <property name="Column number" required="Yes">
  +             The column number in the file.
  +             0 = first column, 1 = second etc.
  +             "next" - go to next line of file.
  +             </property>
  +</properties>
  +</component>
  +
  +<component index="13.10.9" name="__property">
  +<description><p>The property function returns the value of a JMeter property. 
  +     If the property value cannot be found, it returns the property name.</p>
  +     </description>
  +
  +<properties>
  +        <property name="Property Name" required="Yes">The property name to be 
retrieved.</property>
  +        <property name="Name of function" required="No">A reference name for 
reusing the value
  +                computed by this function.</property>
  +</properties>
  +</component>
  +
   </section>
   </body>
   </document>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to