Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Tab police - also remove trailing spaces in same files

git-svn-id: https://svn.apache.org/repos/asf/jmeter/trunk@1457581 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information...
commit de789373023ce864547dd213f95c528cd58709ad 1 parent 1dd14da
Sebastian Bazley authored
View
2  xdocs/usermanual/best-practices.xml
@@ -20,7 +20,7 @@
[
<!ENTITY sect-num '16'>
]>
-
+
<document prev="remote-test.html" next="boss.html" id="$Id$">
<properties>
View
166 xdocs/usermanual/boss.xml
@@ -19,7 +19,7 @@
<!DOCTYPE document[
<!ENTITY sect-num '17'>
]>
-
+
<document prev="best-practices.html" next="component_reference.html" id="$Id$">
<properties>
@@ -55,32 +55,32 @@ cannot locate these resources, <b>you</b> will become these resources. As you
already have your work cut out for you, it is worth knowing who the following
people are, so that you can ask them for help if you need it.
</p>
- <subsection name="&sect-num;.2.1 Network" anchor="network">
- <p>Who knows our network topology ? If you run into any firewall or
- proxy issues, this will become very important. As well, a private
- testing network (which will therefore have very low network latency)
- would be a very nice thing. Knowing who can set one up for you
- (if you feel that this is necessary) will be very useful. If the
- application doesn't scale as expected, who can add additional
- hardware ?
- </p>
- </subsection>
- <subsection name="&sect-num;.2.2 Application" anchor="application">
- <p>Who knows how our application functions ? The normal sequence is
- <ul>
- <li>test (low-volume - can we benchmark our application?)</li>
- <li>benchmark (the average number of users)</li>
- <li>load-test (the maximum number of users)</li>
- <li>test destructively (what is our hard limit?)</li>
- </ul>
- The <b>test</b> process may progress from black-box testing to
- white-box testing (the difference is that the first requires
- no knowledge of the application [it is treated as a "black box"]
- while the second requires some knowledge of the application).
- It is not uncommon to discover problems with the application
- during this process, so be prepared to defend your work.
- </p>
- </subsection>
+ <subsection name="&sect-num;.2.1 Network" anchor="network">
+ <p>Who knows our network topology ? If you run into any firewall or
+ proxy issues, this will become very important. As well, a private
+ testing network (which will therefore have very low network latency)
+ would be a very nice thing. Knowing who can set one up for you
+ (if you feel that this is necessary) will be very useful. If the
+ application doesn't scale as expected, who can add additional
+ hardware ?
+ </p>
+ </subsection>
+ <subsection name="&sect-num;.2.2 Application" anchor="application">
+ <p>Who knows how our application functions ? The normal sequence is
+ <ul>
+ <li>test (low-volume - can we benchmark our application?)</li>
+ <li>benchmark (the average number of users)</li>
+ <li>load-test (the maximum number of users)</li>
+ <li>test destructively (what is our hard limit?)</li>
+ </ul>
+ The <b>test</b> process may progress from black-box testing to
+ white-box testing (the difference is that the first requires
+ no knowledge of the application [it is treated as a "black box"]
+ while the second requires some knowledge of the application).
+ It is not uncommon to discover problems with the application
+ during this process, so be prepared to defend your work.
+ </p>
+ </subsection>
</subsection>
<subsection name="&sect-num;.3 What platform should I use to run the benchmarks/load-tests ?" anchor="platform">
<p>This should be a widely-used piece of hardware, with a standard
@@ -119,31 +119,31 @@ become familiar with them. This should include trying them out, and reading the
appropriate documentation (man-pages, info-files, application --help messages,
and any supplied documentation).
</p>
- <subsection name="&sect-num;.4.1 ping" anchor="ping">
- <p>
- This can be used to establish whether or not you can reach your
- target site. Options can be specified so that 'ping' provides the
- same type of route reporting as 'traceroute'.
- </p>
- </subsection>
- <subsection name="&sect-num;.4.2 nslookup/dig" anchor="dig">
- <p>
- While the <u>user</u> will normally use a human-readable internet
- address, <u>you</u> may wish to avoid the overhead of DNS lookups when
- performing benchmarking/load-testing. These can be used to determine
- the unique address (dotted quad) of your target site.
- </p>
- </subsection>
- <subsection name="&sect-num;.4.3 traceroute" anchor="traceroute">
- <p>
- If you cannot "ping" your target site, this may be used to determine
- the problem (possibly a firewall or a proxy). It can also be used
- to estimate the overall network latency (running locally should give
- the lowest possible network latency - remember that your users will
- be running over a possibly busy internet). Generally, the fewer hops
- the better.
- </p>
- </subsection>
+ <subsection name="&sect-num;.4.1 ping" anchor="ping">
+ <p>
+ This can be used to establish whether or not you can reach your
+ target site. Options can be specified so that 'ping' provides the
+ same type of route reporting as 'traceroute'.
+ </p>
+ </subsection>
+ <subsection name="&sect-num;.4.2 nslookup/dig" anchor="dig">
+ <p>
+ While the <u>user</u> will normally use a human-readable internet
+ address, <u>you</u> may wish to avoid the overhead of DNS lookups when
+ performing benchmarking/load-testing. These can be used to determine
+ the unique address (dotted quad) of your target site.
+ </p>
+ </subsection>
+ <subsection name="&sect-num;.4.3 traceroute" anchor="traceroute">
+ <p>
+ If you cannot "ping" your target site, this may be used to determine
+ the problem (possibly a firewall or a proxy). It can also be used
+ to estimate the overall network latency (running locally should give
+ the lowest possible network latency - remember that your users will
+ be running over a possibly busy internet). Generally, the fewer hops
+ the better.
+ </p>
+ </subsection>
</subsection>
<subsection name="&sect-num;.5 What other products are there ?" anchor="products">
<p>There are a number of commercial products, which generally have fairly
@@ -153,37 +153,37 @@ limited budget, the following are worth a look. In fact, you should probably
start by trying the Apache <b>ab</b> tool, as it may very well do the job
if your requirements are not particularly complicated.
</p>
- <subsection name="&sect-num;.5.1 Apache 'ab' tool" anchor="ab">
- <p>
- You should definitely start with this one. It handles HTTP 'get' requests
- very well, and can be made to handle HTTP 'post' requests with a little
- effort. Written in 'C', it performs very well, and offers good (if basic)
- performance reporting.
- </p>
- </subsection>
- <subsection name="&sect-num;.5.2 HttpUnit" anchor="httpunit">
- <p>
- This is worth a look. It is a library (and therefore of more interest to
- developers) that can be used to perform HTTP tests/benchmarks. It is
- intended to be used instead of a web browser (therefore no GUI) in
- conjunction with <b>JUnit</b>.
- </p>
- </subsection>
- <subsection name="&sect-num;.5.3 Microsoft WAS" anchor="WAS">
- <p>
- This is definitely worth a look. It has an excellent user interface
- but it may not do exactly what you want. If this is the case, be aware
- that the functionality of this product is not likely to change.
- </p>
- </subsection>
- <subsection name="&sect-num;.5.4 JMeter" anchor="JMeter">
- <p>
- If you have non-standard requirements, then this solution offers an
- open-source community to provide them (of course, if you are reading
- <u>this</u>, you are probably already committed to this one). This
- product is free to evolve along with your requirements.
- </p>
- </subsection>
+ <subsection name="&sect-num;.5.1 Apache 'ab' tool" anchor="ab">
+ <p>
+ You should definitely start with this one. It handles HTTP 'get' requests
+ very well, and can be made to handle HTTP 'post' requests with a little
+ effort. Written in 'C', it performs very well, and offers good (if basic)
+ performance reporting.
+ </p>
+ </subsection>
+ <subsection name="&sect-num;.5.2 HttpUnit" anchor="httpunit">
+ <p>
+ This is worth a look. It is a library (and therefore of more interest to
+ developers) that can be used to perform HTTP tests/benchmarks. It is
+ intended to be used instead of a web browser (therefore no GUI) in
+ conjunction with <b>JUnit</b>.
+ </p>
+ </subsection>
+ <subsection name="&sect-num;.5.3 Microsoft WAS" anchor="WAS">
+ <p>
+ This is definitely worth a look. It has an excellent user interface
+ but it may not do exactly what you want. If this is the case, be aware
+ that the functionality of this product is not likely to change.
+ </p>
+ </subsection>
+ <subsection name="&sect-num;.5.4 JMeter" anchor="JMeter">
+ <p>
+ If you have non-standard requirements, then this solution offers an
+ open-source community to provide them (of course, if you are reading
+ <u>this</u>, you are probably already committed to this one). This
+ product is free to evolve along with your requirements.
+ </p>
+ </subsection>
</subsection>
<subsection name="&sect-num;.6 Why Java ?" anchor="java">
<p>Why not Perl or C ?
View
84 xdocs/usermanual/build-ldap-test-plan.xml
@@ -30,7 +30,7 @@
<body>
<section name="&sect-num;. Building an LDAP Test Plan" anchor="building">
- <p>In this section, you will learn how to create a basic Test Plan to test an LDAP server.
+ <p>In this section, you will learn how to create a basic Test Plan to test an LDAP server.
You will create four users that send requests for four tests on the LDAP server.Also, you will tell
the users to run their tests twice. So, the total number of requests is (4 users) x (4 requests) x
repeat 2 times) = 32 LDAP requests. To construct the Test Plan, you will use the following elements:
@@ -39,10 +39,10 @@ repeat 2 times) = 32 LDAP requests. To construct the Test Plan, you will use the
<complink name="LDAP Request Defaults"/>, and
<complink name="View Results in Table"/>
.</p>
- <p>This example assumes that the LDAP Server is installed in your Local machine.</p>
+ <p>This example assumes that the LDAP Server is installed in your Local machine.</p>
</section>
- <section name="&sect-num;.1 Adding Users" anchor="adding_users">
- <p>The first step you want to do with every JMeter Test Plan is to add a Thread Group element.
+ <section name="&sect-num;.1 Adding Users" anchor="adding_users">
+ <p>The first step you want to do with every JMeter Test Plan is to add a Thread Group element.
The Thread Group tells JMeter the number of users you want to simulate, how often the users should send
requests, and the how many requests they should send.</p>
<p>Go ahead and add the ThreadGroup element by first selecting the Test Plan, clicking your
@@ -54,56 +54,56 @@ Figure &sect-num;.1. Thread Group with Default Values</figure>
</p>
</section>
- <section name="&sect-num;.2 Adding Login Config Element" anchor="add_login">
- <p>Begin by selecting the Siptech Users element. Click your right mouse
+ <section name="&sect-num;.2 Adding Login Config Element" anchor="add_login">
+ <p>Begin by selecting the Siptech Users element. Click your right mouse
button to get the Add menu, and then select Add --> Config Element --> Login Config Element.
Then, select this new element to view its Control Panel.</p>
- <p>Like most JMeter elements, the Login Config Element Control Panel has a name
+ <p>Like most JMeter elements, the Login Config Element Control Panel has a name
field that you can modify. In this example, leave this field with the default value.</p>
<figure image="ldaptest/login-config-element.png">
Figure &sect-num;.2 Login Config Element for our Test Plan</figure>
- <note><p>Enter Username field to "your Server Username",<br/>
- The password field to "your Server Passowrd"</p>
+ <note><p>Enter Username field to "your Server Username",<br/>
+ The password field to "your Server Passowrd"</p>
- <p>These values are default for the LDAP Requests.</p></note>
+ <p>These values are default for the LDAP Requests.</p></note>
</section>
- <section name="&sect-num;.3 Adding LDAP Request Defaults" anchor="add_defaults">
+ <section name="&sect-num;.3 Adding LDAP Request Defaults" anchor="add_defaults">
<p>Begin by selecting the Siptech Users element. Click your right mouse button
to get the Add menu, and then select Add --> Config Element -->LDAP Request Defaults. Then,
select this new element to view its Control Panel.</p>
- <p>Like most JMeter elements, the LDAP Request Defaults Control Panel has a name
+ <p>Like most JMeter elements, the LDAP Request Defaults Control Panel has a name
field that you can modify. In this example, leave this field with the default value.</p>
<figure image="ldaptest/requestdefaults.png">
Figure &sect-num;.3 LDAP Defaults for our Test Plan</figure>
- <note>Enter DN field to "your Server Root Dn".<br/>
+ <note>Enter DN field to "your Server Root Dn".<br/>
Enter LDAP Server's Servername field to "localhost".<br/>
- The port to 389.<br/>
- These values are default for the LDAP Requests.</note>
+ The port to 389.<br/>
+ These values are default for the LDAP Requests.</note>
</section>
- <section name="&sect-num;.4 Adding LDAP Requests" anchor="add_requests">
+ <section name="&sect-num;.4 Adding LDAP Requests" anchor="add_requests">
<p>In our Test Plan, we need to make four LDAP requests.</p>
<ol>
- <li>Inbuilt Add Test</li>
- <li>Inbuilt Modify Test</li>
- <li>Inbuilt Delete Test</li>
- <li>Inbuilt Search Test</li>
- </ol>
- <p>JMeter sends requests in the order that you add them to the tree.
+ <li>Inbuilt Add Test</li>
+ <li>Inbuilt Modify Test</li>
+ <li>Inbuilt Delete Test</li>
+ <li>Inbuilt Search Test</li>
+ </ol>
+ <p>JMeter sends requests in the order that you add them to the tree.
Start by adding the first LDAP Request to the Siptech Users element (Add -->
Sampler --> LDAP Request). Then, select the LDAP Request element in the tree
and edit the following properties</p>
- <ol>
- <li>Change the Name to "Inbuilt-Add Test".</li>
- <li>Select the Add test Radio button</li>
- </ol>
+ <ol>
+ <li>Change the Name to "Inbuilt-Add Test".</li>
+ <li>Select the Add test Radio button</li>
+ </ol>
<figure image="ldaptest/add.png">
Figure &sect-num;.4.1 LDAP Request for Inbuilt Add test</figure>
@@ -111,35 +111,35 @@ and edit the following properties</p>
<p>You do not have to set the Server Name field, port field, Username, Password
and DN because you already specified this value in the Login Config Element and
LDAP Request Defaults.</p>
- <p>Next, add the second LDAP Request and edit the following
+ <p>Next, add the second LDAP Request and edit the following
properties</p>
- <ol>
- <li>Change the Name to "Inbuilt-Modify Test".</li>
- <li>Select the Modify test Radio button</li>
- </ol>
- Next, add the Third LDAP Request and edit the following properties
+ <ol>
+ <li>Change the Name to "Inbuilt-Modify Test".</li>
+ <li>Select the Modify test Radio button</li>
+ </ol>
+ Next, add the Third LDAP Request and edit the following properties
<figure image="ldaptest/modify.png">
Figure &sect-num;.4.2 LDAP Request for Inbuilt Modify test</figure>
- <ol>
- <li>Change the Name to "Inbuilt-Delete Test".</li>
- <li>Select the Delete test Radio button</li>
- </ol>
- Next, add the fourth LDAP Request and edit the following properties
+ <ol>
+ <li>Change the Name to "Inbuilt-Delete Test".</li>
+ <li>Select the Delete test Radio button</li>
+ </ol>
+ Next, add the fourth LDAP Request and edit the following properties
<figure image="ldaptest/delete.png">
Figure &sect-num;.4.3 LDAP Request for Inbuilt Delete test</figure>
<ol>
- <li>Change the Name to "Inbuilt-Search Test".</li>
- <li>Select the Search test Radio button</li>
- </ol>
+ <li>Change the Name to "Inbuilt-Search Test".</li>
+ <li>Select the Search test Radio button</li>
+ </ol>
<figure image="ldaptest/search.png">
Figure &sect-num;.4.4 LDAP Request for Inbuilt Search test</figure>
</section>
- <section name="&sect-num;.5 Adding a Listener to View/Store the Test Results" anchor="add_listener">
- <p>The final element you need to add to your Test Plan is a Listener.
+ <section name="&sect-num;.5 Adding a Listener to View/Store the Test Results" anchor="add_listener">
+ <p>The final element you need to add to your Test Plan is a Listener.
This element is responsible for storing all of the results of your LDAP
requests in a file and presenting a visual model of the data.Select the Siptech
Users element and add a View Results in Table (Add --> Listener -->View Results in Table)</p>
View
44 xdocs/usermanual/build-ldapext-test-plan.xml
@@ -6,9 +6,9 @@
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.
@@ -30,14 +30,14 @@
<body>
<section name="&sect-num;. Building an Extended LDAP Test Plan" anchor="ldapexttest">
<p>
-In this section, you will learn how to create a basic Test Plan to test an LDAP
+In this section, you will learn how to create a basic Test Plan to test an LDAP
server.</p>
<p>
-As the Extended LDAP Sampler is highly configurable, this also means that it takes
-some time to build a correct testplan. You can however tune it exactly up to your
+As the Extended LDAP Sampler is highly configurable, this also means that it takes
+some time to build a correct testplan. You can however tune it exactly up to your
needs.
</p>
-
+
<p>
You will create four users that send requests for four tests on the LDAP server.Also, you will tell
the users to run their tests twice. So, the total number of requests is (4 users) x (4 requests) x
@@ -51,14 +51,14 @@ repeat 2 times) = 32 LDAP requests. To construct the Test Plan, you will use the
This example assumes that the LDAP Server is installed in your Local machine.
</p>
<p>
-For the less experienced LDAP users, I build a <a href="ldapops_tutor.html">small
-LDAP tutorial</a> which shortly explains
+For the less experienced LDAP users, I build a <a href="ldapops_tutor.html">small
+LDAP tutorial</a> which shortly explains
the several LDAP operations that can be used in building a complex testplan.
</p>
<p>
-Take care when using LDAP special characters in the distinghuished name, in that case (eg, you want to use a + sign in a
+Take care when using LDAP special characters in the distinghuished name, in that case (eg, you want to use a + sign in a
distinghuished name) you need to escape the character by adding an "\" sign before that character.
-extra exeption: if you want to add a \ character in a distinguished name (in an add or rename operation), you need to use 4 backslashes.
+extra exeption: if you want to add a \ character in a distinguished name (in an add or rename operation), you need to use 4 backslashes.
examples:
cn=dolf\+smits to add/search an entry with the name like cn=dolf+smits
cn=dolf \\ smits to search an entry with the name cn=dolf \ smits
@@ -66,7 +66,7 @@ cn=c:\\\\log.txt to add an entry with a name like cn=c:\log.txt
</p>
- <subsection name="&sect-num;.1 Adding Users" anchor="ext_adding_users">
+ <subsection name="&sect-num;.1 Adding Users" anchor="ext_adding_users">
<p>
The first step you want to do with every JMeter Test Plan is to add a Thread Group element.
The Thread Group tells JMeter the number of users you want to simulate, how often the users should send
@@ -84,7 +84,7 @@ Figure &sect-num;.1. Thread Group with Default Values</figure>
</p>
</subsection>
- <subsection name="&sect-num;.2 Adding LDAP Extended Request Defaults" anchor="add_ldapext_defaults">
+ <subsection name="&sect-num;.2 Adding LDAP Extended Request Defaults" anchor="add_ldapext_defaults">
<p>
Begin by selecting the Thread Group element. Click your right mouse button
to get the Add menu, and then select Add --> Config Element -->LDAP Extended Request Defaults. Then,
@@ -94,16 +94,16 @@ select this new element to view its Control Panel.
Like most JMeter elements, the LDAP Extended Request Defaults Control Panel has a name
field that you can modify. In this example, leave this field with the default value.
</p>
-<p><figure image="ldaptest/extrequestdefaults.png"><br/>
+<p><figure image="ldaptest/extrequestdefaults.png"><br/>
Figure &sect-num;.2 LDAP Defaults for our Test Plan</figure>
</p>
<p>
- For each of the different operations, some default values can be filled in.
- In All cases, when a default is filled in, this is used for the LDAP extended requests.
- For each requst, you can override the defaults by filling in the values in the LDAP extended request sampler.
- When no valueis entered which is necesarry for a test, the test will fail in an unpredictable way!
- </p>
- We will not enter any default values here, as we will build a very small testplan, so we will explain all the different fields when we add the LDAP Extended samplers.
+ For each of the different operations, some default values can be filled in.
+ In All cases, when a default is filled in, this is used for the LDAP extended requests.
+ For each requst, you can override the defaults by filling in the values in the LDAP extended request sampler.
+ When no valueis entered which is necesarry for a test, the test will fail in an unpredictable way!
+ </p>
+ We will not enter any default values here, as we will build a very small testplan, so we will explain all the different fields when we add the LDAP Extended samplers.
</subsection>
<subsection name="&sect-num;.3 Adding LDAP Requests" anchor="add_extrequests">
<p>
@@ -178,7 +178,7 @@ When this field is kept empty, an anonymous bind will be established.
<p>
<figure image="ldaptest/extthreadbind.png">
Figure &sect-num;.3.1. Thread Bind example</figure>
-</p>
+</p>
</subsection>
<subsection name="&sect-num;.3.2 Adding a search Request" anchor="add_searchreq">
@@ -205,7 +205,7 @@ Enter the searchfilter, any decent LDAP serach filter will do, but for now, use
</li></ol>
</li>
<li>
-(Optional) Sizelimit, specifies the maximun number of returned entries,
+(Optional) Sizelimit, specifies the maximun number of returned entries,
</li>
<li>
(optional) Timelimit, psecifies the maximum number of miliseconds, the SERVER can use for performing the search. it is NOT the maximun time the application will wait!<br/>
@@ -420,7 +420,7 @@ The request gives a short description of the request that was made, in practice
is contained here.
</li>
<li>
-The response data contains the full details of the sent request, as well the full details of the received answer,
+The response data contains the full details of the sent request, as well the full details of the received answer,
this is given in a (self defined) xml-style.
<a href="ldapanswer_xml.html">The full description can be found here.</a>
</li>
View
1,228 xdocs/usermanual/component_reference.xml
614 additions, 614 deletions not shown
View
432 xdocs/usermanual/functions.xml
@@ -30,12 +30,12 @@
<body>
<!--
- Because this is an XML document, all tags must be properly closed, including ones
- which are passed unchanged into the HTML output, e.g. <br/>, not just <br>.
-
- Unfortunately Java does not currently allow for this - it outputs the trailing > -
- which messes up the Help display.
- To avoid these artefacts, use the form <br></br>, which Java does seem to handle OK.
+ Because this is an XML document, all tags must be properly closed, including ones
+ which are passed unchanged into the HTML output, e.g. <br/>, not just <br>.
+
+ Unfortunately Java does not currently allow for this - it outputs the trailing > -
+ which messes up the Help display.
+ To avoid these artefacts, use the form <br></br>, which Java does seem to handle OK.
-->
@@ -398,39 +398,39 @@ The reference name is now optional, but it must not be a valid integer.
<component index="&sect-num;.5.5" name="__StringFromFile">
<description>
- <p>
- The StringFromFile function can be used to read strings from a text file.
- This is useful for running tests that require lots of variable data.
- For example when testing a banking application, 100s or 1000s of different account numbers might be required.
- </p>
- <p>
- See also the
- <a href="component_reference.html#CSV_Data_Set_Config">CSV Data Set Config test element</a>
- which may be easier to use. However, that does not currently support multiple input files.
- </p>
-
- <p>
- Each time it is called it reads the next line from the file.
+ <p>
+ The StringFromFile function can be used to read strings from a text file.
+ This is useful for running tests that require lots of variable data.
+ For example when testing a banking application, 100s or 1000s of different account numbers might be required.
+ </p>
+ <p>
+ See also the
+ <a href="component_reference.html#CSV_Data_Set_Config">CSV Data Set Config test element</a>
+ which may be easier to use. However, that does not currently support multiple input files.
+ </p>
+
+ <p>
+ Each time it is called it reads the next line from the file.
All threads share the same instance, so different threads will get different lines.
- When the end of the file is reached, it will start reading again from the beginning,
- unless the maximum loop count has been reached.
- If there are multiple references to the function in a test script, each will open the file independently,
- even if the file names are the same.
- [If the value is to be used again elsewhere, use different variable names for each function call.]
- </p>
+ When the end of the file is reached, it will start reading again from the beginning,
+ unless the maximum loop count has been reached.
+ If there are multiple references to the function in a test script, each will open the file independently,
+ even if the file names are the same.
+ [If the value is to be used again elsewhere, use different variable names for each function call.]
+ </p>
<note>
Function instances are shared between threads, and the file is (re-)opened by whatever thread
happens to need the next line of input, so using the threadNumber as part of the file name
will result in unpredictable behaviour.
</note>
- <p>If an error occurs opening or reading the file, then the function returns the string "**ERR**"</p>
+ <p>If an error occurs opening or reading the file, then the function returns the string "**ERR**"</p>
</description>
<properties>
<property name="File Name" required="Yes">Path to the file name.
- (The path can be relative to the JMeter launch directory)
- If using optional sequence numbers, the path name should be suitable for passing to DecimalFormat.
- See below for examples.
+ (The path can be relative to the JMeter launch directory)
+ If using optional sequence numbers, the path name should be suitable for passing to DecimalFormat.
+ See below for examples.
</property>
<property name="Variable Name" required="No">
A reference name - refName - for reusing the value created by this function. Stored values are of the form ${refName}.
@@ -443,11 +443,11 @@ Defaults to "StringFromFile_".
<p>The reference name parameter (if supplied) is resolved every time the function is executed.</p>
<p><b>Using sequence numbers:</b></p>
<p>When using the optional sequence numbers, the path name is used as the format string for java.text.DecimalFormat.
- The current sequence number is passed in as the only parameter.
+ The current sequence number is passed in as the only parameter.
If the optional start number is not specified, the path name is used as is.
- Useful formatting sequences are:
- </p>
- <p>
+ Useful formatting sequences are:
+ </p>
+ <p>
<code>
# - insert the number, with no leading zeros or spaces<br></br>
000 - insert the number packed out to 3 digits with leading zeros if necessary
@@ -457,30 +457,30 @@ Examples:<br></br>
pin000'.'dat -> pin001.dat ... pin099.dat ... pin999.dat ... pin9999.dat<br></br>
pin'.'dat# -> pin.dat1, ... pin.dat9 ... pin.dat999
</code><p/>
- If more digits are required than there are formatting characters, the number will be
- expanded as necessary.<br></br>
- <b>To prevent a formatting character from being interpreted,
- enclose it in single quotes. Note that "." is a formatting character,
- and must be enclosed in single quotes</b>
- (though #. and 000. work as expected in locales where the decimal point is also ".")
- <br></br>
- In other locales (e.g. fr), the decimal point is "," - which means that "#."
- becomes "nnn,".<br></br>
- See the documentation for DecimalFormat for full details.<br></br>
- If the path name does not contain any special formatting characters,
- the current sequence number will be appended to the name, otherwise
- the number will be inserted aaccording to the fomatting instructions.<br></br>
- If the start sequence number is omitted, and the end sequence number is specified,
- the sequence number is interpreted as a loop count, and the file will be used at most "end" times.
- In this case the filename is not formatted.
- <code>
- <br></br>
- ${_StringFromFile(PIN#'.'DAT,,1,2)} - reads PIN1.DAT, PIN2.DAT<br></br>
- ${_StringFromFile(PIN.DAT,,,2)} - reads PIN.DAT twice<br></br>
- </code>
- Note that the "." in PIN.DAT above should <u>not</u> be quoted.
- In this case the start number is omitted, so the file name is used exactly as is.
- </p>
+ If more digits are required than there are formatting characters, the number will be
+ expanded as necessary.<br></br>
+ <b>To prevent a formatting character from being interpreted,
+ enclose it in single quotes. Note that "." is a formatting character,
+ and must be enclosed in single quotes</b>
+ (though #. and 000. work as expected in locales where the decimal point is also ".")
+ <br></br>
+ In other locales (e.g. fr), the decimal point is "," - which means that "#."
+ becomes "nnn,".<br></br>
+ See the documentation for DecimalFormat for full details.<br></br>
+ If the path name does not contain any special formatting characters,
+ the current sequence number will be appended to the name, otherwise
+ the number will be inserted aaccording to the fomatting instructions.<br></br>
+ If the start sequence number is omitted, and the end sequence number is specified,
+ the sequence number is interpreted as a loop count, and the file will be used at most "end" times.
+ In this case the filename is not formatted.
+ <code>
+ <br></br>
+ ${_StringFromFile(PIN#'.'DAT,,1,2)} - reads PIN1.DAT, PIN2.DAT<br></br>
+ ${_StringFromFile(PIN.DAT,,,2)} - reads PIN.DAT twice<br></br>
+ </code>
+ Note that the "." in PIN.DAT above should <u>not</u> be quoted.
+ In this case the start number is omitted, so the file name is used exactly as is.
+ </p>
</component>
<component index="&sect-num;.5.6a" name="__machineName">
@@ -537,15 +537,15 @@ JMeter is not a browser, and does not interpret the JavaScript in downloaded pag
<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>
- <li>"${VAR}"=="abcd"</li>
- </ul>
- </property>
+ <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>
+ <li>"${VAR}"=="abcd"</li>
+ </ul>
+ </property>
<property name="Variable Name" required="No">A reference name for reusing the value
computed by this function.</property>
</properties>
@@ -589,47 +589,47 @@ the comma after 7 is escaped.</note>
<component index="&sect-num;.5.8" name="__CSVRead">
<description><p>The CSVRead function returns a string from a CSV file (c.f. <a href="#_StringFromFile">StringFromFile</a>)</p>
- <p>NOTE: versions up to 1.9.1 only supported a single file.
- JMeter versions since 1.9.1 support multiple file names.
- </p>
- <p><b>In most cases, the newer
- <a href="component_reference.html#CSV_Data_Set_Config">CSV Data Set Config element</a>
- is easier to use.</b></p>
- <p>
- When a filename is first encountered, the file is opened and read into an internal
- array. If a blank line is detected, this is treated as end of file - this allows
- trailing comments to be used (N.B. this feature was introduced in versions after 1.9.1)
- </p>
- <p>All subsequent references to the same file name use the same internal array.
- N.B. the filename case is significant to the function, even if the OS doesn't care,
- so CSVRead(abc.txt,0) and CSVRead(aBc.txt,0) would refer to different internal arrays.
- </p>
- <p>
- The *ALIAS feature allows the same file to be opened more than once,
- and also allows for shorter file names.
- </p>
- <p>
- Each thread has its own internal pointer to its current row in the file array.
- When a thread first refers to the file it will be allocated the next free row in
- the array, so each thread will access a different row from all other threads.
- [Unless there are more threads than there are rows in the array.]
- </p>
- <p>
- Note: the function splits the line at every comma by default.
- If you want to enter columns containing commas, then you will need
- to change the delimiter to a character that does not appear in any
- column data, by setting the property: csvread.delimiter
- </p>
+ <p>NOTE: versions up to 1.9.1 only supported a single file.
+ JMeter versions since 1.9.1 support multiple file names.
+ </p>
+ <p><b>In most cases, the newer
+ <a href="component_reference.html#CSV_Data_Set_Config">CSV Data Set Config element</a>
+ is easier to use.</b></p>
+ <p>
+ When a filename is first encountered, the file is opened and read into an internal
+ array. If a blank line is detected, this is treated as end of file - this allows
+ trailing comments to be used (N.B. this feature was introduced in versions after 1.9.1)
+ </p>
+ <p>All subsequent references to the same file name use the same internal array.
+ N.B. the filename case is significant to the function, even if the OS doesn't care,
+ so CSVRead(abc.txt,0) and CSVRead(aBc.txt,0) would refer to different internal arrays.
+ </p>
+ <p>
+ The *ALIAS feature allows the same file to be opened more than once,
+ and also allows for shorter file names.
+ </p>
+ <p>
+ Each thread has its own internal pointer to its current row in the file array.
+ When a thread first refers to the file it will be allocated the next free row in
+ the array, so each thread will access a different row from all other threads.
+ [Unless there are more threads than there are rows in the array.]
+ </p>
+ <p>
+ Note: the function splits the line at every comma by default.
+ If you want to enter columns containing commas, then you will need
+ to change the delimiter to a character that does not appear in any
+ column data, by setting the property: csvread.delimiter
+ </p>
</description>
<properties>
<property name="File Name" required="Yes">The file (or *ALIAS) 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.
- *ALIAS - open a file and assign it to the alias
- </property>
+ The column number in the file.
+ 0 = first column, 1 = second etc.
+ "next" - go to next line of file.
+ *ALIAS - open a file and assign it to the alias
+ </property>
</properties>
<p>For example, you could set up some variables as follows:
<ul>
@@ -651,17 +651,17 @@ or <a href="#__StringFromFile">StringFromFile</a>.
<component index="&sect-num;.5.9" name="__property">
<description><p>The property function returns the value of a JMeter property.
- If the property value cannot be found, and no default has been supplied, it returns the property name.
- When supplying a default value, there is no need to provide a function name - the parameter can be set to null, and it will be ignored.
- </p>For example:<p>
- <ul>
+ If the property value cannot be found, and no default has been supplied, it returns the property name.
+ When supplying a default value, there is no need to provide a function name - the parameter can be set to null, and it will be ignored.
+ </p>For example:<p>
+ <ul>
<li>${__property(user.dir)} - return value of user.dir</li>
<li>${__property(user.dir,UDIR)} - return value of user.dir and save in UDIR</li>
<li>${__property(abcd,ABCD,atod)} - return value of property abcd (or "atod" if not defined) and save in ABCD</li>
<li>${__property(abcd,,atod)} - return value of property abcd (or "atod" if not defined) but don't save it</li>
</ul>
</p>
- </description>
+ </description>
<properties>
<property name="Property Name" required="Yes">The property name to be retrieved.</property>
@@ -673,12 +673,12 @@ or <a href="#__StringFromFile">StringFromFile</a>.
<component index="&sect-num;.5.10" name="__P">
<description><p>This is a simplified property function which is
- intended for use with properties defined on the command line.
- Unlike the __property function, there is no option to save the value in a variable,
- and if no default value is supplied, it is assumed to be 1.
- The value of 1 was chosen because it is valid for common test variables such
- as loops, thread count, ramp up etc.
- </p>For example:<p>
+ intended for use with properties defined on the command line.
+ Unlike the __property function, there is no option to save the value in a variable,
+ and if no default value is supplied, it is assumed to be 1.
+ The value of 1 was chosen because it is valid for common test variables such
+ as loops, thread count, ramp up etc.
+ </p>For example:<p>
<code>
Define the property value:
<br></br>
@@ -698,20 +698,20 @@ In the examples above, the first function call would return 7,
the second would return 1 and the last would return www.dummy.org
(unless those properties were defined elsewhere!)
</p>
- </description>
+ </description>
<properties>
<property name="Property Name" required="Yes">The property name to be retrieved.</property>
<property name="Default Value" required="No">The default value for the property.
- If omitted, the default is set to "1".</property>
+ If omitted, the default is set to "1".</property>
</properties>
</component>
<component index="&sect-num;.5.11" name="__log">
<description>
- <p>
- The log function logs a message, and returns its input string
- </p>
+ <p>
+ The log function logs a message, and returns its input string
+ </p>
</description>
<properties>
@@ -722,7 +722,7 @@ the second would return 1 and the last would return www.dummy.org
Useful for identifying what is being logged.</property>
</properties>
<p>The OUT and ERR log level names are used to direct the output to System.out and System.err respectively.
- In this case, the output is always printed - it does not depend on the current log setting.
+ In this case, the output is always printed - it does not depend on the current log setting.
</p>
<pre>
For example:
@@ -734,9 +734,9 @@ For example:
<component index="&sect-num;.5.12" name="__logn">
<description>
- <p>
- The logn function logs a message, and returns the empty string
- </p>
+ <p>
+ The logn function logs a message, and returns the empty string
+ </p>
</description>
<properties>
@@ -745,7 +745,7 @@ For example:
<property name="Throwable text" required="No">If non-empty, creates a Throwable to pass to the logger</property>
</properties>
<p>The OUT and ERR log level names are used to direct the output to System.out and System.err respectively.
- In this case, the output is always printed - it does not depend on the current log setting.
+ In this case, the output is always printed - it does not depend on the current log setting.
</p>
<pre>
For example:
@@ -755,8 +755,8 @@ For example:
<component index="&sect-num;.5.13" name="__BeanShell">
<description>
- <p>
- The BeanShell function evaluates the script passed to it, and returns the result.
+ <p>
+ The BeanShell function evaluates the script passed to it, and returns the result.
</p>
<p>
<b>For full details on using BeanShell, please see the BeanShell web-site at <a href="http://www.beanshell.org/">http://www.beanshell.org/</a>
@@ -812,37 +812,37 @@ Remember to include any necessary quotes for text strings and JMeter variables t
<component index="&sect-num;.5.14" name="__split">
<description>
- <p>
- The split function splits the string passed to it according to the delimiter,
+ <p>
+ The split function splits the string passed to it according to the delimiter,
and returns the original string. If any delimiters are adjacent, "?" is returned as the value.
The split strings are returned in the variables ${VAR_1}, ${VAR_2} etc.
The count of variables is returned in ${VAR_n}.
From JMeter 2.1.2 onwards, a trailing delimiter is treated as a missing variable, and "?" is returned.
Also, to allow it to work better with the ForEach controller,
__split now deletes the first unused variable in case it was set by a previous split.
- </p>
- <p/>
- Example:
- <code>
- <br></br>
- Define VAR="a||c|" in the test plan.
- <br></br>
- ${__split(${VAR},VAR,|)}
- <br></br>
- This will return the contents of VAR, i.e. "a||c|" and set the following variables:
- <br></br>
+ </p>
+ <p/>
+ Example:
+ <code>
+ <br></br>
+ Define VAR="a||c|" in the test plan.
+ <br></br>
+ ${__split(${VAR},VAR,|)}
+ <br></br>
+ This will return the contents of VAR, i.e. "a||c|" and set the following variables:
+ <br></br>
VAR_n=4 (3 in JMeter 2.1.1 and earlier)
- <br></br>
+ <br></br>
VAR_1=a
- <br></br>
+ <br></br>
VAR_2=?
- <br></br>
+ <br></br>
VAR_3=c
- <br></br>
+ <br></br>
VAR_4=? (null in JMeter 2.1.1 and earlier)
- <br></br>
+ <br></br>
VAR_5=null (in JMeter 2.1.2 and later)
- </code>
+ </code>
</description>
<properties>
@@ -857,24 +857,24 @@ If omitted, <b>,</b> is used. Note that <b>,</b> would need to be specified as <
</component>
<component index="&sect-num;.5.15" name="__XPath">
<description>
- <p>
- The XPath function reads an XML file and matches the XPath.
- Each time the function is called, the next match will be returned.
- At end of file, it will wrap around to the start.
- If no nodes matched, then the function will return the empty string,
- and a warning message will be written to the JMeter log file.
- <note>Note that the entire NodeList is held in memory.</note>
- </p>
- <p/>
- Example:
- <code>
- <br></br>
-
- <br></br>
- ${__XPath(/path/to/build.xml, //target/@name)}
- <br></br>
- This will match all targets in build.xml and return the contents of the next name attribute
- </code>
+ <p>
+ The XPath function reads an XML file and matches the XPath.
+ Each time the function is called, the next match will be returned.
+ At end of file, it will wrap around to the start.
+ If no nodes matched, then the function will return the empty string,
+ and a warning message will be written to the JMeter log file.
+ <note>Note that the entire NodeList is held in memory.</note>
+ </p>
+ <p/>
+ Example:
+ <code>
+ <br></br>
+
+ <br></br>
+ ${__XPath(/path/to/build.xml, //target/@name)}
+ <br></br>
+ This will match all targets in build.xml and return the contents of the next name attribute
+ </code>
</description>
<properties>
@@ -885,13 +885,13 @@ If omitted, <b>,</b> is used. Note that <b>,</b> would need to be specified as <
<component index="&sect-num;.5.16" name="__setProperty">
<description>
- <p>The setProperty function sets the value of a JMeter property.
- The default return value from the function is the empty string,
- so the function call can be used anywhere functions are valid.</p>
+ <p>The setProperty function sets the value of a JMeter property.
+ The default return value from the function is the empty string,
+ so the function call can be used anywhere functions are valid.</p>
<p>The original value can be returned by setting the optional 3rd parameter to "true".</p>
- <p>Properties are global to JMeter,
- so can be used to communicate between threads and thread groups</p>
- </description>
+ <p>Properties are global to JMeter,
+ so can be used to communicate between threads and thread groups</p>
+ </description>
<properties>
<property name="Property Name" required="Yes">The property name to be set.</property>
@@ -903,8 +903,8 @@ If omitted, <b>,</b> is used. Note that <b>,</b> would need to be specified as <
<component index="&sect-num;.5.17" name="__time">
<description>
- <p>The time function returns the current time in various formats.</p>
- </description>
+ <p>The time function returns the current time in various formats.</p>
+ </description>
<properties>
<property name="Format" required="No">
@@ -935,16 +935,16 @@ time.YMD=yyMMdd
<component index="&sect-num;.5.18" name="__jexl" tag="__jexl2">
<description>
- <p>The jexl function returns the result of evaluating a
- <a href="http://commons.apache.org/jexl">Commons JEXL expression</a>.
- See links below for more information on JEXL expressions.
- </p>
+ <p>The jexl function returns the result of evaluating a
+ <a href="http://commons.apache.org/jexl">Commons JEXL expression</a>.
+ See links below for more information on JEXL expressions.
+ </p>
<p>The __jexl function uses Commons JEXL 1, and the __jexl2 function uses Commons JEXL 2</p>
- <ul>
- <li><a href="http://commons.apache.org/jexl/reference/syntax.html">JEXL syntax description</a></li>
- <li><a href="http://commons.apache.org/jexl/reference/examples.html#Example_Expressions">JEXL examples</a></li>
- </ul>
- </description>
+ <ul>
+ <li><a href="http://commons.apache.org/jexl/reference/syntax.html">JEXL syntax description</a></li>
+ <li><a href="http://commons.apache.org/jexl/reference/examples.html#Example_Expressions">JEXL examples</a></li>
+ </ul>
+ </description>
<properties>
<property name="Expression" required="Yes">
@@ -988,16 +988,16 @@ The following variables are made available to the script:
<component index="&sect-num;.5.19" name="__V">
<description>
- <p>The V (variable) function returns the result of evaluating a variable name expression.
- This can be used to evaluate nested variable references (which are not currently supported).
- </p>
- <p>For example, if one has variables A1,A2 and N=1:</p>
- <ul>
- <li>${A1} - works OK</li>
- <li>${A${N}} - does not work (nested variable reference)</li>
- <li>${__V(A${N})} - works OK. A${N} becomes A1, and the __V function returns the value of A1</li>
- </ul>
- </description>
+ <p>The V (variable) function returns the result of evaluating a variable name expression.
+ This can be used to evaluate nested variable references (which are not currently supported).
+ </p>
+ <p>For example, if one has variables A1,A2 and N=1:</p>
+ <ul>
+ <li>${A1} - works OK</li>
+ <li>${A${N}} - does not work (nested variable reference)</li>
+ <li>${__V(A${N})} - works OK. A${N} becomes A1, and the __V function returns the value of A1</li>
+ </ul>
+ </description>
<properties>
<property name="Variable name" required="Yes">
@@ -1008,15 +1008,15 @@ The following variables are made available to the script:
<component index="&sect-num;.5.20" name="__evalVar">
<description>
- <p>The eval function returns the result of evaluating an expression stored in a variable.
- </p>
- <p>
- This allows one to read a string from a file, and process any variable references in it.
- For example, if the variable "query" contains "select ${column} from ${table}"
- and "column" and "table" contain "name" and "customers", then ${__evalVar(query)}
- will evaluate as "select name from customers".
- </p>
- </description>
+ <p>The eval function returns the result of evaluating an expression stored in a variable.
+ </p>
+ <p>
+ This allows one to read a string from a file, and process any variable references in it.
+ For example, if the variable "query" contains "select ${column} from ${table}"
+ and "column" and "table" contain "name" and "customers", then ${__evalVar(query)}
+ will evaluate as "select name from customers".
+ </p>
+ </description>
<properties>
<property name="Variable name" required="Yes">
@@ -1026,24 +1026,24 @@ The following variables are made available to the script:
</component>
<component index="&sect-num;.5.21" name="__eval">
<description>
- <p>The eval function returns the result of evaluating a string expression.
- </p>
- <p>
- This allows one to interpolate variable and function references in a string
- which is stored in a variable. For example, given the following variables:
- <ul>
- <li>name=Smith</li>
- <li>column=age</li>
- <li>table=birthdays</li>
- <li>SQL=select ${column} from ${table} where name='${name}'</li>
- </ul>
- then ${__eval(${SQL})} will evaluate as "select age from birthdays where name='Smith'".
- </p>
- <p>
- This can be used in conjunction with CSV Dataset, for example
- where the both SQL statements and the values are defined in the data file.
- </p>
- </description>
+ <p>The eval function returns the result of evaluating a string expression.
+ </p>
+ <p>
+ This allows one to interpolate variable and function references in a string
+ which is stored in a variable. For example, given the following variables:
+ <ul>
+ <li>name=Smith</li>
+ <li>column=age</li>
+ <li>table=birthdays</li>
+ <li>SQL=select ${column} from ${table} where name='${name}'</li>
+ </ul>
+ then ${__eval(${SQL})} will evaluate as "select age from birthdays where name='Smith'".
+ </p>
+ <p>
+ This can be used in conjunction with CSV Dataset, for example
+ where the both SQL statements and the values are defined in the data file.
+ </p>
+ </description>
<properties>
<property name="Variable name" required="Yes">
View
76 xdocs/usermanual/get-started.xml
@@ -341,7 +341,7 @@ To do so, use the following options:</p>
<p>-G[propertyfile] - defines a file containing JMeter properties to be sent to all remote servers.</p>
<p>-L[category]=[priority] - overrides a logging setting, setting a particular category to the given priority level.</p>
<p>The -L flag can also be used without the category name to set the root logging level.</p>
- <p><b>Examples</b>:
+ <p><b>Examples</b>:
<pre>
jmeter -Duser.dir=/home/mstover/jmeter_stuff \
-Jremote_hosts=127.0.0.1 -Ljmeter.engine=DEBUG
@@ -350,9 +350,9 @@ jmeter -LDEBUG</pre>
</p>
<p>
<b>N.B.<br/>
- The command line properties are processed early in startup, but after the logging system has been set up.
- Attempts to use the -J flag to update log_level or log_file properties will have no effect.</b>
- </p>
+ The command line properties are processed early in startup, but after the logging system has been set up.
+ Attempts to use the -J flag to update log_level or log_file properties will have no effect.</b>
+ </p>
</subsection>
<subsection name="&sect-num;.4.6 Logging and error messages" anchor="logging">
<note>
@@ -360,30 +360,30 @@ jmeter -LDEBUG</pre>
running tests. Nor does it report any error for a mis-spelt variable or function; instead the
reference is just used as is. See <a href="functions.html">Functions and Variables for more information</a>.
</note>
- <p>If JMeter detects an error during a test, a message will be written to the log file.
- The log file name is defined in the jmeter.properties file (or using the -j option, see below).
- It defaults to <b>jmeter.log</b>, and will be found in the directory from which JMeter was launched.
- </p>
- <p>
- Since JMeter 2.6, menu <b>Options > Log Viewer</b> displays the log file in a bottom pane on main JMeter window.
- </p>
- <p>
- Since JMeter 2.7 (GUI mode), the number of error/fatal messages logged in the log file is displayed at top-right.
- </p>
- <figure image="log_errors_counter.png">Error/fatal counter</figure>
- <p>
- JMeter versions after 2.2 added a new command-line option, -j jmeterlogfile.
- This is processed after the initial properties file is read,
- and before any further properties are processed.
- It therefore allows the default of jmeter.log to be overridden.
- The jmeter scripts that take a test plan name as a parameter (e.g. jmeter-n.cmd) have been updated
- to define the log file using the test plan name,
- e.g. for the test plan Test27.jmx the log file is set to Test27.log.
- </p>
- <p>When running on Windows, the file may appear as just <b>jmeter</b> unless you have set Windows to show file extensions.
- [Which you should do anyway, to make it easier to detect viruses and other nasties that pretend to be text files...]
- </p>
- <p>As well as recording errors, the jmeter.log file records some information about the test run. For example:</p>
+ <p>If JMeter detects an error during a test, a message will be written to the log file.
+ The log file name is defined in the jmeter.properties file (or using the -j option, see below).
+ It defaults to <b>jmeter.log</b>, and will be found in the directory from which JMeter was launched.
+ </p>
+ <p>
+ Since JMeter 2.6, menu <b>Options > Log Viewer</b> displays the log file in a bottom pane on main JMeter window.
+ </p>
+ <p>
+ Since JMeter 2.7 (GUI mode), the number of error/fatal messages logged in the log file is displayed at top-right.
+ </p>
+ <figure image="log_errors_counter.png">Error/fatal counter</figure>
+ <p>
+ JMeter versions after 2.2 added a new command-line option, -j jmeterlogfile.
+ This is processed after the initial properties file is read,
+ and before any further properties are processed.
+ It therefore allows the default of jmeter.log to be overridden.
+ The jmeter scripts that take a test plan name as a parameter (e.g. jmeter-n.cmd) have been updated
+ to define the log file using the test plan name,
+ e.g. for the test plan Test27.jmx the log file is set to Test27.log.
+ </p>
+ <p>When running on Windows, the file may appear as just <b>jmeter</b> unless you have set Windows to show file extensions.
+ [Which you should do anyway, to make it easier to detect viruses and other nasties that pretend to be text files...]
+ </p>
+ <p>As well as recording errors, the jmeter.log file records some information about the test run. For example:</p>
<div overflow="scroll">
<pre>
10/17/2003 12:19:20 PM INFO - jmeter.JMeter: Version 1.9.20031002
@@ -393,11 +393,11 @@ jmeter -LDEBUG</pre>
10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Continue on error
10/17/2003 12:19:52 PM INFO - jmeter.threads.JMeterThread: Thread BSH1-1 started
10/17/2003 12:19:52 PM INFO - jmeter.threads.JMeterThread: Thread BSH1-1 is done
-10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Test has ended
+10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Test has ended
</pre>
</div>
<p>The log file can be helpful in determining the cause of an error,
- as JMeter does not interrupt a test to display an error dialogue.</p>
+ as JMeter does not interrupt a test to display an error dialogue.</p>
</subsection>
<subsection name="&sect-num;.4.7 Full list of command-line options" anchor="options">
<p>Invoking JMeter as "jmeter -?" will print a list of all the command-line options.
@@ -494,17 +494,17 @@ If set to 0, then JMeter does not start the daemon thread.
Similarly, <b>system.properties</b> is used to update system properties.
</note>
<properties>
- <property name="ssl.provider">You can specify the class for your SSL
- implementation if you don't want to use the built-in Java implementation.
- </property>
- <property name="xml.parser">You can specify an implementation as your XML
- parser. The default value is: org.apache.xerces.parsers.SAXParser</property>
+ <property name="ssl.provider">You can specify the class for your SSL
+ implementation if you don't want to use the built-in Java implementation.
+ </property>
+ <property name="xml.parser">You can specify an implementation as your XML
+ parser. The default value is: org.apache.xerces.parsers.SAXParser</property>
<property name="remote_hosts">Comma-delimited list of remote JMeter hosts (or host:port if required).
- If you are running JMeter in a distributed environment, list the machines where
+ If you are running JMeter in a distributed environment, list the machines where
you have JMeter remote servers running. This will allow you to control those
- servers from this machine's GUI</property>
+ servers from this machine's GUI</property>
<property name="not_in_menu">A list of components you do not want to see in
- JMeter's menus. As JMeter has more and more components added, you may wish to
+ JMeter's menus. As JMeter has more and more components added, you may wish to
customize your JMeter to show only those components you are interested in.
You may list their classname or their class label (the string that appears
in JMeter's UI) here, and they will no longer appear in the menus.</property>
View
176 xdocs/usermanual/index.xml
@@ -23,8 +23,8 @@
<body>
<section name="User's Manual" anchor="index">
<p>Click on the section name to go straight to the section.
- Click on the "+" to go to the relevant section of the detailed section list,
- where you can select individual subsections.</p>
+ Click on the "+" to go to the relevant section of the detailed section list,
+ where you can select individual subsections.</p>
<subsection name="Section Summary" anchor="summary">
<ul>
@@ -58,99 +58,99 @@
<ul>
<li><a name="intro"/><a href="intro.html">1. Introduction</a></li>
<ul>
- <li><a href="intro.html#history">1.1 History</a></li>
- <li><a href="intro.html#future">1.2 The Future</a></li>
+ <li><a href="intro.html#history">1.1 History</a></li>
+ <li><a href="intro.html#future">1.2 The Future</a></li>
</ul>
<li><a name="get-started"/><a href="get-started.html">2. Getting Started</a></li>
<ul>
- <li><a href="get-started.html#requirements">2.1 Requirements</a></li>
- <ul>
- <li><a href="get-started.html#java_versions">2.1.1 Java Version</a></li>
- <li><a href="get-started.html#os">2.1.2 Operating Systems</a></li>
- </ul>
- <li><a href="get-started.html#optional">2.2 Optional</a></li>
- <ul>
- <li><a href="get-started.html#opt_compiler">2.2.1 Java Compiler</a></li>
- <li><a href="get-started.html#opt_sax">2.2.2 SAX XML Parser</a></li>
- <li><a href="get-started.html#opt_email">2.2.3 Email Support</a></li>
- <li><a href="get-started.html#opt_ssl">2.2.4 SSL Encryption</a></li>
- <li><a href="get-started.html#opt_jdbc">2.2.5 JDBC Driver</a></li>
- <li><a href="get-started.html#opt_soap">2.2.6 Apache SOAP</a></li>
+ <li><a href="get-started.html#requirements">2.1 Requirements</a></li>
+ <ul>
+ <li><a href="get-started.html#java_versions">2.1.1 Java Version</a></li>
+ <li><a href="get-started.html#os">2.1.2 Operating Systems</a></li>
+ </ul>
+ <li><a href="get-started.html#optional">2.2 Optional</a></li>
+ <ul>
+ <li><a href="get-started.html#opt_compiler">2.2.1 Java Compiler</a></li>
+ <li><a href="get-started.html#opt_sax">2.2.2 SAX XML Parser</a></li>
+ <li><a href="get-started.html#opt_email">2.2.3 Email Support</a></li>
+ <li><a href="get-started.html#opt_ssl">2.2.4 SSL Encryption</a></li>
+ <li><a href="get-started.html#opt_jdbc">2.2.5 JDBC Driver</a></li>
+ <li><a href="get-started.html#opt_soap">2.2.6 Apache SOAP</a></li>
<li><a href="get-started.html#opt_beanshell">2.2.7 BeanShell</a></li>
<li><a href="get-started.html#libraries_activemq">2.2.8 Libraries for ActiveMQ 3.0</a></li>
- </ul>
- <li><a href="get-started.html#install">2.3 Installation</a></li>
- <ul>
- <li><a href="get-started.html#download_release">2.3.1 Downloading the Latest Release</a></li>
- <li><a href="get-started.html#download_nightly">2.3.2 Downloading Nightly Builds</a></li>
- </ul>
- <li><a href="get-started.html#running">2.4 Running JMeter</a></li>
- <ul>
- <li><a href="get-started.html#classpath">2.4.1 JMeter's Classpath</a></li>
- <li><a href="get-started.html#proxy_server">2.4.2 Using a Proxy Server</a></li>
- <li><a href="get-started.html#non_gui">2.4.3 Non-GUI Mode</a></li>
- <li><a href="get-started.html#server">2.4.4 Distributed Mode</a></li>
- <li><a href="get-started.html#override">2.4.5 Overriding Properties Via The Command Line</a></li>
- <li><a href="get-started.html#logging">2.4.6 Logging and Error Messages</a></li>
- <li><a href="get-started.html#options">2.4.7 Full list of command-line options</a></li>
- </ul>
- <li><a href="get-started.html#configuring_jmeter">2.5 Configuring JMeter</a></li>
+ </ul>
+ <li><a href="get-started.html#install">2.3 Installation</a></li>
+ <ul>
+ <li><a href="get-started.html#download_release">2.3.1 Downloading the Latest Release</a></li>
+ <li><a href="get-started.html#download_nightly">2.3.2 Downloading Nightly Builds</a></li>
+ </ul>
+ <li><a href="get-started.html#running">2.4 Running JMeter</a></li>
+ <ul>
+ <li><a href="get-started.html#classpath">2.4.1 JMeter's Classpath</a></li>
+ <li><a href="get-started.html#proxy_server">2.4.2 Using a Proxy Server</a></li>
+ <li><a href="get-started.html#non_gui">2.4.3 Non-GUI Mode</a></li>
+ <li><a href="get-started.html#server">2.4.4 Distributed Mode</a></li>
+ <li><a href="get-started.html#override">2.4.5 Overriding Properties Via The Command Line</a></li>
+ <li><a href="get-started.html#logging">2.4.6 Logging and Error Messages</a></li>
+ <li><a href="get-started.html#options">2.4.7 Full list of command-line options</a></li>
+ </ul>
+ <li><a href="get-started.html#configuring_jmeter">2.5 Configuring JMeter</a></li>
</ul>
<li><a name="build-test-plan"/><a href="build-test-plan.html">3. Building a Test Plan</a></li>
<ul>
- <li><a href="build-test-plan.html#add_remove">3.1 Adding and Removing Elements</a></li>
- <li><a href="build-test-plan.html#load_save">3.2 Loading and Saving Elements</a></li>
- <li><a href="build-test-plan.html#config_element">3.3 Configuring Tree Elements</a></li>
+ <li><a href="build-test-plan.html#add_remove">3.1 Adding and Removing Elements</a></li>
+ <li><a href="build-test-plan.html#load_save">3.2 Loading and Saving Elements</a></li>
+ <li><a href="build-test-plan.html#config_element">3.3 Configuring Tree Elements</a></li>
<li><a href="build-test-plan.html#save">3.4 Saving the Test Plan</a></li>
- <li><a href="build-test-plan.html#run">3.5 Running a Test Plan</a></li>
- <li><a href="build-test-plan.html#error_reporting">3.6 Error reporting</a></li>
+ <li><a href="build-test-plan.html#run">3.5 Running a Test Plan</a></li>
+ <li><a href="build-test-plan.html#error_reporting">3.6 Error reporting</a></li>
</ul>
<li><a name="test_plan"/><a href="test_plan.html">4. Elements of a Test Plan</a></li>
<ul>
- <li><a href="test_plan.html#thread_group">4.1 Thread Group</a></li>
- <li><a href="test_plan.html#controllers">4.2 Controllers</a></li>
- <ul>
- <li><a href="test_plan.html#samplers">4.2.1 Samplers</a></li>
- <li><a href="test_plan.html#logic_controller">4.2.2 Logic Controllers</a></li>
- </ul>
- <li><a href="test_plan.html#listeners">4.3 Listeners</a></li>
- <li><a href="test_plan.html#timers">4.4 Timers</a></li>
- <li><a href="test_plan.html#assertions">4.5 Assertions</a></li>
- <li><a href="test_plan.html#config_elements">4.6 Configuration Elements</a></li>
- <li><a href="test_plan.html#preprocessors">4.7 Pre-Processor Elements</a></li>
- <li><a href="test_plan.html#postprocessors">4.8 Post-Processor Elements</a></li>
- <li><a href="test_plan.html#executionorder">4.9 Execution order</a></li>
- <li><a href="test_plan.html#scoping_rules">4.10 Scoping Rules</a></li>
- <li><a href="test_plan.html#properties">4.11 Properties and Variables</a></li>
+ <li><a href="test_plan.html#thread_group">4.1 Thread Group</a></li>
+ <li><a href="test_plan.html#controllers">4.2 Controllers</a></li>
+ <ul>
+ <li><a href="test_plan.html#samplers">4.2.1 Samplers</a></li>
+ <li><a href="test_plan.html#logic_controller">4.2.2 Logic Controllers</a></li>
+ </ul>
+ <li><a href="test_plan.html#listeners">4.3 Listeners</a></li>
+ <li><a href="test_plan.html#timers">4.4 Timers</a></li>
+ <li><a href="test_plan.html#assertions">4.5 Assertions</a></li>
+ <li><a href="test_plan.html#config_elements">4.6 Configuration Elements</a></li>
+ <li><a href="test_plan.html#preprocessors">4.7 Pre-Processor Elements</a></li>
+ <li><a href="test_plan.html#postprocessors">4.8 Post-Processor Elements</a></li>
+ <li><a href="test_plan.html#executionorder">4.9 Execution order</a></li>
+ <li><a href="test_plan.html#scoping_rules">4.10 Scoping Rules</a></li>
+ <li><a href="test_plan.html#properties">4.11 Properties and Variables</a></li>
<li><a href="test_plan.html#using_variables">4.12 Using Variables to parameterise tests</a></li>
- </ul>
+ </ul>
<li><a name="build-web-test-plan"/><a href="build-web-test-plan.html">5. Building a Web Test Plan</a></li>
- <ul>
- <li><a href="build-web-test-plan.html#adding_users">5.1 Adding Users</a></li>
- <li><a href="build-web-test-plan.html#adding_defaults">5.2 Adding Default HTTP Request Properties</a></li>
- <li><a href="build-web-test-plan.html#adding_cookie_support">5.3 Adding Cookie Support</a></li>
- <li><a href="build-web-test-plan.html#adding_requests">5.4 Adding HTTP Requests</a></li>
- <li><a href="build-web-test-plan.html#adding_listener">5.5 Adding a Listener to View/Store the Test Results</a></li>
- <li><a href="build-web-test-plan.html#logging_in">5.6 Logging in to a web-site</a></li>
- </ul>
+ <ul>
+ <li><a href="build-web-test-plan.html#adding_users">5.1 Adding Users</a></li>
+ <li><a href="build-web-test-plan.html#adding_defaults">5.2 Adding Default HTTP Request Properties</a></li>
+ <li><a href="build-web-test-plan.html#adding_cookie_support">5.3 Adding Cookie Support</a></li>
+ <li><a href="build-web-test-plan.html#adding_requests">5.4 Adding HTTP Requests</a></li>
+ <li><a href="build-web-test-plan.html#adding_listener">5.5 Adding a Listener to View/Store the Test Results</a></li>
+ <li><a href="build-web-test-plan.html#logging_in">5.6 Logging in to a web-site</a></li>
+ </ul>
<li><a name="build-adv-web-test-plan"/><a href="build-adv-web-test-plan.html">6. Building an Advanced Web Test Plan</a></li>
- <ul>
- <li><a href="build-adv-web-test-plan.html#session_url_rewriting">6.1 Handling User Sessions With URL Rewriting</a></li>
- <li><a href="build-adv-web-test-plan.html#header_manager">6.2 Using a Header Manager</a></li>
- </ul>
+ <ul>
+ <li><a href="build-adv-web-test-plan.html#session_url_rewriting">6.1 Handling User Sessions With URL Rewriting</a></li>
+ <li><a href="build-adv-web-test-plan.html#header_manager">6.2 Using a Header Manager</a></li>
+ </ul>
<li><a name="build-db-test-plan"/><a href="build-db-test-plan.html">7. Building a Database Test Plan</a></li>
- <ul>
- <li><a href="build-db-test-plan.html#adding_users">7.1 Adding Users</a></li>
- <li><a href="build-db-test-plan.html#adding_requests">7.2 Adding JDBC Requests</a></li>
- <li><a href="build-db-test-plan.html#adding_listener">7.3 Adding a Listener to View/Store the Test Results</a></li>
- </ul>
+ <ul>
+ <li><a href="build-db-test-plan.html#adding_users">7.1 Adding Users</a></li>
+ <li><a href="build-db-test-plan.html#adding_requests">7.2 Adding JDBC Requests</a></li>
+ <li><a href="build-db-test-plan.html#adding_listener">7.3 Adding a Listener to View/Store the Test Results</a></li>
+ </ul>
<li><a name="build-ftp-test-plan"/><a href="build-ftp-test-plan.html">8. Building an FTP Test Plan</a></li>
- <ul>
- <li><a href="build-ftp-test-plan.html#adding_users">8.1 Adding Users</a></li>
- <li><a href="build-ftp-test-plan.html#adding_defaults">8.2 Adding Default FTP Request Properties</a></li>
- <li><a href="build-ftp-test-plan.html#adding_requests">8.3 Adding FTP Requests</a></li>
- <li><a href="build-ftp-test-plan.html#adding_listener">8.4 Adding a Listener to View/Store the Test Results</a></li>
- </ul>
+ <ul>
+ <li><a href="build-ftp-test-plan.html#adding_users">8.1 Adding Users</a></li>
+ <li><a href="build-ftp-test-plan.html#adding_defaults">8.2 Adding Default FTP Request Properties</a></li>
+ <li><a href="build-ftp-test-plan.html#adding_requests">8.3 Adding FTP Requests</a></li>
+ <li><a href="build-ftp-test-plan.html#adding_listener">8.4 Adding a Listener to View/Store the Test Results</a></li>
+ </ul>
<li><a name="build-ldap-test-plan"/><a href="build-ldap-test-plan.html">9a. Building an LDAP Test Plan</a></li>
<ul>
<li><a href="build-ldap-test-plan.html#adding_users">9a.1 Adding Users</a></li>
@@ -174,16 +174,16 @@
<li><a name="remote-test"/><a href="remote-test.html">15. Remote Testing</a></li>
<li><a name="best-practices"/><a href="best-practices.html">16. Best Practices</a></li>
<ul>
- <li><a href="best-practices.html#limit_threads">16.1 Limit the Number of Threads</a></li>
- <li><a href="best-practices.html#put_cookie_manager">16.2 Where to Put the Cookie Manager</a></li>
- <li><a href="best-practices.html#put_auth_manager">16.3 Where to Put the Authorization Manager</a></li>
- <li><a href="best-practices.html#proxy_server">16.4 Using the Proxy Server to record test scripts</a></li>
- <li><a href="best-practices.html#user_variables">16.5 User variables</a></li>
- <li><a href="best-practices.html#lean_mean">16.6 Reducing resource requirements</a></li>
- <li><a href="best-practices.html#beanshell_server">16.7 BeanShell server</a></li>
- <li><a href="best-practices.html#bsh_scripting">16.8 BeanShell scripting</a></li>
- <li><a href="best-practices.html#developing_scripts">16.9 Developing script functions in BeanShell, Javascript or Jexl etc.</a></li>
- <li><a href="best-practices.html#parameterising_tests">16.10 Parameterising tests</a></li>
+ <li><a href="best-practices.html#limit_threads">16.1 Limit the Number of Threads</a></li>
+ <li><a href="best-practices.html#put_cookie_manager">16.2 Where to Put the Cookie Manager</a></li>
+ <li><a href="best-practices.html#put_auth_manager">16.3 Where to Put the Authorization Manager</a></li>
+ <li><a href="best-practices.html#proxy_server">16.4 Using the Proxy Server to record test scripts</a></li>
+ <li><a href="best-practices.html#user_variables">16.5 User variables</a></li>
+ <li><a href="best-practices.html#lean_mean">16.6 Reducing resource requirements</a></li>
+ <li><a href="best-practices.html#beanshell_server">16.7 BeanShell server</a></li>
+ <li><a href="best-practices.html#bsh_scripting">16.8 BeanShell scripting</a></li>
+ <li><a href="best-practices.html#developing_scripts">16.9 Developing script functions in BeanShell, Javascript or Jexl etc.</a></li>
+ <li><a href="best-practices.html#parameterising_tests">16.10 Parameterising tests</a></li>
</ul>
<li><a name="boss"/><a href="boss.html">17. Help! My boss wants me to load test our web app!</a></li>
View
80 xdocs/usermanual/ldapanswer_xml.xml
@@ -17,33 +17,33 @@
-->
<document>
<properties>
- <title>User's Manual: LDAP answer XML description</title>
+ <title>User's Manual: LDAP answer XML description</title>
<author email="Dolf.Smits@Siemens.com">Dolf Smits</author>
</properties>
<body>
<section name="description of the ldapanswer XML definition" anchor="ldapans_xml">
<p>
- The extended LDAP sampler was built to support testing for very complex testpurposes.
- It was aimed at supporting the LDAP operations as close as possible.
- As the results are not passed back in a user-readable form, I invented my own xml definition to
- construct an answer in xml encoding, so the results may be parsed with regextracter or alike functions.
+ The extended LDAP sampler was built to support testing for very complex testpurposes.
+ It was aimed at supporting the LDAP operations as close as possible.
+ As the results are not passed back in a user-readable form, I invented my own xml definition to
+ construct an answer in xml encoding, so the results may be parsed with regextracter or alike functions.
</p>
<subsection name="1 Global overview" anchor="overview">
<p>
- The global structure is as follows:<br/>
+ The global structure is as follows:<br/>
<!--
<ol>
<li>
- &lt;ldapanswer&gt; and &lt;ldapanswer/&gt; are the begin and endtags which are used to define the beginning ands end of the answer.
+ &lt;ldapanswer&gt; and &lt;ldapanswer/&gt; are the begin and endtags which are used to define the beginning ands end of the answer.
</li>
<li>
- each ldapanswer contains 4 sections, an "operation" section (enclosed by
- &lt;operation&gt; tags) a respons code section (enclosed by &lt;responsecode&gt; tags), a
- response message (enclosed by &lt;responsemessage&gt; tags and (only with a search
- request) a searchresult section (enclosed with &ltsearchresult&gt tags>
+ each ldapanswer contains 4 sections, an "operation" section (enclosed by
+ &lt;operation&gt; tags) a respons code section (enclosed by &lt;responsecode&gt; tags), a
+ response message (enclosed by &lt;responsemessage&gt; tags and (only with a search
+ request) a searchresult section (enclosed with &ltsearchresult&gt tags>
</li>
</ol>
-->
@@ -55,35 +55,35 @@ following tags (with a short explanation) are used
<!--
<ol>
<li>
- &lt;opertype&gt;<br>
- Thise describes which kind of operation was sent, it can have the following values:
- <ol>
- <li>
- bind<br>
- (this code is used for both a thread bind as a single bind/unbind operation)
- </li>
- <li>
- unbind
- </li>
- <li>
- compare
- </li>
- <li>
- add
- </li>
- <li>
- delete
- </li>
- <li>
- modfy
- </li>
- <li>
- rename
- </li>
- <li>
- search
- </li>
- </ol>
+ &lt;opertype&gt;<br>
+ Thise describes which kind of operation was sent, it can have the following values:
+ <ol>
+ <li>
+ bind<br>
+ (this code is used for both a thread bind as a single bind/unbind operation)
+ </li>
+ <li>
+ unbind
+ </li>
+ <li>
+ compare
+ </li>
+ <li>
+ add
+ </li>
+ <li>
+ delete
+ </li>
+ <li>
+ modfy
+ </li>
+ <li>
+ rename
+ </li>
+ <li>
+ search
+ </li>
+ </ol>
</li>
<li>
&lt;attributes&gt;
View
135 xdocs/usermanual/ldapops_tutor.xml
@@ -17,98 +17,97 @@
-->
<document>
<properties>
- <title>JMeter - User's Manual: LDAP Operations</title>
+ <title>JMeter - User's Manual: LDAP Operations</title>
<author email="Dolf.Smits@Siemens.com">Dolf Smits</author>
</properties>
<body>
<section name="A short LDAP Operations tutorial" anchor="ops">
- <p>
- The extended LDAP sampler was built to support testing for very complex testpurposes.
- It was aimed at supporting the LDAP operations as close as possible.
- In this short tutorial, I will explain which LDAP operations exist and what they do.
- Per operation, I will shortly explain how these operations are implemented.<br/>
- LDAP servers are some kind of hierarchical database, they store objects (entries) in a tree. The uppermost part of a tree is called the ROOT of the tree.<br/>
- eg. When a tree starts with dc=com, the root equals dc=com.<br/>
- The next level can exist under the root, eg dc=Siemens. The full name of this object (the "distinghuised name") is "dc=siemens,dc=com.<br/>
- Again, a following level can be made, by adding the user "cn=admin" under dc=siemens,dc=com. This object has a DN (distinguished name) of "cn=admin,dc=siemens,dc=com".<br/>
- The relative distinguished name (RDN) is the last part of the DN, eg. cn=admin.<br/>
- The characteristics of an object are determined by the objectClasses, which can be seen as a collection of attributes.<br/>
- The type of an object is determined by the "structural objectClass" eg person, organizationalUnit or country.<br/>
- The attributes contain the data of an object, eg mailadress, name, streetadress etc. Each attribute can have 0, 1 or more values.
- </p>
+ <p>
+ The extended LDAP sampler was built to support testing for very complex testpurposes.
+ It was aimed at supporting the LDAP operations as close as possible.
+ In this short tutorial, I will explain which LDAP operations exist and what they do.
+ Per operation, I will shortly explain how these operations are implemented.<br/>
+ LDAP servers are some kind of hierarchical database, they store objects (entries) in a tree. The uppermost part of a tree is called the ROOT of the tree.<br/>
+ eg. When a tree starts with dc=com, the root equals dc=com.<br/>
+ The next level can exist under the root, eg dc=Siemens. The full name of this object (the "distinghuised name") is "dc=siemens,dc=com.<br/>
+ Again, a following level can be made, by adding the user "cn=admin" under dc=siemens,dc=com. This object has a DN (distinguished name) of "cn=admin,dc=siemens,dc=com".<br/>
+ The relative distinguished name (RDN) is the last part of the DN, eg. cn=admin.<br/>
+ The characteristics of an object are determined by the objectClasses, which can be seen as a collection of attributes.<br/>
+ The type of an object is determined by the "structural objectClass" eg person, organizationalUnit or country.<br/>
+ The attributes contain the data of an object, eg mailadress, name, streetadress etc. Each attribute can have 0, 1 or more values.
+ </p>
<subsection name="1 Bind operation" anchor="bind">
- <p>
- Any contact with an LDAP server MUST start with a bind request. LDAP is a state dependent protocol. Without opening a session to
- a LDAP server, no additional request can be made.
- Due to some peculiarities in the JAVA libraries, 2 different bind operations are implemented.
- </p>
+ <p>
+ Any contact with an LDAP server MUST start with a bind request. LDAP is a state dependent protocol. Without opening a session to
+ a LDAP server, no additional request can be made.
+ Due to some peculiarities in the JAVA libraries, 2 different bind operations are implemented.
+ </p>
<subsection name="1.1 Thread Bind" anchor="thread_bind">
- <p>
- This bind is meant to open a session to a LDAP server. Any testplan should use this operation as the starting point from a session.
- For each Thread (each virtual user) a seperate connection with the LDAP server is build, and so a seperate Thread bind is performed.
- </p>
+ <p>
+ This bind is meant to open a session to a LDAP server. Any testplan should use this operation as the starting point from a session.
+ For each Thread (each virtual user) a seperate connection with the LDAP server is build, and so a seperate Thread bind is performed.
+ </p>
</subsection>
<subsection name="1.2 Single bind/unbind" anchor="single">
- <p >
- This bind is used for user authentication verification.
- A proper developed LDAP client, who needs an authenticated user, perform a bind with a given distinguished name and password.
- This Single bind/unbind operation is for this purpose. It builds it own seperate connection to the LDAP server, performs a
- bind operation, and ends the connection again (by sending an unbind).
- </p>
+ <p>
+ This bind is used for user authentication verification.
+ A proper developed LDAP client, who needs an authenticated user, perform a bind with a given distinguished name and password.
+ This Single bind/unbind operation is for this purpose. It builds it own seperate connection to the LDAP server, performs a
+ bind operation, and ends the connection again (by sending an unbind).
+ </p>
</subsection>
</subsection>
<subsection name="2 Unbind" anchor="unbind">
- <p>
- To close a connection to a LDAP server, an unbind operation is needed.
- As the Single bind/unbind operation already (implicitly) performs an unbind, only a Thread unbind operation is needed.
- This Thread unbind just closes the connection and cleans up any resources it has used.
- </p>
+ <p>
+ To close a connection to a LDAP server, an unbind operation is needed.
+ As the Single bind/unbind operation already (implicitly) performs an unbind, only a Thread unbind operation is needed.
+ This Thread unbind just closes the connection and cleans up any resources it has used.
+ </p>
</subsection>
<subsection name="3 Compare" anchor="compare">
- <p>
- The compare operation needs the full distinguished name from a LDAP object, as well as a attribute and a value for the attribute.
- It will simply check: "Has this object really this attribute with this value?".
- Typical use is checking the membership of a certain user with a given group.
- </p>
+ <p>
+ The compare operation needs the full distinguished name from a LDAP object, as well as a attribute and a value for the attribute.
+ It will simply check: "Has this object really this attribute with this value?".
+ Typical use is checking the membership of a certain user with a given group.
+ </p>
</subsection>
<subsection name="4 Search" anchor="search">
- <p>
- The search test simply searches for all objects which comply with a given search filter, eg.
- all persons with a "employeeType=inactive" or "all persons with a userID equals user1"
-
- </p>
+ <p>
+ The search test simply searches for all objects which comply with a given search filter, eg.
+ all persons with a "employeeType=inactive" or "all persons with a userID equals user1"
+ </p>
</subsection>
<subsection name="5 Add" anchor="add">
- <p>
- This simply add an object to the LDAP directory.
- Off course the combination of attributes and distinguishedName must be valid!
- </p>
+ <p>
+ This simply add an object to the LDAP directory.
+ Off course the combination of attributes and distinguishedName must be valid!
+ </p>
</subsection>
<subsection name="6 Modify" anchor="modify">
- <p>
- This operation modifies one or more attributes from a given object.
- It needs the distinghised name from the object, as well as the attributes and the new values for this attribute.<br/>
- Three versions are available, add, for adding an attribute value<br/>
- replace, for overwriting the old attribute value with a new value<br/>
- delete, to delete a value form an attribute, or to delete all the values of an attribute<br/>
- </p>
+ <p>
+ This operation modifies one or more attributes from a given object.
+ It needs the distinghised name from the object, as well as the attributes and the new values for this attribute.<br/>
+ Three versions are available, add, for adding an attribute value<br/>
+ replace, for overwriting the old attribute value with a new value<br/>
+ delete, to delete a value form an attribute, or to delete all the values of an attribute<br/>
+ </p>
</subsection>
<subsection name="7 Delete" anchor="delete">
- <p>
- This operation deletes an object from the LDAP server.
- It needs the distinghised name from the object.
- </p>
+ <p>
+ This operation deletes an object from the LDAP server.
+ It needs the distinghised name from the object.
+ </p>
</subsection>
<subsection name="8 modDN" anchor="moddn">
- <p>
- This operation modifies the distinguished name from an object (it "moves" the object).<br/>
- It comes in two flavours, just renaming an entry, then you specify a new RDN (relative distinguished name, this is the lowest part of the DN)<br/>
- eg, you can rename "cn=admin,dc=siemens,dc=com" to cn=administrator,dc=Siemens,dc=com"<br/>
- The second flavour is renaming (moving) a complete subtree by specifying a "new superior"<br/>
- eg you can move a complete subtree "ou=retired,ou=people,dc=siemens,dc=com" to a new subtree "ou=retired people,dc=siemens,dc=com" by specifying
- a new rdn "ou=retired people" and a new superior of "dc=siemens,dc=com"
- </p>
+ <p>
+ This operation modifies the distinguished name from an object (it "moves" the object).<br/>
+ It comes in two flavours, just renaming an entry, then you specify a new RDN (relative distinguished name, this is the lowest part of the DN)<br/>
+ eg, you can rename "cn=admin,dc=siemens,dc=com" to cn=administrator,dc=Siemens,dc=com"<br/>
+ The second flavour is renaming (moving) a complete subtree by specifying a "new superior"<br/>
+ eg you can move a complete subtree "ou=retired,ou=people,dc=siemens,dc=com" to a new subtree "ou=retired people,dc=siemens,dc=com" by specifying
+ a new rdn "ou=retired people" and a new superior of "dc=siemens,dc=com"
+ </p>
</subsection>
</section>
View
2  xdocs/usermanual/listeners.xml
@@ -84,7 +84,7 @@ output results like:.</p>
timeStamp|time|label|responseCode|threadName|dataType|success|failureMessage
02/06/03 08:21:42|1187|Home|200|Thread Group-1|text|true|
02/06/03 08:21:42|47|Login|200|Thread Group-1|text|false|Test Failed:
- expected to contain: password etc.
+ expected to contain: password etc.
</pre>
</code></p>
<p>
View
8 xdocs/usermanual/remote-test.xml
@@ -95,7 +95,7 @@ If this is non-zero, it will be used as the local port number for the server eng
add the value of your running JMeter server's IP address. Multiple such servers can be added, comma-delimited.</p>
<p>Note that you can use the -R <a href="get-started.html#override">command line option</a>
instead to specify the remote host(s) to use. This has the same effect as using -r and -Jremote_hosts={serverlist}.
- E.g. jmeter -Rhost1,127.0.0.1,host2</p>
+ E.g. jmeter -Rhost1,127.0.0.1,host2</p>
<p>If you define the JMeter property server.exitaftertest=true, then the server will exit after it runs a single test.
See also the -X flag (described below)
</p>
@@ -137,9 +137,9 @@ and follow the instructions below.
to run the RMI Registry application (which is named, "rmiregistry") that comes with the JDK and is located in the "bin"
directory. Before running rmiregistry, make sure that the following jars are in your system claspath:
<ul>
- <li>JMETER_HOME/lib/ext/ApacheJMeter_core.jar</li>
- <li>JMETER_HOME/lib/jorphan.jar</li>
- <li>JMETER_HOME/lib/logkit-1.2.jar</li>
+ <li>JMETER_HOME/lib/ext/ApacheJMeter_core.jar</li>
+ <li>JMETER_HOME/lib/jorphan.jar</li>
+ <li>JMETER_HOME/lib/logkit-1.2.jar</li>
</ul>
The
rmiregistry application needs access to certain JMeter classes. Run rmiregistry with no parameters. By default the
View
68 xdocs/usermanual/test_plan.xml
@@ -74,13 +74,13 @@ Start with Ramp-up = number of threads and adjust up or down as needed.
<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>
+ 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>
</subsection>
<subsection name="&sect-num;.2 Controllers" anchor="controllers">
@@ -114,13 +114,13 @@ Controllers can be used to modify the number of repetitions of a sampler.
<p>
JMeter samplers include:
<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>
+ <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.
@@ -158,24 +158,24 @@ following test tree:</p>
<p>
<ul>
<li>Test Plan</li>
- <ul>
- <li>Thread Group</li>
- <ul>
- <li>Once Only Controller</li>
- <ul>
- <li>Login Request (an <complink name="HTTP Request"/>)</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>
+ <li>Thread Group</li>
+ <ul>
+ <li>Once Only Controller</li>
+ <ul>
+ <li>Login Request (an <complink name="HTTP Request"/>)</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>
@@ -320,8 +320,8 @@ Since we placed "Web Defaults 1" inside a Loop Controller, only "Web Page 2" can
requests will use "Web Defaults 2", since we placed it in the Thread Group (the "parent" of all other branches).</p>
<figure image="http-config/http-config-example.png">Figure 1 -
- Test Plan Showing Accessability of Configuration Elements</figure>
-
+ Test Plan Showing Accessability of Configuration Elements</figure>
+
<note>
The <complink name="User Defined Variables"/> Configuration element is different.
It is processed at the start of a test, no matter where it is placed.
Please sign in to comment.
Something went wrong with that request. Please try again.