diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000000..826ae4bd089
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,188 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+============================ End of Apache License V 2.0 ===================
+
+Source and binary distributions of Apache JMeter contain icons from the Open Icon Library
+http://openiconlibrary.sourceforge.net/
+
+For license details, please see the file: licenses/src/openiconlibrary.txt
+
+
+Binary distributions additionally contain software included under various licenses.
+
+For details, please see the files under: licenses/bin
\ No newline at end of file
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 00000000000..64e77015bb9
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,5 @@
+Apache JMeter
+Copyright 1998-2015 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/README b/README
index 8aaa18af021..e2156d976f5 100644
--- a/README
+++ b/README
@@ -1,78 +1,192 @@
A P A C H E J M E T E R
- Version 1.0 beta 1
What is it?
-----------
Apache JMeter is a 100% pure Java application designed to test
- and measure the performance of URL retrieval and it may be used
- as a highly portable server benchmark as well as multiclient
- load generator.
+ and measure performance. It may be used as a highly portable
+ server benchmark as well as multiclient load generator.
+
+ Apache JMeter features include:
+
+ Ability to load and performance test many different server/protocol types:
+ o Web - HTTP, HTTPS
+ o SOAP
+ o FTP
+ o Database via JDBC
+ o LDAP
+ o Message-oriented middleware (MOM) via JMS
+ o Mail - SMTP(S), POP3(S) and IMAP(S)
+ o MongoDB (NoSQL)
+ o Native commands or shell scripts
+ o TCP
+
+ Full multithreading framework allows concurrent sampling by many threads and simultaneous sampling of different functions by separate thread groups.
+ Careful GUI design allows faster Test Plan building and debugging.
+ Caching and offline analysis/replaying of test results.
+ Highly Extensible core:
+ o Pluggable Samplers allow unlimited testing capabilities.
+ o Several load statistics may be choosen with pluggable timers .
+ o Data analysis and visualization plugins allow great extensibility as well as personalization.
+ o Functions can be used to provide dynamic input to a test or provide data manipulation.
+ o Scriptable Samplers (BeanShell, BSF-compatible languages and JSR223-compatible languages)
+
The Latest Version
------------------
Details of the latest version can be found on the Java Apache
- Project web site (http://java.apache.org).
+ Project web site (http://jmeter.apache.org/).
Requirements
------------
- The following requirements exist for installing Apache JMeter:
+ The following requirements exist for running Apache JMeter:
o Java Interpreter:
- A fully compliant Java 1.1 Runtime Environment is required for
- Apache JMeter to execute. Since Apache JMeter uses _only_ standard
- Java APIs (java.*), please, do not file in a bug report if your
- JRE fails to execute Apache JMeter because a class implementation
- is missing, or not fully compliant.
-
- o Supported Java Runtime Evironments are:
- - JavaSoft JDK 1.1.x for Solaris/Win32
- - JavaSoft JDK 1.2betax for Solaris/Win32
- - Microsoft 1.1.x compatible JVM for Win32
- - [PENDING: what others?]
-
- o Currently unsupported platforms are:
- - [PENDING: do some tests here]
-
- o Java JFC 1.1 and above (Swing components):
-
- These GUI extentions are required for proper functioning. Due to
- incompatibility in the package names, the precompiled version works
- only with Swing placed under the packaging com.sun.java.swing while
- other placing as for JDK 1.2beta3 and JDK 1.2beta4 are not supported
- until JavaSoft settles this down.
-
- If you have JDK 1.2 you may look in the source code and uncomment
- those import lines to meet your needs or simply put the JFC 1.1
- swingall.jar file in your classpath.
-
+ A fully compliant Java 6 (or later) Runtime Environment is required
+ for Apache JMeter to execute.
+
+ o Optional jars:
+
+ Some jars are not included with JMeter.
+ If required, these should be downloaded and placed in the lib directory
+
+ JDBC - available from database supplier
+ JMS - available from the JMS provider
+
o Java Compiler [OPTIONAL]:
A Java compiler is not needed since the distribution includes a
precompiled java binary archive. Note that a compiler is required
if you plan to build plugin classes for Apache JMeter.
- Installation Instructions and Documentation
- -------------------------------------------
-
+ Installation Instructions
+ -------------------------
+
+ Note that spaces in directory names can cause problems.
+
+ - Release builds
+ Unpack the binary archive into a suitable directory structure.
+
+ - Nightly builds
+ Unpack BOTH the _bin and _lib archives into the SAME directory structure
+
+ Running JMeter
+ --------------
+
+ Change to the bin directory and run the jmeter (Un*x) or jmeter.bat (Windows) file.
+
+ For Windows (2K, XP etc), there are also some other scripts:
+
+ jmeter-n.cmd - drop a JMX file on this and it will run it as a non-GUI test
+ jmeter-n-r.cmd - drop a JMX file on this and it will run it as a non-GUI remote (client-server) test
+ jmeter-t.cmd - drop a JMX file on this and it will open the file for running a GUI test
+
+ Documentation
+ -------------
The documentation available as of the date of this release is
- also included, in HTML format, in the docs/ directory, and it may
+ also included, in HTML format, in the printable_docs/ directory, and it may
be browsed starting from the file called index.html.
+ Build instructions
+ ------------------
+ - Release builds
+ Unpack the source archive into a suitable directory structure.
+ Most of the 3rd party library files can be extracted from the binary archive by unpacking it
+ into the same directory structure.
+ You can use Ant to download any missing files:
+
+ ant download_jars
+
+ - Nightly builds
+ Unpack the _src, _bin and _lib archives into the same directory structure.
+
+ Please note:
+ To avoid unnecessary duplication, the nightly source archives do not contain
+ the source files which are needed to run JMeter (for example properties files and scripts).
+
+ Any optional jars (see above) should be placed in lib/opt and/or lib.
+
+ Jars in lib/opt will be used for building JMeter and running the unit test, but won't be used at run-time.
+ [This is useful for testing what happens if the optional jars are not downloaded
+ by other JMeter users].
+
+ JMeter is built using Ant.
+
+ Change to the top-level directory and issue the command:
+
+ ant download_jars ! only needs to be done once; will download any missing 3rd party jars
+
+ ant
+
+ This will compile the application and enable you to run jmeter from the bin
+ directory.
+
+ ant test [-Djava.awt.headless=true]
+
+ This will compile and run the unit tests.
+ The optional property definition is required if the system does not have a suitable GUI display.
+
Licensing and legal issues
--------------------------
- For legal and licensing issues, please look in the legal section of
- the documentation.
+ For legal and licensing issues, please look the files:
+ LICENSE
+ NOTICE
+
+ This project includes HTMLParser.
+ For detailed information about HTMLParser, the project is
+ hosted on Sourceforge at http://htmlparser.sourceforge.net/
+
+ The developers of Apache JMeter are grateful to the developers
+ of HTMLParser for re-releasing htmlparser under CPL V1.0
+
+ HTMLParser was originally created by Somik Raha in 2000.
+ Derrick Oswald is the current lead developer and was kind
+ enough to assist JMeter.
+
+
+Cryptographic Software Notice
+-----------------------------
+
+This distribution may include software that has been designed for use
+with cryptographic software. The country in which you currently reside
+may have restrictions on the import, possession, use, and/or re-export
+to another country, of encryption software. BEFORE using any encryption
+software, please check your country's laws, regulations and policies
+concerning the import, possession, or use, and re-export of encryption
+software, to see if this is permitted. See
+for more information.
+
+The U.S. Government Department of Commerce, Bureau of Industry and
+Security (BIS), has classified this software as Export Commodity
+Control Number (ECCN) 5D002.C.1, which includes information security
+software using or performing cryptographic functions with asymmetric
+algorithms. The form and manner of this Apache Software Foundation
+distribution makes it eligible for export under the License Exception
+ENC Technology Software Unrestricted (TSU) exception (see the BIS
+Export Administration Regulations, Section 740.13) for both object
+code and source code.
+
+The following provides more details on the included software that
+may be subject to export controls on cryptographic software:
+
+ Apache JMeter interfaces with the
+ Java Secure Socket Extension (JSSE) API to provide
+
+ - HTTPS support
+ Apache JMeter interfaces (via Apache HttpClient3) with the
+ Java Cryptography Extension (JCE) API to provide
+
+ - NTLM authentication
+
+ Apache JMeter does not include any implementation of JSSE or JCE.
- Thanks for using Apache JMeter.
- The Java Apache Project
- http://java.apache.org/
\ No newline at end of file
+ Thank you for using Apache JMeter.
\ No newline at end of file
diff --git a/STATUS b/STATUS
new file mode 100644
index 00000000000..6097d488016
--- /dev/null
+++ b/STATUS
@@ -0,0 +1,16 @@
+STATUS as at September 2007
+======
+
+SVN status:
+- trunk is for development of 2.3.1+
+- branches/rel-2-2 is the current development branch for 2.3 final only
+
+Branch history:
+--------------
+
+rel-2-1:325546 created from trunk:325542
+rel-2-2:413997 created from rel-2-1:413996
+trunk:574067 moved to branches/java1.5_prototype-was_trunk:574058
+trunk:574063 created from branches/rel-2-2:574062
+
+sebb AT apache DOT org
\ No newline at end of file
diff --git a/bin/Apache-JMeter.jar b/bin/Apache-JMeter.jar
deleted file mode 100644
index 87c3d42360a..00000000000
Binary files a/bin/Apache-JMeter.jar and /dev/null differ
diff --git a/bin/BeanShellAssertion.bshrc b/bin/BeanShellAssertion.bshrc
new file mode 100644
index 00000000000..8a410975af5
--- /dev/null
+++ b/bin/BeanShellAssertion.bshrc
@@ -0,0 +1,43 @@
+// Sample BeanShell Assertion initialisation file
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+//print("Initialisation started");
+
+import org.apache.jmeter.util.JMeterUtils;
+
+i = j = k = 0; // for counters
+
+getprop(p){// get a JMeter property
+ return JMeterUtils.getPropDefault(p,"");
+}
+
+getprop(p,d){// get a JMeter property with default
+ return JMeterUtils.getPropDefault(p,d);
+}
+
+setprop(p,v){// set a JMeter property
+ JMeterUtils.setProperty(p, v);
+}
+
+// Assertions can use the following methods on the Response object:
+// SampleResult.setStopThread(true)
+// SampleResult.setStopTest(true)
+
+//print("Initialisation complete");
diff --git a/bin/BeanShellFunction.bshrc b/bin/BeanShellFunction.bshrc
new file mode 100644
index 00000000000..765971d6817
--- /dev/null
+++ b/bin/BeanShellFunction.bshrc
@@ -0,0 +1,64 @@
+// Sample BeanShell Function initialisation file
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// N.B. to enable this file to be used, define the JMeter property:
+// beanshell.function.init=BeanShellFunction.bshrc
+
+//print("Initialisation started");
+
+import org.apache.jmeter.util.JMeterUtils;
+
+i = j = k = 0; // for counters
+
+getprop(p){// get a JMeter property
+ return JMeterUtils.getPropDefault(p,"");
+}
+
+getprop(p,d){// get a JMeter property with default
+ return JMeterUtils.getPropDefault(p,d);
+}
+
+setprop(p,v){// set a JMeter property
+ JMeterUtils.setProperty(p, v);
+}
+
+// Define routines to stop the test or the current thread
+stopTest(){// Stop the JMeter test
+ org.apache.jmeter.engine.StandardJMeterEngine.stopEngine();
+}
+
+stopThread(){// Stop current JMeter thread
+ org.apache.jmeter.engine.StandardJMeterEngine.stopThread(Thread.currentThread().getName());
+}
+
+// Fix ampersands in a string
+// e.g. fixAmps("Something containing & ...")
+// or fixAmps(vars.get("VARNAME")) - useful if VARNAME may contain "
+String fixAmps(s) {
+ return s.replaceAll("&","&");
+}
+
+// Fix ampersands in a variable
+// e.g. fixAmps("VARNAME")
+String fixAmpsInVar(String varname) {
+ return fixAmps(vars.get(varname));
+}
+
+//print("Initialisation complete");
diff --git a/bin/BeanShellListeners.bshrc b/bin/BeanShellListeners.bshrc
new file mode 100644
index 00000000000..0ebcafaff7f
--- /dev/null
+++ b/bin/BeanShellListeners.bshrc
@@ -0,0 +1,47 @@
+// Example BeanShell Listener definitions
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// ThreadListener methods
+
+threadStarted(){
+ print("threadStarted");
+}
+
+threadFinished(){
+ print("threadFinished");
+}
+
+// TestListener methods
+
+testStarted(){
+ print("testStarted");
+}
+
+testEnded(){
+ print("testEnded");
+}
+
+testStarted(String s){
+ print("testStarted "+s);
+}
+
+testEnded(String s){
+ print("testEnded "+s);
+}
\ No newline at end of file
diff --git a/bin/BeanShellSampler.bshrc b/bin/BeanShellSampler.bshrc
new file mode 100644
index 00000000000..63683a7b769
--- /dev/null
+++ b/bin/BeanShellSampler.bshrc
@@ -0,0 +1,69 @@
+// Sample BeanShell Sampler initialisation file
+// To enable, define the JMeter property:
+// beanshell.sampler.init=BeanShellSampler.bshrc
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+//print("Initialisation started");
+
+import org.apache.jmeter.util.JMeterUtils;
+
+i = j = k = 0; // for counters
+
+getprop(p){// get a JMeter property
+ return JMeterUtils.getPropDefault(p,"");
+}
+
+getprop(p,d){// get a JMeter property with default
+ return JMeterUtils.getPropDefault(p,d);
+}
+
+setprop(p,v){// set a JMeter property
+ JMeterUtils.setProperty(p, v);
+}
+
+// Define routines to stop the test or a thread
+stopEngine(){// Stop the JMeter test
+ org.apache.jmeter.engine.StandardJMeterEngine.stopEngine();
+}
+
+stopThread(t){// Stop a JMeter thread
+ org.apache.jmeter.engine.StandardJMeterEngine.stopThread(t);
+}
+
+String getVariables(){ // Create a listing of the thread variables
+ StringBuffer sb = new StringBuffer(100);
+ Iterator i = vars.getIterator();
+ while(i.hasNext())
+ {
+ Map.Entry me = i.next();
+ if(String.class.equals(me.getValue().getClass())){
+ sb.append(me.toString()).append("\n");
+ }
+ }
+ return sb.toString();
+}
+
+// Interruptible interface
+
+interrupt() {
+ print("Interrupt detected");
+}
+
+//print("Initialisation complete");
diff --git a/bin/examples/CSVSample.jmx b/bin/examples/CSVSample.jmx
new file mode 100644
index 00000000000..be50cb1a047
--- /dev/null
+++ b/bin/examples/CSVSample.jmx
@@ -0,0 +1,383 @@
+
+
+
+
+ Example of using CSV DataSet
+ false
+ false
+
+
+
+
+
+
+
+
+ false
+ -1
+
+ 1
+ 1
+ 1226457982000
+ 1226457982000
+ false
+ continue
+
+
+
+
+
+ Top level
+ ,
+
+ CSVSample_user.csv
+ false
+ false
+ All threads
+ true
+ USER,PASS
+
+
+
+
+
+
+ Sleep_Time
+ 100
+ =
+
+
+ Sleep_Mask
+ 0xFF
+ =
+
+
+ Label
+ Login as ${USER}
+ =
+
+
+ ResponseCode
+ 200
+ =
+
+
+ ResponseMessage
+ OK
+ =
+
+
+ Status
+ OK
+ =
+
+
+ SamplerData
+ Login as ${USER} with password ${PASS}
+ =
+
+
+ ResultData
+ Login OK for ${USER}
+ =
+
+
+
+ org.apache.jmeter.protocol.java.test.JavaTest
+
+
+
+
+ ACTION
+
+
+
+ none
+
+
+ false
+
+
+
+
+
+
+
+ Sleep_Time
+ 100
+ =
+
+
+ Sleep_Mask
+ 0xFF
+ =
+
+
+ Label
+ Action = ${ACTION}
+ =
+
+
+ ResponseCode
+ 200
+ =
+
+
+ ResponseMessage
+ OK
+ =
+
+
+ Status
+ OK
+ =
+
+
+ SamplerData
+
+ =
+
+
+ ResultData
+
+ =
+
+
+
+ org.apache.jmeter.protocol.java.test.JavaTest
+
+
+
+ ${__jexl("${ACTION}" != "<EOF>")}
+
+
+
+ CSVSample_actions.csv
+
+ ACTION
+ ,
+ true
+ false
+ false
+ All threads
+
+
+
+ "${ACTION}" != "<EOF>"
+ false
+
+
+
+
+
+
+ Sleep_Time
+ 100
+ =
+
+
+ Sleep_Mask
+ 0xFF
+ =
+
+
+ Label
+ Action ${ACTION}
+ =
+
+
+ ResponseCode
+ 200
+ =
+
+
+ ResponseMessage
+ OK
+ =
+
+
+ Status
+ OK
+ =
+
+
+ SamplerData
+ Perform Action ${ACTION}
+ =
+
+
+ ResultData
+ Succeeded ${ACTION}
+ =
+
+
+
+ org.apache.jmeter.protocol.java.test.JavaTest
+
+
+
+
+
+
+
+
+ Sleep_Time
+ 100
+ =
+
+
+ Sleep_Mask
+ 0xFF
+ =
+
+
+ Label
+
+ =
+
+
+ ResponseCode
+ 200
+ =
+
+
+ ResponseMessage
+ OK
+ =
+
+
+ Status
+ OK
+ =
+
+
+ SamplerData
+ Logout ${USER}
+ =
+
+
+ ResultData
+ Succeeded ${USER}
+ =
+
+
+
+ org.apache.jmeter.protocol.java.test.JavaTest
+
+
+
+
+
+
+ Sleep_Time
+ 100
+ =
+
+
+ Sleep_Mask
+ 0xFF
+ =
+
+
+ Label
+ Action = ${ACTION}
+ =
+
+
+ ResponseCode
+ 200
+ =
+
+
+ ResponseMessage
+ OK
+ =
+
+
+ Status
+ OK
+ =
+
+
+ SamplerData
+
+ =
+
+
+ ResultData
+
+ =
+
+
+
+ org.apache.jmeter.protocol.java.test.JavaTest
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ false
+ 0
+ true
+
+
+ ~/CSVSample.jtl
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ false
+ 0
+ true
+
+
+
+
+
+
+
+
diff --git a/bin/examples/CSVSample_actions.csv b/bin/examples/CSVSample_actions.csv
new file mode 100644
index 00000000000..27a7ea60561
--- /dev/null
+++ b/bin/examples/CSVSample_actions.csv
@@ -0,0 +1,4 @@
+a
+b
+c
+d
\ No newline at end of file
diff --git a/bin/examples/CSVSample_user.csv b/bin/examples/CSVSample_user.csv
new file mode 100644
index 00000000000..2269e3c1756
--- /dev/null
+++ b/bin/examples/CSVSample_user.csv
@@ -0,0 +1,2 @@
+u1,p1
+u2,p2
\ No newline at end of file
diff --git a/bin/examples/PerformanceTestPlanMemoryThread.jmx b/bin/examples/PerformanceTestPlanMemoryThread.jmx
new file mode 100644
index 00000000000..ad0fb9d51ae
--- /dev/null
+++ b/bin/examples/PerformanceTestPlanMemoryThread.jmx
@@ -0,0 +1,446 @@
+
+
+
+
+ Requires memory.jsp
+ false
+ false
+
+
+
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 30
+ 1324216714000
+ 1324216714000
+ false
+ 800
+ 1
+
+
+
+
+
+ Accept-Language
+ fr-fr
+
+
+ Accept
+ text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+
+
+ User-Agent
+ Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0.1) Gecko/20100101 Firefox/8.0.1
+
+
+ Referer
+ http://localhost:8080/examples/servlets/index.html
+
+
+ DNT
+ 1
+
+
+ Accept-Encoding
+ gzip, deflate
+
+
+ Accept-Charset
+ ISO-8859-1,utf-8;q=0.7,*;q=0.7
+
+
+
+
+
+
+
+ host
+ localhost
+ =
+
+
+
+
+
+
+
+
+ ${host}
+ 8080
+
+
+
+
+
+ HttpClient4
+ 4
+
+
+
+
+ true
+ default
+
+
+
+ false
+
+
+
+ true
+ 60
+
+
+
+
+
+
+ false
+ 7000
+ =
+ true
+ size
+
+
+
+
+
+
+
+ http
+
+ /examples/jsp/memory.jsp
+ GET
+ true
+ false
+ true
+ false
+ false
+
+
+
+
+ false
+ text1
+ b>(.+?)</b
+ $1$
+ NV
+ 0
+
+
+
+ false
+ text2
+ li>(.+?)</li
+ $1$
+ NV
+ 0
+
+
+
+ false
+ text3
+ u>(.+?)</u
+ $1$
+ NV
+ 0
+
+
+
+
+ 200
+
+ Assertion.response_code
+ false
+ 8
+
+
+
+
+ abcdefghijklmno
+
+ Assertion.response_data
+ false
+ 16
+
+
+
+
+ false
+ true
+ false
+
+
+
+
+
+
+ false
+ 5000
+ =
+ true
+ size
+
+
+
+
+
+
+
+ http
+
+ /examples/jsp/memory.jsp
+ GET
+ true
+ false
+ true
+ false
+ false
+
+
+
+
+
+
+ Accept-Language
+ fr-fr
+
+
+ Accept
+ text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+
+
+ User-Agent
+ Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0.1) Gecko/20100101 Firefox/8.0.1
+
+
+ Referer
+ http://localhost:8080/examples/servlets/index.html
+
+
+ DNT
+ 1
+
+
+ Accept-Encoding
+ gzip, deflate
+
+
+ Accept-Charset
+ ISO-8859-1,utf-8;q=0.7,*;q=0.7
+
+
+
+
+
+ false
+ text1
+ b>(.+?)</b
+ $1$
+ NV
+ 0
+
+
+
+ false
+ text2
+ li>(.+?)</li
+ $1$
+ NV
+ 0
+
+
+
+ false
+ text3
+ u>(.+?)</u
+ $1$
+ NV
+ 0
+
+
+
+
+ 200
+
+ Assertion.response_code
+ false
+ 8
+
+
+
+
+ abcdefghijklmno
+
+ Assertion.response_data
+ false
+ 16
+
+
+
+
+ 3000
+
+
+
+ false
+ true
+ false
+
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ false
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ false
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ false
+ true
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ 0
+ true
+ true
+ true
+ true
+
+
+ /data/jmeter/BUG_51512/2.6/results.csv
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ false
+ true
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
diff --git a/bin/examples/jsp/memory.jsp b/bin/examples/jsp/memory.jsp
new file mode 100644
index 00000000000..7bf6c6bb18e
--- /dev/null
+++ b/bin/examples/jsp/memory.jsp
@@ -0,0 +1,35 @@
+<%@ page session="false" contentType="text/html" buffer="8kb" %>
+
+
+
+<%
+}
+%>
+
+
\ No newline at end of file
diff --git a/bin/hc.parameters b/bin/hc.parameters
new file mode 100644
index 00000000000..fbc7d357a33
--- /dev/null
+++ b/bin/hc.parameters
@@ -0,0 +1,46 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Properties file used to define additional default Apache HttpClient parameters
+#
+#
+# This file is enabled by setting the JMeter property: hc.parameters.file
+# entries are of the form:
+#
+# property=value (for strings)
+# property$Type=value (for other types)
+#
+# where Type can be:
+# Integer
+# Long
+# Boolean
+# HttpVersion
+#
+# N.B. Other types are not yet implemented
+#
+
+# Examples:
+
+#http.protocol.version$HttpVersion=1.0
+
+#http.protocol.element-charset=ISO-8859-1
+
+#http.socket.timeout$Integer=10000
+
+#http.protocol.reject-relative-redirect$Boolean=true
+
+# Default value since JMeter 2.11,
+# also uncomment hc.parameters.file=hc.parameters to enable this check:
+#http.connection.stalecheck$Boolean=false
\ No newline at end of file
diff --git a/bin/heapdump.cmd b/bin/heapdump.cmd
new file mode 100644
index 00000000000..5e504e02324
--- /dev/null
+++ b/bin/heapdump.cmd
@@ -0,0 +1,23 @@
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem Ask the JMeter client to perform a HeapDump
+
+rem P1 = command port for JMeter instance (defaults to 4445)
+
+java -cp %~dp0ApacheJMeter.jar org.apache.jmeter.util.ShutdownClient HeapDump %*
+pause
\ No newline at end of file
diff --git a/bin/heapdump.sh b/bin/heapdump.sh
new file mode 100755
index 00000000000..941c9c4201a
--- /dev/null
+++ b/bin/heapdump.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+# Ask the JMeter client to perform a HeapDump
+
+# P1 = command port for JMeter instance (defaults to 4445)
+
+DIRNAME=`dirname $0`
+
+java -cp ${DIRNAME}/ApacheJMeter.jar org.apache.jmeter.util.ShutdownClient HeapDump "$@"
diff --git a/bin/httpclient.parameters b/bin/httpclient.parameters
new file mode 100644
index 00000000000..e269b9fca62
--- /dev/null
+++ b/bin/httpclient.parameters
@@ -0,0 +1,45 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Properties file used to define additional default Commons HttpClient parameters
+#
+# See: http://hc.apache.org/httpclient-3.x/preference-api.html
+#
+# This file is enabled by setting the JMeter property: httpclient.parameters.file
+# entries are of the form:
+#
+# property=value (for strings)
+# property$Type=value (for other types)
+#
+# where Type can be:
+# Integer
+# Long
+# Boolean
+# HttpVersion
+#
+# N.B. Other types are not yet implemented, so not all parameters are supported
+#
+
+# Examples:
+
+#http.protocol.version$HttpVersion=1.0
+
+#http.protocol.element-charset=ISO-8859-1
+
+#http.socket.timeout$Integer=10000
+
+#http.protocol.reject-relative-redirect$Boolean=true
+
+#http.authentication.preemptive$Boolean=true
\ No newline at end of file
diff --git a/bin/jaas.conf b/bin/jaas.conf
new file mode 100644
index 00000000000..11bc75e3654
--- /dev/null
+++ b/bin/jaas.conf
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Sample file, you need to edit for your configuration
+ * see http://docs.oracle.com/javase/6/docs/technotes/guides/security/jgss/lab/part6.html#Kerberos_5_Configuration
+ * see http://docs.oracle.com/javase/7/docs/technotes/guides/security/jgss/tutorials/KerberosReq.html
+ * see http://docs.oracle.com/javase/7/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html
+ */
+
+JMeter {
+ com.sun.security.auth.module.Krb5LoginModule required
+ doNotPrompt=false
+ useKeyTab=false
+ storeKey=false;
+};
\ No newline at end of file
diff --git a/bin/jmeter b/bin/jmeter
index a5539866349..8a2dd343de1 100755
--- a/bin/jmeter
+++ b/bin/jmeter
@@ -1,3 +1,136 @@
-#!/bin/sh
+#! /bin/sh
-javaw -classpath $CLASSPATH;Apache-JMeter.jar org.apache.jmeter.JMeter
\ No newline at end of file
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+## ==============================================
+## Environment variables:
+## JVM_ARGS - optional java args, e.g. -Dprop=val
+##
+## e.g.
+## JVM_ARGS="-Xms512m -Xmx512m" jmeter etc.
+##
+## ==============================================
+
+# Minimal version to run JMeter
+MINIMAL_VERSION=1.6.0
+
+# Check if Java is present and the minimal version requierement
+_java=`type java | awk '{ print $ NF }'`
+CURRENT_VERSION=`"$_java" -version 2>&1 | awk -F'"' '/version/ {print $2}'`
+minimal_version=`echo $MINIMAL_VERSION | awk -F'.' '{ print $2 }'`
+current_version=`echo $CURRENT_VERSION | awk -F'.' '{ print $2 }'`
+if [ $current_version ]; then
+ if [ $current_version -lt $minimal_version ]; then
+ echo "Error: Java version is too low to run JMeter. Needs at least Java >= ${MINIMAL_VERSION}."
+ exit 1
+ fi
+ else
+ echo "Not able to find Java executable or version. Please check your Java installation."
+ exit 1
+fi
+
+JMETER_OPTS=""
+case `uname` in
+ Darwin*)
+ # Add Mac-specific property - should be ignored elsewhere (Bug 47064)
+ JMETER_OPTS="-Xdock:name=JMeter -Xdock:icon="`dirname $0`/../docs/images/logo.jpg" -Dapple.laf.useScreenMenuBar=true -Dapple.eawt.quitStrategy=CLOSE_ALL_WINDOWS"
+ ;;
+esac
+
+
+# resolve links - $0 may be a softlink (code as used by Tomcat)
+# N.B. readlink would be a lot simpler but is not supported on Solaris
+PRG="$0"
+
+while [ -h "$PRG" ]; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`/"$link"
+ fi
+done
+
+PRGDIR=`dirname "$PRG"`
+
+# The following should be reasonably good values for most tests running
+# on Sun JVMs. Following is the analysis on which it is based. If it's total
+# gibberish to you, please study my article at
+# http://www.atg.com/portal/myatg/developer?paf_dm=full&paf_gear_id=1100010&detailArticle=true&id=9606
+#
+# JMeter objects can generally be grouped into three life-length groups:
+#
+# - Per-sample objects (results, DOMs,...). An awful lot of those.
+# Life length of milliseconds to a few seconds.
+#
+# - Per-run objects (threads, listener data structures,...). Not that many
+# of those unless we use the table or tree listeners on heavy runs.
+# Life length of minutes to several hours, from creation to start of next run.
+#
+# - Per-work-session objects (test plans, GUIs,...).
+# Life length: for the life of the JVM.
+
+# This is the base heap size -- you may increase or decrease it to fit your
+# system's memory availablity:
+HEAP="-Xms512m -Xmx512m"
+
+# There's an awful lot of per-sample objects allocated during test run, so we
+# need a large eden to avoid too frequent scavenges -- you'll need to tune this
+# down proportionally if you modify the HEAP values above, below example is fine for 512m of Heap:
+# NEW="-XX:NewSize=128m -XX:MaxNewSize=128m"
+
+# This ratio and target have been proven OK in tests with a specially high
+# amount of per-sample objects (the HtmlParserHTMLParser tests):
+# SURVIVOR="-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50"
+
+# Think about it: trying to keep per-run objects in tenuring definitely
+# represents a cost, but where's the benefit? They won't disappear before
+# the test is over, and at that point we will no longer care about performance.
+#
+# So we will have JMeter do an explicit Full GC before starting a test run,
+# but then we won't make any effort (or spend any CPU) to keep objects
+# in tenuring longer than the life of per-sample objects -- which is hopefully
+# shorter than the period between two scavenges):
+#
+TENURING="-XX:MaxTenuringThreshold=2"
+
+# This evacuation ratio is OK (see the comments for SURVIVOR) during test
+# runs -- not so sure about operations that bring a lot of long-lived information into
+# memory in a short period of time, such as loading tests or listener data files.
+# Increase it if you experience OutOfMemory problems during those operations
+# without having gone through a lot of Full GC-ing just before the OOM:
+# EVACUATION="-XX:MaxLiveObjectEvacuationRatio=20%"
+
+# Java 8 remove Permanent generation, don't settings the PermSize
+if [ $current_version -lt "8" ]; then
+ # Increase MaxPermSize if you use a lot of Javascript in your Test Plan :
+ PERM="-XX:PermSize=64m -XX:MaxPermSize=128m"
+fi
+
+CLASS_UNLOAD="-XX:+CMSClassUnloadingEnabled"
+
+# Finally, some tracing to help in case things go astray:
+#DEBUG="-verbose:gc -XX:+PrintTenuringDistribution"
+
+# Always dump on OOM (does not cost anything unless triggered)
+DUMP="-XX:+HeapDumpOnOutOfMemoryError"
+
+SERVER="-server"
+
+ARGS="$SERVER $DUMP $HEAP $NEW $SURVIVOR $TENURING $EVACUATION $PERM $CLASS_UNLOAD"
+
+java $ARGS $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@"
diff --git a/bin/jmeter-n-r.cmd b/bin/jmeter-n-r.cmd
new file mode 100644
index 00000000000..2d41c927062
--- /dev/null
+++ b/bin/jmeter-n-r.cmd
@@ -0,0 +1,59 @@
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem ============================================
+rem Non-GUI version of JMETER.BAT (WinNT/2K only)
+rem
+rem Drop a JMX file on this batch script, and it
+rem will run it in non-GUI mode, with a log file
+rem formed from the input file name but with the
+rem extension .jtl
+rem
+rem Only the first parameter is used.
+rem Only works for Win2k.
+rem
+rem ============================================
+
+if "%OS%"=="Windows_NT" goto WinNT
+echo "Sorry, this command file requires Windows NT/ 2000 / XP"
+pause
+goto END
+:WinNT
+
+rem Check file is supplied
+if a == a%1 goto winNT2
+
+rem Allow special name LAST
+if LAST == %1 goto winNT3
+
+rem Check it has extension .jmx
+if "%~x1" == ".jmx" goto winNT3
+:winNT2
+echo Please supply a script name with the extension .jmx
+pause
+goto END
+:winNT3
+
+rem Change to script directory
+pushd %~dp1
+
+rem use same directory to find jmeter script
+call "%~dp0"jmeter -n -t "%~nx1" -j "%~n1.log" -l "%~n1.jtl" -r %2 %3 %4 %5 %6 %7 %8 %9
+
+popd
+
+:END
\ No newline at end of file
diff --git a/bin/jmeter-n.cmd b/bin/jmeter-n.cmd
new file mode 100644
index 00000000000..86c1e88018e
--- /dev/null
+++ b/bin/jmeter-n.cmd
@@ -0,0 +1,59 @@
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem ============================================
+rem Non-GUI version of JMETER.BAT (WinNT/2K only)
+rem
+rem Drop a JMX file on this batch script, and it
+rem will run it in non-GUI mode, with a log file
+rem formed from the input file name but with the
+rem extension .jtl
+rem
+rem Only the first parameter is used.
+rem Only works for Win2k.
+rem
+rem ============================================
+
+if "%OS%"=="Windows_NT" goto WinNT
+echo "Sorry, this command file requires Windows NT/ 2000 / XP"
+pause
+goto END
+:WinNT
+
+rem Check file is supplied
+if a == a%1 goto winNT2
+
+rem Allow special name LAST
+if LAST == %1 goto winNT3
+
+rem Check it has extension .jmx
+if "%~x1" == ".jmx" goto winNT3
+:winNT2
+echo Please supply a script name with the extension .jmx
+pause
+goto END
+:winNT3
+
+rem Change to script directory
+pushd %~dp1
+
+rem use same directory to find jmeter script
+call "%~dp0"jmeter -n -t "%~nx1" -j "%~n1.log" -l "%~n1.jtl" %2 %3 %4 %5 %6 %7 %8 %9
+
+popd
+
+:END
\ No newline at end of file
diff --git a/bin/jmeter-report b/bin/jmeter-report
new file mode 100755
index 00000000000..e3ac32525b8
--- /dev/null
+++ b/bin/jmeter-report
@@ -0,0 +1,76 @@
+#! /bin/sh
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+# The following should be reasonably good values for most tests running
+# on Sun JVMs. Following is the analysis on which it is based. If it's total
+# gibberish to you, please study my article at
+# http://www.atg.com/portal/myatg/developer?paf_dm=full&paf_gear_id=1100010&detailArticle=true&id=9606
+#
+# JMeter objects can generally be grouped into three life-length groups:
+#
+# - Per-sample objects (results, DOMs,...). An awful lot of those.
+# Life length of milliseconds to a few seconds.
+#
+# - Per-run objects (threads, listener data structures,...). Not that many
+# of those unless we use the table or tree listeners on heavy runs.
+# Life length of minutes to several hours, from creation to start of next run.
+#
+# - Per-work-session objects (test plans, GUIs,...).
+# Life length: for the life of the JVM.
+
+# This is the base heap size -- you may increase or decrease it to fit your
+# system's memory availablity:
+HEAP="-Xms256m -Xmx256m"
+
+# There's an awful lot of per-sample objects allocated during test run, so we
+# need a large eden to avoid too frequent scavenges -- you'll need to tune this
+# down proportionally if you reduce the HEAP values above:
+NEW="-XX:NewSize=128m -XX:MaxNewSize=128m"
+
+# This ratio and target have been proven OK in tests with a specially high
+# amount of per-sample objects (the HtmlParserHTMLParser tests):
+# SURVIVOR="-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%"
+
+# Think about it: trying to keep per-run objects in tenuring definitely
+# represents a cost, but where's the benefit? They won't disappear before
+# the test is over, and at that point we will no longer care about performance.
+#
+# So we will have JMeter do an explicit Full GC before starting a test run,
+# but then we won't make any effort (or spend any CPU) to keep objects
+# in tenuring longer than the life of per-sample objects -- which is hopefully
+# shorter than the period between two scavenges):
+#
+TENURING="-XX:MaxTenuringThreshold=2"
+
+# This evacuation ratio is OK (see the comments for SURVIVOR) during test
+# runs -- no so sure about operations that bring a lot of long-lived information into
+# memory in a short period of time, such as loading tests or listener data files.
+# Increase it if you experience OutOfMemory problems during those operations
+# without having gone through a lot of Full GC-ing just before the OOM:
+# EVACUATION="-XX:MaxLiveObjectEvacuationRatio=20%"
+
+# PermSize is a scam. Leave it like this:
+PERM="-XX:PermSize=64m -XX:MaxPermSize=64m"
+
+# Finally, some tracing to help in case things go astray:
+DEBUG="-verbose:gc -XX:+PrintTenuringDistribution"
+
+SERVER="-server"
+
+ARGS="$SERVER $HEAP $NEW $SURVIVOR $TENURING $EVACUATION $PERM $DEBUG"
+
+java -server -jar `dirname $0`/ApacheJMeter.jar report "$@"
diff --git a/bin/jmeter-report.bat b/bin/jmeter-report.bat
new file mode 100644
index 00000000000..0a49c5dbf1a
--- /dev/null
+++ b/bin/jmeter-report.bat
@@ -0,0 +1,36 @@
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem set JAVA_HOME=c:/jdk1.5.0
+
+setlocal
+
+rem On NT/2K grab all arguments at once
+set JMETER_CMD_LINE_ARGS=%*
+
+rem See the unix startup file for the rationale of the following parameters,
+rem including some tuning recommendations
+set HEAP=-Xms256m -Xmx256m
+set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
+set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%
+set TENURING=-XX:MaxTenuringThreshold=2
+set PERM=-XX:PermSize=64m -XX:MaxPermSize=64m
+set DEBUG=-verbose:gc -XX:+PrintTenuringDistribution
+rem set ARGS=%HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DEBUG%
+set ARGS=-server -Xms128m -Xmx512m
+
+%JAVA_HOME%/bin/java %JVM_ARGS% %ARGS% -jar ApacheJMeter.jar report %JMETER_CMD_LINE_ARGS%
diff --git a/bin/jmeter-server b/bin/jmeter-server
new file mode 100755
index 00000000000..41588fe2148
--- /dev/null
+++ b/bin/jmeter-server
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+## To change the RMI/Server port:
+##
+## SERVER_PORT=1234 jmeter-server
+##
+
+DIRNAME=`dirname $0`
+
+# If the client fails with:
+# ERROR - jmeter.engine.ClientJMeterEngine: java.rmi.ConnectException: Connection refused to host: 127.0.0.1
+# then it may be due to the server host returning 127.0.0.1 as its address
+
+# One way to fix this is to define RMI_HOST_DEF below
+#RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
+
+${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1099} -s -j jmeter-server.log "$@"
diff --git a/bin/jmeter-server.bat b/bin/jmeter-server.bat
new file mode 100644
index 00000000000..a4e3379a4b6
--- /dev/null
+++ b/bin/jmeter-server.bat
@@ -0,0 +1,73 @@
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem ===============================================================
+rem Enviroment variables
+rem SERVER_PORT (optional) - define the rmiregistry and server port
+rem
+rem JVM_ARGS - Java flags - these are handled by jmeter.bat
+rem
+rem ===============================================================
+
+
+REM Protect environment against changes
+setlocal
+
+if exist jmeter-server.bat goto winNT1
+echo Changing to JMeter home directory
+cd /D %~dp0
+:winNT1
+
+if exist %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar goto setCP
+echo Could not find ApacheJmeter_core.jar ...
+REM Try to work out JMETER_HOME
+echo ... Trying JMETER_HOME=..
+set JMETER_HOME=..
+if exist %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar goto setCP
+echo ... trying JMETER_HOME=.
+set JMETER_HOME=.
+if exist %JMETER_HOME%\lib\ext\ApacheJMeter_core.jar goto setCP
+echo Cannot determine JMETER_HOME !
+goto exit
+
+:setCP
+echo Found ApacheJMeter_core.jar
+
+REM No longer need to create the rmiregistry as it is done by the server
+REM set CLASSPATH=%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-1.2.jar
+
+REM START rmiregistry %SERVER_PORT%
+REM
+
+rem On NT/2K grab all arguments at once
+set JMETER_CMD_LINE_ARGS=%*
+
+if not "%SERVER_PORT%" == "" goto port
+
+call jmeter -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS%
+goto end
+
+
+:port
+call jmeter -Dserver_port=%SERVER_PORT% -s -j jmeter-server.log %JMETER_CMD_LINE_ARGS%
+
+:end
+
+rem No longer needed, as server is started in-process
+rem taskkill /F /IM rmiregistry.exe
+
+:exit
\ No newline at end of file
diff --git a/bin/jmeter-t.cmd b/bin/jmeter-t.cmd
new file mode 100644
index 00000000000..3c0c8cbc914
--- /dev/null
+++ b/bin/jmeter-t.cmd
@@ -0,0 +1,58 @@
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem ============================================
+rem
+rem Drop a JMX file on this batch script, and it
+rem will load it in the GUI.
+rem
+rem Only the first parameter is used.
+rem Only works for Win2k.
+rem
+rem ============================================
+
+
+if "%OS%"=="Windows_NT" goto WinNT
+echo "Sorry, this command file requires Windows NT/ 2000 / XP"
+pause
+goto END
+:WinNT
+
+rem Check file is supplied
+if a == a%1 goto winNT2
+
+rem Allow special name LAST
+if LAST == %1 goto winNT3
+
+rem Check it has extension .jmx
+if "%~x1" == ".jmx" goto winNT3
+:winNT2
+echo Please supply a script name with the extension .jmx
+pause
+goto END
+:winNT3
+
+rem Start in directory with JMX file
+pushd %~dp1
+
+rem Prepend the directory in which this script resides in case not on path
+
+call "%~dp0"jmeter -j "%~n1.log" -t "%~nx1" %2 %3 %4 %5 %6 %7 %8 %9
+
+popd
+
+:END
\ No newline at end of file
diff --git a/bin/jmeter.bat b/bin/jmeter.bat
old mode 100755
new mode 100644
index bdc3c408f18..673c24afdc0
--- a/bin/jmeter.bat
+++ b/bin/jmeter.bat
@@ -1,3 +1,127 @@
-@echo off
-
-javaw -classpath %classpath%;Apache-JMeter.jar org.apache.jmeter.JMeter
\ No newline at end of file
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem =====================================================
+rem Environment variables that can be defined externally:
+rem
+rem JMETER_BIN - JMeter bin directory (must end in \)
+rem JM_LAUNCH - java.exe (default) or javaw.exe
+rem JVM_ARGS - additional java options, e.g. -Dprop=val
+rem JM_START - set this to "start" to launch JMeter in a separate window
+rem this is used by the jmeterw.cmd script.
+rem
+rem =====================================================
+
+setlocal
+
+rem Minimal version to run JMeter
+set MINIMAL_VERSION=1.6.0
+
+for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do (
+ rem @echo Debug Output: %%g
+ set JAVAVER=%%g
+)
+if not defined JAVAVER (
+ @echo Not able to find Java executable or version. Please check your Java installation.
+ set ERRORLEVEL=2
+ goto pause
+)
+set JAVAVER=%JAVAVER:"=%
+for /f "delims=. tokens=1-3" %%v in ("%JAVAVER%") do (
+ set current_minor=%%w
+)
+
+for /f "delims=. tokens=1-3" %%v in ("%MINIMAL_VERSION%") do (
+ set minimal_minor=%%w
+)
+
+if not defined current_minor (
+ @echo Not able to find Java executable or version. Please check your Java installation.
+ set ERRORLEVEL=2
+ goto pause
+)
+rem @echo Debug: CURRENT=%current_minor% - MINIMAL=%minimal_minor%
+if %current_minor% LSS %minimal_minor% (
+ @echo Error: Java version -- %JAVAVER% -- is too low to run JMeter. Needs a Java version greater than or equal to %MINIMAL_VERSION%
+ set ERRORLEVEL=3
+ goto pause
+)
+
+if .%JM_LAUNCH% == . set JM_LAUNCH=java.exe
+
+if exist jmeter.bat goto winNT1
+if .%JMETER_BIN% == . set JMETER_BIN=%~dp0
+
+:winNT1
+rem On NT/2K grab all arguments at once
+set JMETER_CMD_LINE_ARGS=%*
+
+rem The following link describes the -XX options:
+rem http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
+rem http://java.sun.com/developer/TechTips/2000/tt1222.html has some more descriptions
+rem Unfortunately TechTips no longer seem to be available
+
+rem See the unix startup file for the rationale of the following parameters,
+rem including some tuning recommendations
+set HEAP=-Xms512m -Xmx512m
+set NEW=-XX:NewSize=128m -XX:MaxNewSize=128m
+set SURVIVOR=-XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=50%
+set TENURING=-XX:MaxTenuringThreshold=2
+rem Java 8 remove Permanent generation, don't settings the PermSize
+if %current_minor% LEQ "8" (
+ rem Increase MaxPermSize if you use a lot of Javascript in your Test Plan :
+ set PERM=-XX:PermSize=64m -XX:MaxPermSize=128m
+)
+
+set CLASS_UNLOAD=-XX:+CMSClassUnloadingEnabled
+rem set DEBUG=-verbose:gc -XX:+PrintTenuringDistribution
+
+rem Always dump on OOM (does not cost anything unless triggered)
+set DUMP=-XX:+HeapDumpOnOutOfMemoryError
+
+rem Additional settings that might help improve GUI performance on some platforms
+rem See: http://java.sun.com/products/java-media/2D/perf_graphics.html
+
+set DDRAW=
+rem Setting this flag to true turns off DirectDraw usage, which sometimes helps to get rid of a lot of rendering problems on Win32.
+rem set DDRAW=%DDRAW% -Dsun.java2d.noddraw=true
+
+rem Setting this flag to false turns off DirectDraw offscreen surfaces acceleration by forcing all createVolatileImage calls to become createImage calls, and disables hidden acceleration performed on surfaces created with createImage .
+rem set DDRAW=%DDRAW% -Dsun.java2d.ddoffscreen=false
+
+rem Setting this flag to true enables hardware-accelerated scaling.
+rem set DDRAW=%DDRAW% -Dsun.java2d.ddscale=true
+
+rem Server mode
+rem Collect the settings defined above
+set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %CLASS_UNLOAD% %DDRAW%
+
+%JM_START% %JM_LAUNCH% %ARGS% %JVM_ARGS% -jar "%JMETER_BIN%ApacheJMeter.jar" %JMETER_CMD_LINE_ARGS%
+
+rem If the errorlevel is not zero, then display it and pause
+
+if NOT errorlevel 0 goto pause
+if errorlevel 1 goto pause
+
+goto end
+
+:pause
+echo errorlevel=%ERRORLEVEL%
+pause
+
+:end
+
diff --git a/bin/jmeter.properties b/bin/jmeter.properties
new file mode 100644
index 00000000000..33fcc3a97fa
--- /dev/null
+++ b/bin/jmeter.properties
@@ -0,0 +1,1141 @@
+################################################################################
+# Apache JMeter Property file
+################################################################################
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+################################################################################
+#
+# THIS FILE SHOULD NOT BE MODIFIED
+#
+# This avoids having to re-apply the modifications when upgrading JMeter
+# Instead only user.properties should be modified:
+# 1/ copy the property you want to modify to user.properties from jmeter.properties
+# 2/ Change its value there
+#
+################################################################################
+
+#Preferred GUI language. Comment out to use the JVM default locale's language.
+#language=en
+
+# Additional locale(s) to add to the displayed list.
+# The current default list is: en, fr, de, no, es, tr, ja, zh_CN, zh_TW, pl, pt_BR
+# [see JMeterMenuBar#makeLanguageMenu()]
+# The entries are a comma-separated list of language names
+#locales.add=zu
+
+# Netscape HTTP Cookie file
+cookies=cookies
+
+#---------------------------------------------------------------------------
+# File format configuration for JMX and JTL files
+#---------------------------------------------------------------------------
+
+# Properties:
+# file_format - affects both JMX and JTL files
+# file_format.testplan - affects JMX files only
+# file_format.testlog - affects JTL files only
+#
+# Possible values are:
+# 2.1 - initial format using XStream
+# 2.2 - updated format using XStream, with shorter names
+
+# N.B. format 2.0 (Avalon) is no longer supported
+
+#---------------------------------------------------------------------------
+# XML Parser
+#---------------------------------------------------------------------------
+
+# XML Reader(Parser) - Must implement SAX 2 specs
+xml.parser=org.apache.xerces.parsers.SAXParser
+
+# Path to a Properties file containing Namespace mapping in the form
+# prefix=Namespace
+# Example:
+# ns=http://biz.aol.com/schema/2006-12-18
+#xpath.namespace.config=
+
+#---------------------------------------------------------------------------
+# SSL configuration
+#---------------------------------------------------------------------------
+
+## SSL System properties are now in system.properties
+
+# JMeter no longer converts javax.xxx property entries in this file into System properties.
+# These must now be defined in the system.properties file or on the command-line.
+# The system.properties file gives more flexibility.
+
+# By default, SSL session contexts are now created per-thread, rather than being shared.
+# The original behaviour can be enabled by setting the JMeter property:
+#https.sessioncontext.shared=true
+
+# Default HTTPS protocol level:
+#https.default.protocol=TLS
+# This may need to be changed here (or in user.properties) to:
+#https.default.protocol=SSLv3
+
+# List of protocols to enable. You may have to select only a subset if you find issues with target server.
+# This is needed when server does not support Socket version negotiation, this can lead to:
+# javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
+# java.net.SocketException: Connection reset
+# see https://bz.apache.org/bugzilla/show_bug.cgi?id=54759
+#https.socket.protocols=SSLv2Hello SSLv3 TLSv1
+
+# Control if we allow reuse of cached SSL context between iterations
+# set the value to 'false' to reset the SSL context each iteration
+#https.use.cached.ssl.context=true
+
+# Start and end index to be used with keystores with many entries
+# The default is to use entry 0, i.e. the first
+#https.keyStoreStartIndex=0
+#https.keyStoreEndIndex=0
+
+#---------------------------------------------------------------------------
+# Look and Feel configuration
+#---------------------------------------------------------------------------
+
+#Classname of the Swing default UI
+#
+# The LAF classnames that are available are now displayed as ToolTip text
+# when hovering over the Options/Look and Feel selection list.
+#
+# You can either use a full class name, as shown above,
+# or one of the strings "System" or "CrossPlatform" which means
+# JMeter will use the corresponding string returned by UIManager.getLookAndFeelClassName()
+
+# LAF can be overridden by os.name (lowercased, spaces replaced by '_')
+# Sample os.name LAF:
+#jmeter.laf.windows_xp=javax.swing.plaf.metal.MetalLookAndFeel
+
+# Failing that, the OS family = os.name, but only up to first space:
+# Sample OS family LAF:
+#jmeter.laf.windows=com.sun.java.swing.plaf.windows.WindowsLookAndFeel
+
+# Mac apparently looks better with the System LAF
+jmeter.laf.mac=System
+
+# Failing that, the JMeter default laf can be defined:
+#jmeter.laf=System
+
+# If none of the above jmeter.laf properties are defined, JMeter uses the CrossPlatform LAF.
+# This is because the CrossPlatform LAF generally looks better than the System LAF.
+# See https://bz.apache.org/bugzilla/show_bug.cgi?id=52026 for details
+# N.B. the laf can be defined in user.properties.
+
+# LoggerPanel display
+# default to false
+#jmeter.loggerpanel.display=false
+
+# Enable LogViewer Panel to receive log event even if closed
+# Enabled since 2.12
+# Note this has some impact on performances, but as GUI mode must
+# not be used for Load Test it is acceptable
+#jmeter.loggerpanel.enable_when_closed=true
+
+# Error/Fatal Log count display
+# defaults to true
+#jmeter.errorscounter.display=true
+
+# Max characters kept in LoggerPanel, default to 80000 chars
+# O means no limit
+#jmeter.loggerpanel.maxlength=80000
+
+# Toolbar display
+# default:
+#jmeter.toolbar.display=true
+# Toolbar icon definitions
+#jmeter.toolbar.icons=org/apache/jmeter/images/toolbar/icons-toolbar.properties
+# Toolbar list
+#jmeter.toolbar=new,open,close,save,save_as_testplan,|,cut,copy,paste,|,expand,collapse,toggle,|,test_start,test_stop,test_shutdown,|,test_start_remote_all,test_stop_remote_all,test_shutdown_remote_all,|,test_clear,test_clear_all,|,search,search_reset,|,function_helper,help
+# Toolbar icons default size: 22x22. Available sizes are: 22x22, 32x32, 48x48
+#jmeter.toolbar.icons.size=22x22
+
+# Icon definitions
+# default:
+#jmeter.icons=org/apache/jmeter/images/icon.properties
+# alternate:
+#jmeter.icons=org/apache/jmeter/images/icon_1.properties
+
+#Components to not display in JMeter GUI (GUI class name or static label)
+# These elements are deprecated: HTML Parameter Mask,HTTP User Parameter Modifier, Webservice (SOAP) Request
+not_in_menu=org.apache.jmeter.protocol.http.modifier.gui.ParamModifierGui, HTTP User Parameter Modifier, org.apache.jmeter.protocol.http.control.gui.WebServiceSamplerGui
+
+# Number of items in undo history
+# Feature is disabled by default (0)
+# Set it to a number > 0 (25 can be a good default)
+# The bigger it is, the more it consumes memory
+#undo.history.size=0
+
+#---------------------------------------------------------------------------
+# Remote hosts and RMI configuration
+#---------------------------------------------------------------------------
+
+# Remote Hosts - comma delimited
+remote_hosts=127.0.0.1
+#remote_hosts=localhost:1099,localhost:2010
+
+# RMI port to be used by the server (must start rmiregistry with same port)
+#server_port=1099
+
+# To change the port to (say) 1234:
+# On the server(s)
+# - set server_port=1234
+# - start rmiregistry with port 1234
+# On Windows this can be done by:
+# SET SERVER_PORT=1234
+# JMETER-SERVER
+#
+# On Unix:
+# SERVER_PORT=1234 jmeter-server
+#
+# On the client:
+# - set remote_hosts=server:1234
+
+# Parameter that controls the RMI port used by the RemoteSampleListenerImpl (The Controler)
+# Default value is 0 which means port is randomly assigned
+# You may need to open Firewall port on the Controller machine
+#client.rmi.localport=0
+
+# When distributed test is starting, there may be several attempts to initialize
+# remote engines. By default, only single try is made. Increase following property
+# to make it retry for additional times
+#client.tries=1
+
+# If there is initialization retries, following property sets delay between attempts
+#client.retries_delay=5000
+
+# When all initialization tries was made, test will fail if some remote engines are failed
+# Set following property to true to ignore failed nodes and proceed with test
+#client.continue_on_fail=false
+
+# To change the default port (1099) used to access the server:
+#server.rmi.port=1234
+
+# To use a specific port for the JMeter server engine, define
+# the following property before starting the server:
+#server.rmi.localport=4000
+
+# From JMeter 2.3.1, the jmeter server creates the RMI registry as part of the server process.
+# To stop the server creating the RMI registry:
+#server.rmi.create=false
+
+# From JMeter 2.3.1, define the following property to cause JMeter to exit after the first test
+#server.exitaftertest=true
+
+# Prefix used by IncludeController when building file name
+#includecontroller.prefix=
+
+#---------------------------------------------------------------------------
+# Logging Configuration
+#---------------------------------------------------------------------------
+
+# Note: JMeter uses Avalon (Excalibur) LogKit
+
+# Logging Format
+# see http://excalibur.apache.org/apidocs/org/apache/log/format/PatternFormatter.html
+
+#
+# Default format:
+#log_format=%{time:yyyy/MM/dd HH:mm:ss} %5.5{priority} - %{category}: %{message} %{throwable}
+# \n is automatically added to the end of the string
+#
+# Predefined formats in the JMeter LoggingManager:
+#log_format_type=default
+#log_format_type=thread_prefix
+#log_format_type=thread_suffix
+# default is as above
+# thread_prefix adds the thread name as a prefix to the category
+# thread_suffix adds the thread name as a suffix to the category
+# Note that thread name is not included by default, as it requires extra processing.
+#
+# To change the logging format, define either log_format_type or log_format
+# If both are defined, the type takes precedence
+# Note that these properties cannot be defined using the -J or -D JMeter
+# command-line flags, as the format will have already been determined by then
+# However, they can be defined as JVM properties
+
+#Logging levels for the logging categories in JMeter. Correct values are FATAL_ERROR, ERROR, WARN, INFO, and DEBUG
+# To set the log level for a package or individual class, use:
+# log_level.[package_name].[classname]=[PRIORITY_LEVEL]
+# But omit "org.apache" from the package name. The classname is optional. Further examples below.
+
+log_level.jmeter=INFO
+log_level.jmeter.junit=DEBUG
+#log_level.jmeter.control=DEBUG
+#log_level.jmeter.testbeans=DEBUG
+#log_level.jmeter.engine=DEBUG
+#log_level.jmeter.threads=DEBUG
+#log_level.jmeter.gui=WARN
+#log_level.jmeter.testelement=DEBUG
+#log_level.jmeter.util=WARN
+#log_level.jmeter.protocol.http=DEBUG
+# For CookieManager, AuthManager etc:
+#log_level.jmeter.protocol.http.control=DEBUG
+#log_level.jmeter.protocol.ftp=WARN
+#log_level.jmeter.protocol.jdbc=DEBUG
+#log_level.jmeter.protocol.java=WARN
+#log_level.jmeter.testelements.property=DEBUG
+log_level.jorphan=INFO
+
+
+#Log file for log messages.
+# You can specify a different log file for different categories via:
+# log_file.[category]=[filename]
+# category is equivalent to the package/class names described above
+
+# Combined log file (for jmeter and jorphan)
+#log_file=jmeter.log
+# To redirect logging to standard output, try the following:
+# (it will probably report an error, but output will be to stdout)
+#log_file=
+
+# Or define separate logs if required:
+#log_file.jorphan=jorphan.log
+#log_file.jmeter=jmeter.log
+
+# If the filename contains paired single-quotes, then the name is processed
+# as a SimpleDateFormat format applied to the current date, for example:
+#log_file='jmeter_'yyyyMMddHHmmss'.tmp'
+
+# N.B. When JMeter starts, it sets the system property:
+# org.apache.commons.logging.Log
+# to
+# org.apache.commons.logging.impl.LogKitLogger
+# if not already set. This causes Apache and Commons HttpClient to use the same logging as JMeter
+
+# Further logging configuration
+# Excalibur logging provides the facility to configure logging using
+# configuration files written in XML. This allows for such features as
+# log file rotation which are not supported directly by JMeter.
+#
+# If such a file specified, it will be applied to the current logging
+# hierarchy when that has been created.
+#
+#log_config=logkit.xml
+
+#---------------------------------------------------------------------------
+# HTTP Java configuration
+#---------------------------------------------------------------------------
+
+# Number of connection retries performed by HTTP Java sampler before giving up
+#http.java.sampler.retries=10
+# 0 now means don't retry connection (in 2.3 and before it meant no tries at all!)
+
+#---------------------------------------------------------------------------
+# Commons HTTPClient configuration
+#---------------------------------------------------------------------------
+
+# define a properties file for overriding Commons HttpClient parameters
+# See: http://hc.apache.org/httpclient-3.x/preference-api.html
+# Uncomment this line if you put anything in httpclient.parameters file
+#httpclient.parameters.file=httpclient.parameters
+
+
+# define a properties file for overriding Apache HttpClient parameters
+# See: TBA
+# Uncomment this line if you put anything in hc.parameters file
+#hc.parameters.file=hc.parameters
+
+# Following properties apply to both Commons and Apache HttpClient
+
+# set the socket timeout (or use the parameter http.socket.timeout)
+# for AJP Sampler and HttpClient3 implementation.
+# Note for HttpClient3 implementation it is better to use GUI to set timeout
+# or use http.socket.timeout in httpclient.parameters
+# Value is in milliseconds
+#httpclient.timeout=0
+# 0 == no timeout
+
+# Set the http version (defaults to 1.1)
+#httpclient.version=1.0 (or use the parameter http.protocol.version)
+
+# Define characters per second > 0 to emulate slow connections
+#httpclient.socket.http.cps=0
+#httpclient.socket.https.cps=0
+
+#Enable loopback protocol
+#httpclient.loopback=true
+
+# Define the local host address to be used for multi-homed hosts
+#httpclient.localaddress=1.2.3.4
+
+# AuthManager Kerberos configuration
+# Name of application module used in jaas.conf
+#kerberos_jaas_application=JMeter
+
+# Should ports be stripped from urls before constructing SPNs
+# for spnego authentication
+#kerberos.spnego.strip_port=true
+
+# Sample logging levels for Commons HttpClient
+#
+# Commons HttpClient Logging information can be found at:
+# http://hc.apache.org/httpclient-3.x/logging.html
+
+# Note that full category names are used, i.e. must include the org.apache.
+# Info level produces no output:
+#log_level.org.apache.commons.httpclient=debug
+# Might be useful:
+#log_level.org.apache.commons.httpclient.Authenticator=trace
+
+# Show headers only
+#log_level.httpclient.wire.header=debug
+
+# Full wire debug produces a lot of output; consider using separate file:
+#log_level.httpclient.wire=debug
+#log_file.httpclient=httpclient.log
+
+
+# Apache Commons HttpClient logging examples
+#
+# Enable header wire + context logging - Best for Debugging
+#log_level.org.apache.http=DEBUG
+#log_level.org.apache.http.wire=ERROR
+
+# Enable full wire + context logging
+#log_level.org.apache.http=DEBUG
+
+# Enable context logging for connection management
+#log_level.org.apache.http.impl.conn=DEBUG
+
+# Enable context logging for connection management / request execution
+#log_level.org.apache.http.impl.conn=DEBUG
+#log_level.org.apache.http.impl.client=DEBUG
+#log_level.org.apache.http.client=DEBUG
+
+#---------------------------------------------------------------------------
+# Apache HttpComponents HTTPClient configuration (HTTPClient4)
+#---------------------------------------------------------------------------
+
+# Number of retries to attempt (default 0)
+#httpclient4.retrycount=0
+
+# Idle connection timeout (ms) to apply if the server does not send Keep-Alive headers
+#httpclient4.idletimeout=0
+# Note: this is currently an experimental fix
+
+#---------------------------------------------------------------------------
+# Apache HttpComponents HTTPClient configuration (HTTPClient 3.1)
+#---------------------------------------------------------------------------
+
+# Number of retries to attempt (default 0)
+#httpclient3.retrycount=0
+
+#---------------------------------------------------------------------------
+# HTTP Cache Manager configuration
+#---------------------------------------------------------------------------
+#
+# Space or comma separated list of methods that can be cached
+#cacheable_methods=GET
+# N.B. This property is currently a temporary solution for Bug 56162
+
+# Since 2.12, JMeter does not create anymore a Sample Result with 204 response
+# code for a resource found in cache which is inline with what browser do.
+#cache_manager.cached_resource_mode=RETURN_NO_SAMPLE
+
+# You can choose between 3 modes:
+# RETURN_NO_SAMPLE (default)
+# RETURN_200_CACHE
+# RETURN_CUSTOM_STATUS
+
+# Those mode have the following behaviours:
+# RETURN_NO_SAMPLE : this mode returns no Sample Result, it has no additional configuration
+# RETURN_200_CACHE : this mode will return Sample Result with response code to 200 and response message to "(ex cache)", you can modify response message by setting
+# RETURN_200_CACHE.message=(ex cache)
+# RETURN_CUSTOM_STATUS : This mode lets you select what response code and message you want to return, if you use this mode you need to set those properties
+# RETURN_CUSTOM_STATUS.code=
+# RETURN_CUSTOM_STATUS.message=
+
+#---------------------------------------------------------------------------
+# Results file configuration
+#---------------------------------------------------------------------------
+
+# This section helps determine how result data will be saved.
+# The commented out values are the defaults.
+
+# legitimate values: xml, csv, db. Only xml and csv are currently supported.
+#jmeter.save.saveservice.output_format=csv
+
+
+# true when field should be saved; false otherwise
+
+# assertion_results_failure_message only affects CSV output
+#jmeter.save.saveservice.assertion_results_failure_message=false
+#
+# legitimate values: none, first, all
+#jmeter.save.saveservice.assertion_results=none
+#
+#jmeter.save.saveservice.data_type=true
+#jmeter.save.saveservice.label=true
+#jmeter.save.saveservice.response_code=true
+# response_data is not currently supported for CSV output
+#jmeter.save.saveservice.response_data=false
+# Save ResponseData for failed samples
+#jmeter.save.saveservice.response_data.on_error=false
+#jmeter.save.saveservice.response_message=true
+#jmeter.save.saveservice.successful=true
+#jmeter.save.saveservice.thread_name=true
+#jmeter.save.saveservice.time=true
+#jmeter.save.saveservice.subresults=true
+#jmeter.save.saveservice.assertions=true
+#jmeter.save.saveservice.latency=true
+#jmeter.save.saveservice.connect_time=false
+#jmeter.save.saveservice.samplerData=false
+#jmeter.save.saveservice.responseHeaders=false
+#jmeter.save.saveservice.requestHeaders=false
+#jmeter.save.saveservice.encoding=false
+#jmeter.save.saveservice.bytes=true
+#jmeter.save.saveservice.url=false
+#jmeter.save.saveservice.filename=false
+#jmeter.save.saveservice.hostname=false
+#jmeter.save.saveservice.thread_counts=true
+#jmeter.save.saveservice.sample_count=false
+#jmeter.save.saveservice.idle_time=false
+
+# Timestamp format - this only affects CSV output files
+# legitimate values: none, ms, or a format suitable for SimpleDateFormat
+#jmeter.save.saveservice.timestamp_format=ms
+#jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS
+
+# For use with Comma-separated value (CSV) files or other formats
+# where the fields' values are separated by specified delimiters.
+# Default:
+#jmeter.save.saveservice.default_delimiter=,
+# For TAB, since JMeter 2.3 one can use:
+#jmeter.save.saveservice.default_delimiter=\t
+
+# Only applies to CSV format files:
+#jmeter.save.saveservice.print_field_names=false
+
+# Optional list of JMeter variable names whose values are to be saved in the result data files.
+# Use commas to separate the names. For example:
+#sample_variables=SESSION_ID,REFERENCE
+# N.B. The current implementation saves the values in XML as attributes,
+# so the names must be valid XML names.
+# Versions of JMeter after 2.3.2 send the variable to all servers
+# to ensure that the correct data is available at the client.
+
+# Optional xml processing instruction for line 2 of the file:
+#jmeter.save.saveservice.xml_pi=
+
+# Prefix used to identify filenames that are relative to the current base
+#jmeter.save.saveservice.base_prefix=~/
+
+# AutoFlush on each line written in XML or CSV output
+# Setting this to true will result in less test results data loss in case of Crash
+# but with impact on performances, particularly for intensive tests (low or no pauses)
+# Since JMeter 2.10, this is false by default
+#jmeter.save.saveservice.autoflush=false
+
+#---------------------------------------------------------------------------
+# Settings that affect SampleResults
+#---------------------------------------------------------------------------
+
+# Save the start time stamp instead of the end
+# This also affects the timestamp stored in result files
+sampleresult.timestamp.start=true
+
+# Whether to use System.nanoTime() - otherwise only use System.currentTimeMillis()
+#sampleresult.useNanoTime=true
+
+# Use a background thread to calculate the nanoTime offset
+# Set this to <= 0 to disable the background thread
+#sampleresult.nanoThreadSleep=5000
+
+#---------------------------------------------------------------------------
+# Upgrade property
+#---------------------------------------------------------------------------
+
+# File that holds a record of name changes for backward compatibility issues
+upgrade_properties=/bin/upgrade.properties
+
+#---------------------------------------------------------------------------
+# JMeter Test Script recorder configuration
+#
+# N.B. The element was originally called the Proxy recorder, which is why the
+# properties have the prefix "proxy".
+#---------------------------------------------------------------------------
+
+# If the recorder detects a gap of at least 5s (default) between HTTP requests,
+# it assumes that the user has clicked a new URL
+#proxy.pause=5000
+
+# Add numeric prefix to Sampler names (default true)
+#proxy.number.requests=true
+
+# List of URL patterns that will be added to URL Patterns to exclude
+# Separate multiple lines with ;
+#proxy.excludes.suggested=.*\\.(bmp|css|js|gif|ico|jpe?g|png|swf|woff)
+
+# Change the default HTTP Sampler (currently HttpClient4)
+# Java:
+#jmeter.httpsampler=HTTPSampler
+#or
+#jmeter.httpsampler=Java
+#
+# Apache HTTPClient:
+#jmeter.httpsampler=HTTPSampler2
+#or
+#jmeter.httpsampler=HttpClient3.1
+#
+# HttpClient4.x
+#jmeter.httpsampler=HttpClient4
+
+# By default JMeter tries to be more lenient with RFC2616 redirects and allows
+# relative paths.
+# If you want to test strict conformance, set this value to true
+# When the property is true, JMeter follows http://tools.ietf.org/html/rfc3986#section-5.2
+#jmeter.httpclient.strict_rfc2616=false
+
+# Default content-type include filter to use
+#proxy.content_type_include=text/html|text/plain|text/xml
+# Default content-type exclude filter to use
+#proxy.content_type_exclude=image/.*|text/css|application/.*
+
+# Default headers to remove from Header Manager elements
+# (Cookie and Authorization are always removed)
+#proxy.headers.remove=If-Modified-Since,If-None-Match,Host
+
+# Binary content-type handling
+# These content-types will be handled by saving the request in a file:
+#proxy.binary.types=application/x-amf,application/x-java-serialized-object
+# The files will be saved in this directory:
+#proxy.binary.directory=user.dir
+# The files will be created with this file filesuffix:
+#proxy.binary.filesuffix=.binary
+
+#---------------------------------------------------------------------------
+# Test Script Recorder certificate configuration
+#---------------------------------------------------------------------------
+
+#proxy.cert.directory=
+#proxy.cert.file=proxyserver.jks
+#proxy.cert.type=JKS
+#proxy.cert.keystorepass=password
+#proxy.cert.keypassword=password
+#proxy.cert.factory=SunX509
+# define this property if you wish to use your own keystore
+#proxy.cert.alias=
+# The default validity for certificates created by JMeter
+#proxy.cert.validity=7
+# Use dynamic key generation (if supported by JMeter/JVM)
+# If false, will revert to using a single key with no certificate
+#proxy.cert.dynamic_keys=true
+
+#---------------------------------------------------------------------------
+# Test Script Recorder miscellaneous configuration
+#---------------------------------------------------------------------------
+
+# Whether to attempt disabling of samples that resulted from redirects
+# where the generated samples use auto-redirection
+#proxy.redirect.disabling=true
+
+# SSL configuration
+#proxy.ssl.protocol=TLS
+
+#---------------------------------------------------------------------------
+# JMeter Proxy configuration
+#---------------------------------------------------------------------------
+# use command-line flags for user-name and password
+#http.proxyDomain=NTLM domain, if required by HTTPClient sampler
+
+#---------------------------------------------------------------------------
+# HTTPSampleResponse Parser configuration
+#---------------------------------------------------------------------------
+
+# Space-separated list of parser groups
+HTTPResponse.parsers=htmlParser wmlParser
+# for each parser, there should be a parser.types and a parser.className property
+
+#---------------------------------------------------------------------------
+# HTML Parser configuration
+#---------------------------------------------------------------------------
+
+# Define the HTML parser to be used.
+# Default parser:
+# This new parser (since 2.10) should perform better than all others
+# see https://bz.apache.org/bugzilla/show_bug.cgi?id=55632
+#htmlParser.className=org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
+
+# Other parsers:
+# Default parser before 2.10
+#htmlParser.className=org.apache.jmeter.protocol.http.parser.HtmlParserHTMLParser
+#htmlParser.className=org.apache.jmeter.protocol.http.parser.JTidyHTMLParser
+# Note that Regexp extractor may detect references that have been commented out.
+# In many cases it will work OK, but you should be aware that it may generate
+# additional references.
+#htmlParser.className=org.apache.jmeter.protocol.http.parser.RegexpHTMLParser
+# This parser is based on JSoup, it should be the most accurate but less performant
+# than LagartoBasedHtmlParser
+#htmlParser.className=org.apache.jmeter.protocol.http.parser.JsoupBasedHtmlParser
+
+#Used by HTTPSamplerBase to associate htmlParser with content types below
+htmlParser.types=text/html application/xhtml+xml application/xml text/xml
+
+#---------------------------------------------------------------------------
+# WML Parser configuration
+#---------------------------------------------------------------------------
+
+wmlParser.className=org.apache.jmeter.protocol.http.parser.RegexpHTMLParser
+
+#Used by HTTPSamplerBase to associate wmlParser with content types below
+wmlParser.types=text/vnd.wap.wml
+
+#---------------------------------------------------------------------------
+# Remote batching configuration
+#---------------------------------------------------------------------------
+# How is Sample sender implementations configured:
+# - true (default) means client configuration will be used
+# - false means server configuration will be used
+#sample_sender_client_configured=true
+
+# Remote batching support
+# Since JMeter 2.9, default is MODE_STRIPPED_BATCH, which returns samples in
+# batch mode (every 100 samples or every minute by default)
+# Note also that MODE_STRIPPED_BATCH strips response data from SampleResult, so if you need it change to
+# another mode
+# Hold retains samples until end of test (may need lots of memory)
+# Batch returns samples in batches
+# Statistical returns sample summary statistics
+# hold_samples was originally defined as a separate property,
+# but can now also be defined using mode=Hold
+# mode can also be the class name of an implementation of org.apache.jmeter.samplers.SampleSender
+#mode=Standard
+#mode=Batch
+#mode=Hold
+#mode=Statistical
+#Set to true to key statistical samples on threadName rather than threadGroup
+#key_on_threadname=false
+#mode=Stripped
+#mode=StrippedBatch
+#mode=org.example.load.MySampleSender
+#
+#num_sample_threshold=100
+# Value is in milliseconds
+#time_threshold=60000
+#
+# Asynchronous sender; uses a queue and background worker process to return the samples
+#mode=Asynch
+# default queue size
+#asynch.batch.queue.size=100
+# Same as Asynch but strips response data from SampleResult
+#mode=StrippedAsynch
+#
+# DiskStore: as for Hold mode, but serialises the samples to disk, rather than saving in memory
+#mode=DiskStore
+# Same as DiskStore but strips response data from SampleResult
+#mode=StrippedDiskStore
+# Note: the mode is currently resolved on the client;
+# other properties (e.g. time_threshold) are resolved on the server.
+
+# To set the Monitor Health Visualiser buffer size, enter the desired value
+# monitor.buffer.size=800
+
+#---------------------------------------------------------------------------
+# JDBC Request configuration
+#---------------------------------------------------------------------------
+
+# Max number of PreparedStatements per Connection for PreparedStatement cache
+#jdbcsampler.maxopenpreparedstatements=100
+
+# String used to indicate a null value
+#jdbcsampler.nullmarker=]NULL[
+
+#---------------------------------------------------------------------------
+# OS Process Sampler configuration
+#---------------------------------------------------------------------------
+# Polling to see if process has finished its work, used when a timeout is configured on sampler
+#os_sampler.poll_for_timeout=100
+
+#---------------------------------------------------------------------------
+# TCP Sampler configuration
+#---------------------------------------------------------------------------
+
+# The default handler class
+#tcp.handler=TCPClientImpl
+#
+# eolByte = byte value for end of line
+# set this to a value outside the range -128 to +127 to skip eol checking
+#tcp.eolByte=1000
+#
+# TCP Charset, used by org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl
+# default to Platform defaults charset as returned by Charset.defaultCharset().name()
+#tcp.charset=
+#
+# status.prefix and suffix = strings that enclose the status response code
+#tcp.status.prefix=Status=
+#tcp.status.suffix=.
+#
+# status.properties = property file to convert codes to messages
+#tcp.status.properties=mytestfiles/tcpstatus.properties
+
+# The length prefix used by LengthPrefixedBinaryTCPClientImpl implementation
+# defaults to 2 bytes.
+#tcp.binarylength.prefix.length=2
+
+#---------------------------------------------------------------------------
+# Summariser - Generate Summary Results - configuration (mainly applies to non-GUI mode)
+#---------------------------------------------------------------------------
+#
+# Define the following property to automatically start a summariser with that name
+# (applies to non-GUI mode only)
+#summariser.name=summary
+#
+# interval between summaries (in seconds) default 30 seconds
+#summariser.interval=30
+#
+# Write messages to log file
+#summariser.log=true
+#
+# Write messages to System.out
+#summariser.out=true
+
+
+#---------------------------------------------------------------------------
+# Aggregate Report and Aggregate Graph - configuration
+#---------------------------------------------------------------------------
+#
+# Percentiles to display in reports
+# Can be float value between 0 and 100
+# First percentile to display, defaults to 90%
+#aggregate_rpt_pct1=90
+# Second percentile to display, defaults to 95%
+#aggregate_rpt_pct2=95
+# Second percentile to display, defaults to 99%
+#aggregate_rpt_pct3=99
+
+#---------------------------------------------------------------------------
+# Aggregate Report and Aggregate Graph - configuration
+#---------------------------------------------------------------------------
+#
+# Backend metrics sliding window size for Percentiles, Min, Max
+#backend_metrics_window=100
+
+#---------------------------------------------------------------------------
+# BeanShell configuration
+#---------------------------------------------------------------------------
+
+# BeanShell Server properties
+#
+# Define the port number as non-zero to start the http server on that port
+#beanshell.server.port=9000
+# The telnet server will be started on the next port
+
+#
+# Define the server initialisation file
+beanshell.server.file=../extras/startup.bsh
+
+#
+# Define a file to be processed at startup
+# This is processed using its own interpreter.
+#beanshell.init.file=
+
+#
+# Define the intialisation files for BeanShell Sampler, Function and other BeanShell elements
+# N.B. Beanshell test elements do not share interpreters.
+# Each element in each thread has its own interpreter.
+# This is retained between samples.
+#beanshell.sampler.init=BeanShellSampler.bshrc
+#beanshell.function.init=BeanShellFunction.bshrc
+#beanshell.assertion.init=BeanShellAssertion.bshrc
+#beanshell.listener.init=etc
+#beanshell.postprocessor.init=etc
+#beanshell.preprocessor.init=etc
+#beanshell.timer.init=etc
+
+# The file BeanShellListeners.bshrc contains sample definitions
+# of Test and Thread Listeners.
+
+#---------------------------------------------------------------------------
+# MailerModel configuration
+#---------------------------------------------------------------------------
+
+# Number of successful samples before a message is sent
+#mailer.successlimit=2
+#
+# Number of failed samples before a message is sent
+#mailer.failurelimit=2
+
+#---------------------------------------------------------------------------
+# CSVRead configuration
+#---------------------------------------------------------------------------
+
+# CSVRead delimiter setting (default ",")
+# Make sure that there are no trailing spaces or tabs after the delimiter
+# characters, or these will be included in the list of valid delimiters
+#csvread.delimiter=,
+#csvread.delimiter=;
+#csvread.delimiter=!
+#csvread.delimiter=~
+# The following line has a tab after the =
+#csvread.delimiter=
+
+#---------------------------------------------------------------------------
+# __time() function configuration
+#
+# The properties below can be used to redefine the default formats
+#---------------------------------------------------------------------------
+#time.YMD=yyyyMMdd
+#time.HMS=HHmmss
+#time.YMDHMS=yyyyMMdd-HHmmss
+#time.USER1=
+#time.USER2=
+
+#---------------------------------------------------------------------------
+# CSV DataSet configuration
+#---------------------------------------------------------------------------
+
+# String to return at EOF (if recycle not used)
+#csvdataset.eofstring=
+
+#---------------------------------------------------------------------------
+# LDAP Sampler configuration
+#---------------------------------------------------------------------------
+# Maximum number of search results returned by a search that will be sorted
+# to guarantee a stable ordering (if more results then this limit are retruned
+# then no sorting is done). Set to 0 to turn off all sorting, in which case
+# "Equals" response assertions will be very likely to fail against search results.
+#
+#ldapsampler.max_sorted_results=1000
+
+# Number of characters to log for each of three sections (starting matching section, diff section,
+# ending matching section where not all sections will appear for all diffs) diff display when an Equals
+# assertion fails. So a value of 100 means a maximum of 300 characters of diff text will be displayed
+# (+ a number of extra characters like "..." and "[[["/"]]]" which are used to decorate it).
+#assertion.equals_section_diff_len=100
+# test written out to log to signify start/end of diff delta
+#assertion.equals_diff_delta_start=[[[
+#assertion.equals_diff_delta_end=]]]
+
+#---------------------------------------------------------------------------
+# Miscellaneous configuration
+#---------------------------------------------------------------------------
+
+# If defined, then start the mirror server on the port
+#mirror.server.port=8081
+
+# ORO PatternCacheLRU size
+#oro.patterncache.size=1000
+
+#TestBeanGui
+#
+#propertyEditorSearchPath=null
+
+# Turn expert mode on/off: expert mode will show expert-mode beans and properties
+#jmeter.expertMode=true
+
+# Maximum redirects to follow in a single sequence (default 5)
+#httpsampler.max_redirects=5
+# Maximum frame/iframe nesting depth (default 5)
+#httpsampler.max_frame_depth=5
+# Maximum await termination timeout (secs) when concurrent download embedded resources (default 60)
+#httpsampler.await_termination_timeout=60
+# Revert to BUG 51939 behaviour (no separate container for embedded resources) by setting the following false:
+#httpsampler.separate.container=true
+
+# If embedded resources download fails due to missing resources or other reasons, if this property is true
+# Parent sample will not be marked as failed
+#httpsampler.ignore_failed_embedded_resources=false
+
+# The encoding to be used if none is provided (default ISO-8859-1)
+#sampleresult.default.encoding=ISO-8859-1
+
+# Network response size calculation method
+# Use real size: number of bytes for response body return by webserver
+# (i.e. the network bytes received for response)
+# if set to false, the (uncompressed) response data size will used (default before 2.5)
+# Include headers: add the headers size in real size
+#sampleresult.getbytes.body_real_size=true
+#sampleresult.getbytes.headers_size=true
+
+# CookieManager behaviour - should cookies with null/empty values be deleted?
+# Default is true. Use false to revert to original behaviour
+#CookieManager.delete_null_cookies=true
+
+# CookieManager behaviour - should variable cookies be allowed?
+# Default is true. Use false to revert to original behaviour
+#CookieManager.allow_variable_cookies=true
+
+# CookieManager behaviour - should Cookies be stored as variables?
+# Default is false
+#CookieManager.save.cookies=false
+
+# CookieManager behaviour - prefix to add to cookie name before storing it as a variable
+# Default is COOKIE_; to remove the prefix, define it as one or more spaces
+#CookieManager.name.prefix=
+
+# CookieManager behaviour - check received cookies are valid before storing them?
+# Default is true. Use false to revert to previous behaviour
+#CookieManager.check.cookies=true
+
+# (2.0.3) JMeterThread behaviour has been changed to set the started flag before
+# the controllers are initialised. This is so controllers can access variables earlier.
+# In case this causes problems, the previous behaviour can be restored by uncommenting
+# the following line.
+#jmeterthread.startearlier=false
+
+# (2.2.1) JMeterThread behaviour has changed so that PostProcessors are run in forward order
+# (as they appear in the test plan) rather than reverse order as previously.
+# Uncomment the following line to revert to the original behaviour
+#jmeterthread.reversePostProcessors=true
+
+# (2.2) StandardJMeterEngine behaviour has been changed to notify the listeners after
+# the running version is enabled. This is so they can access variables.
+# In case this causes problems, the previous behaviour can be restored by uncommenting
+# the following line.
+#jmeterengine.startlistenerslater=false
+
+# Number of milliseconds to wait for a thread to stop
+#jmeterengine.threadstop.wait=5000
+
+#Whether to invoke System.exit(0) in server exit code after stopping RMI
+#jmeterengine.remote.system.exit=false
+
+# Whether to call System.exit(1) on failure to stop threads in non-GUI mode.
+# This only takes effect if the test was explictly requested to stop.
+# If this is disabled, it may be necessary to kill the JVM externally
+#jmeterengine.stopfail.system.exit=true
+
+# Whether to force call System.exit(0) at end of test in non-GUI mode, even if
+# there were no failures and the test was not explicitly asked to stop.
+# Without this, the JVM may never exit if there are other threads spawned by
+# the test which never exit.
+#jmeterengine.force.system.exit=false
+
+# How long to pause (in ms) in the daemon thread before reporting that the JVM has failed to exit.
+# If the value is <= 0, the JMeter does not start the daemon thread
+#jmeter.exit.check.pause=2000
+
+# If running non-GUI, then JMeter listens on the following port for a shutdown message.
+# To disable, set the port to 1000 or less.
+#jmeterengine.nongui.port=4445
+#
+# If the initial port is busy, keep trying until this port is reached
+# (to disable searching, set the value less than or equal to the .port property)
+#jmeterengine.nongui.maxport=4455
+
+# How often to check for shutdown during ramp-up (milliseconds)
+#jmeterthread.rampup.granularity=1000
+
+#Should JMeter expand the tree when loading a test plan?
+# default value is false since JMeter 2.7
+#onload.expandtree=false
+
+#JSyntaxTextArea configuration
+#jsyntaxtextarea.wrapstyleword=true
+#jsyntaxtextarea.linewrap=true
+#jsyntaxtextarea.codefolding=true
+# Set 0 to disable undo feature in JSyntaxTextArea
+#jsyntaxtextarea.maxundos=50
+
+# Set this to false to disable the use of JSyntaxTextArea for the Console Logger panel
+#loggerpanel.usejsyntaxtext=true
+
+# Maximum size of HTML page that can be displayed; default=200 * 1024
+# Set to 0 to disable the size check and display the whole response
+#view.results.tree.max_size=204800
+
+# Order of Renderers in View Results Tree
+# Note full class names should be used for non jmeter core renderers
+# For JMeter core renderers, class names start with . and are automatically
+# prefixed with org.apache.jmeter.visualizers
+view.results.tree.renderers_order=.RenderAsText,.RenderAsRegexp,.RenderAsCssJQuery,.RenderAsXPath,.RenderAsHTML,.RenderAsHTMLWithEmbedded,.RenderAsDocument,.RenderAsJSON,.RenderAsXML
+
+# Maximum size of Document that can be parsed by Tika engine; defaut=10 * 1024 * 1024 (10MB)
+# Set to 0 to disable the size check
+#document.max_size=0
+
+#JMS options
+# Enable the following property to stop JMS Point-to-Point Sampler from using
+# the properties java.naming.security.[principal|credentials] when creating the queue connection
+#JMSSampler.useSecurity.properties=false
+
+# Set the following value to true in order to skip the delete confirmation dialogue
+#confirm.delete.skip=false
+
+# Used by Webservice Sampler (SOAP)
+# Size of Document Cache
+#soap.document_cache=50
+
+# Used by JSR223 elements
+# Size of compiled scripts cache
+#jsr223.compiled_scripts_cache_size=100
+
+#---------------------------------------------------------------------------
+# Classpath configuration
+#---------------------------------------------------------------------------
+
+# List of paths (separated by ;) to search for additional JMeter plugin classes,
+# for example new GUI elements and samplers.
+# A path item can either be a jar file or a directory.
+# Any jar file in such a directory will be automatically included,
+# jar files in sub directories are ignored.
+# The given value is in addition to any jars found in the lib/ext directory.
+# Do not use this for utility or plugin dependency jars.
+#search_paths=/app1/lib;/app2/lib
+
+# List of paths that JMeter will search for utility and plugin dependency classes.
+# Use your platform path separator to separate multiple paths.
+# A path item can either be a jar file or a directory.
+# Any jar file in such a directory will be automatically included,
+# jar files in sub directories are ignored.
+# The given value is in addition to any jars found in the lib directory.
+# All entries will be added to the class path of the system class loader
+# and also to the path of the JMeter internal loader.
+# Paths with spaces may cause problems for the JVM
+#user.classpath=../classes;../lib;../app1/jar1.jar;../app2/jar2.jar
+
+# List of paths (separated by ;) that JMeter will search for utility
+# and plugin dependency classes.
+# A path item can either be a jar file or a directory.
+# Any jar file in such a directory will be automatically included,
+# jar files in sub directories are ignored.
+# The given value is in addition to any jars found in the lib directory
+# or given by the user.classpath property.
+# All entries will be added to the path of the JMeter internal loader only.
+# For plugin dependencies using plugin_dependency_paths should be preferred over
+# user.classpath.
+#plugin_dependency_paths=../dependencies/lib;../app1/jar1.jar;../app2/jar2.jar
+
+# Classpath finder
+# ================
+# The classpath finder currently needs to load every single JMeter class to find
+# the classes it needs.
+# For non-GUI mode, it's only necessary to scan for Function classes, but all classes
+# are still loaded.
+# All current Function classes include ".function." in their name,
+# and none include ".gui." in the name, so the number of unwanted classes loaded can be
+# reduced by checking for these. However, if a valid function class name does not match
+# these restrictions, it will not be loaded. If problems are encountered, then comment
+# or change the following properties:
+classfinder.functions.contain=.functions.
+classfinder.functions.notContain=.gui.
+
+#---------------------------------------------------------------------------
+# Additional property files to load
+#---------------------------------------------------------------------------
+
+# Should JMeter automatically load additional JMeter properties?
+# File name to look for (comment to disable)
+user.properties=user.properties
+
+# Should JMeter automatically load additional system properties?
+# File name to look for (comment to disable)
+system.properties=system.properties
+
+# Comma separated list of files that contain reference to templates and their description
+# Path must be relative to jmeter root folder
+#template.files=/bin/templates/templates.xml
diff --git a/bin/jmeter.sh b/bin/jmeter.sh
new file mode 100755
index 00000000000..c60b1bdbd22
--- /dev/null
+++ b/bin/jmeter.sh
@@ -0,0 +1,73 @@
+#! /bin/sh
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+## Basic JMeter startup script for Un*x systems
+## See the "jmeter" script for details of options that can be used for Sun JVMs
+
+## ==============================================
+## Environment variables:
+## JVM_ARGS - optional java args, e.g. -Dprop=val
+##
+## e.g.
+## JVM_ARGS="-Xms512m -Xmx512m" jmeter.sh etc.
+##
+## ==============================================
+
+# Minimal version to run JMeter
+MINIMAL_VERSION=1.6.0
+
+# Check if Java is present and the minimal version requierement
+_java=`type java | awk '{ print $ NF }'`
+CURRENT_VERSION=`"$_java" -version 2>&1 | awk -F'"' '/version/ {print $2}'`
+minimal_version=`echo $MINIMAL_VERSION | awk -F'.' '{ print $2 }'`
+current_version=`echo $CURRENT_VERSION | awk -F'.' '{ print $2 }'`
+if [ $current_version ]; then
+ if [ $current_version -lt $minimal_version ]; then
+ echo "Error: Java version is too low to run JMeter. Needs at least Java >= ${MINIMAL_VERSION}."
+ exit 1
+ fi
+ else
+ echo "Not able to find Java executable or version. Please check your Java installation."
+ exit 1
+fi
+
+JMETER_OPTS=""
+case `uname` in
+ Darwin*)
+ # Add Mac-specific property - should be ignored elsewhere (Bug 47064)
+ JMETER_OPTS="-Xdock:name=JMeter -Xdock:icon="`dirname $0`/../docs/images/logo.jpg" -Dapple.laf.useScreenMenuBar=true -Dapple.eawt.quitStrategy=CLOSE_ALL_WINDOWS"
+ ;;
+esac
+
+
+# resolve links - $0 may be a softlink (code as used by Tomcat)
+# N.B. readlink would be a lot simpler but is not supported on Solaris
+PRG="$0"
+
+while [ -h "$PRG" ]; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`/"$link"
+ fi
+done
+
+PRGDIR=`dirname "$PRG"`
+
+java $JVM_ARGS $JMETER_OPTS -jar "$PRGDIR/ApacheJMeter.jar" "$@"
diff --git a/bin/jmeterw.cmd b/bin/jmeterw.cmd
new file mode 100644
index 00000000000..d9fae5614cf
--- /dev/null
+++ b/bin/jmeterw.cmd
@@ -0,0 +1,26 @@
+@echo off
+rem Run JMeter using javaw
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+set JM_START=start
+set JM_LAUNCH=javaw.exe
+
+rem Only works in Win2K
+call jmeter %*
+
+set JM_START=
+set JM_LAUNCH=
\ No newline at end of file
diff --git a/bin/krb5.conf b/bin/krb5.conf
new file mode 100644
index 00000000000..59f85907d99
--- /dev/null
+++ b/bin/krb5.conf
@@ -0,0 +1,34 @@
+; Licensed to the Apache Software Foundation (ASF) under one or more
+; contributor license agreements. See the NOTICE file distributed with
+; this work for additional information regarding copyright ownership.
+; The ASF licenses this file to You under the Apache License, Version 2.0
+; (the "License"); you may not use this file except in compliance with
+; the License. You may obtain a copy of the License at
+;
+; http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+
+; Sample file, you need to edit for your configuration
+; see http://www.fnal.gov/docs/strongauth/krb5conf.html
+; see http://web.mit.edu/kerberos/krb5-1.3/krb5-1.3.1/doc/krb5-admin.html
+; see http://linux.die.net/man/5/krb5.conf
+
+[libdefaults]
+default_realm = EXAMPLE.COM
+default_tkt_enctypes = aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
+default_tgs_enctypes = aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
+forwardable=true
+
+[realms]
+EXAMPLE.COM = {
+ kdc = kerberos.example.com:60088
+}
+
+[domain_realm]
+example.com= EXAMPLE.COM
+.example.com= EXAMPLE.COM
diff --git a/bin/log4j.conf b/bin/log4j.conf
new file mode 100644
index 00000000000..8dac9515db8
--- /dev/null
+++ b/bin/log4j.conf
@@ -0,0 +1,44 @@
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+############################### IMPORTANT NOTE ##############################
+# JMeter does not use log4j as logging system
+# This configuration will only be used by libraries that do use log4j
+# or your custom code if it uses it
+# For logging configuration of JMeter, it needs to be done in user.properties
+
+# Set appender specific options
+
+log4j.appender.Root_Appender=org.apache.log4j.RollingFileAppender
+log4j.appender.Root_Appender.File=root.log
+log4j.appender.Root_Appender.Append=true
+log4j.appender.Root_Appender.MaxBackupIndex=0
+log4j.appender.Root_Appender.layout=org.apache.log4j.PatternLayout
+log4j.appender.Root_Appender.layout.ConversionPattern=%-5p %d{MM/dd, hh:mm:ss} %-20.30c %m%n
+
+log4j.appender.File_Appender=org.apache.log4j.RollingFileAppender
+log4j.appender.File_Appender.File=extra.log
+log4j.appender.File_Appender.Append=false
+log4j.appender.File_Appender.layout=org.apache.log4j.PatternLayout
+log4j.appender.File_Appender.layout.ConversionPattern=%r %d{MM/dd, hh:mm:ss} %-5p %-50.50c %m%n
+
+log4j.appender.SystemOut_Appender=org.apache.log4j.ConsoleAppender
+log4j.appender.SystemOut_Appender.layout=org.apache.log4j.SimpleLayout
+
+
+# Set the appenders for the categories
+log4j.rootCategory=INFO,Root_Appender
+#log4j.configDebug
\ No newline at end of file
diff --git a/bin/logkit.xml b/bin/logkit.xml
new file mode 100644
index 00000000000..16f35ffed4f
--- /dev/null
+++ b/bin/logkit.xml
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ format.log
+
+AT: %{time:yyyy/MM/dd HH:mm:ss} PRI: %5.5{priority} CAT: %{category} TEXT: %{message} EX: %{throwable}\n
+
+
+
+
+
+ false
+ prefix
+
+ 1000000
+
+
+
+
+
+
+ false
+ my_log
+
+ 1000000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bin/mirror-server b/bin/mirror-server
new file mode 100755
index 00000000000..1668267808c
--- /dev/null
+++ b/bin/mirror-server
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+exec $0.sh "$@"
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
diff --git a/bin/mirror-server.cmd b/bin/mirror-server.cmd
new file mode 100644
index 00000000000..0fae3277b1a
--- /dev/null
+++ b/bin/mirror-server.cmd
@@ -0,0 +1,30 @@
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem Run the JMeter mirror server in non-GUI mode
+rem P1 = port to use (default 8080)
+
+setlocal
+
+cd /D %~dp0
+
+set CP=..\lib\ext\ApacheJMeter_http.jar;..\lib\ext\ApacheJMeter_core.jar;..\lib\jorphan.jar
+set CP=%CP%;..\lib\logkit-2.0.jar;..\lib\avalon-framework-4.1.4.jar;..\lib\oro-2.0.8.jar
+
+java -cp %CP% org.apache.jmeter.protocol.http.control.HttpMirrorServer %1
+
+pause
diff --git a/bin/mirror-server.sh b/bin/mirror-server.sh
new file mode 100755
index 00000000000..d8b61f5c832
--- /dev/null
+++ b/bin/mirror-server.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+# Run the JMeter mirror server in non-GUI mode
+# P1 = port to use (default 8080)
+
+cd `dirname $0`
+
+CP=../lib/ext/ApacheJMeter_http.jar:../lib/ext/ApacheJMeter_core.jar:../lib/jorphan.jar
+CP=${CP}:../lib/logkit-2.0.jar:../lib/avalon-framework-4.1.4.jar:../lib/oro-2.0.8.jar
+
+java -cp $CP org.apache.jmeter.protocol.http.control.HttpMirrorServer $1
diff --git a/bin/saveservice.properties b/bin/saveservice.properties
new file mode 100644
index 00000000000..08da47e35ec
--- /dev/null
+++ b/bin/saveservice.properties
@@ -0,0 +1,381 @@
+#---------------------------------------------------------
+# SAVESERVICE PROPERTIES - JMETER INTERNAL USE ONLY
+#---------------------------------------------------------
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+# This file is used to define how XStream (de-)serializes classnames
+# in JMX test plan files.
+
+# FOR JMETER INTERNAL USE ONLY
+
+#---------------------------------------------------------
+
+# N.B. To ensure backward compatibility, please do NOT change or delete any entries
+
+# New entries can be added as necessary.
+#
+# Note that keys starting with an underscore are special,
+# and are not used as aliases.
+#
+# Please keep the entries in alphabetical order within the sections
+# to reduce the likelihood of duplicates
+#
+# version number of this file (automatically generated by SVN)
+_file_version=$Revision$
+#
+# Conversion version (for JMX output files)
+# Must be updated if the file has been changed since the previous release
+# Format is:
+# Save service version=JMeter version at which change occured
+# 1.7 = 2.1.1
+# 1.8 = 2.1.2
+# (Some version updates were missed here...)
+# 2.0 = 2.3.1
+# 2.1 = 2.3.2
+# (Some version updates were missed here...)
+# 2.2 = 2.6
+# 2.3 = 2.7
+# 2.4 = 2.9
+# 2.5 = 2.10
+# 2.6 = 2.11
+# 2.7 = 2.12
+# 2.8 = 2.13
+_version=2.8
+#
+#
+# Character set encoding used to read and write JMeter XML files and CSV results
+#
+_file_encoding=UTF-8
+#
+#---------------------------------------------------------
+#
+# The following properties are used to create aliases
+# [Must all start with capital letter]
+#
+AccessLogSampler=org.apache.jmeter.protocol.http.sampler.AccessLogSampler
+AjpSampler=org.apache.jmeter.protocol.http.sampler.AjpSampler
+AjpSamplerGui=org.apache.jmeter.protocol.http.control.gui.AjpSamplerGui
+AnchorModifier=org.apache.jmeter.protocol.http.modifier.AnchorModifier
+AnchorModifierGui=org.apache.jmeter.protocol.http.modifier.gui.AnchorModifierGui
+Argument=org.apache.jmeter.config.Argument
+Arguments=org.apache.jmeter.config.Arguments
+ArgumentsPanel=org.apache.jmeter.config.gui.ArgumentsPanel
+AssertionGui=org.apache.jmeter.assertions.gui.AssertionGui
+AssertionVisualizer=org.apache.jmeter.visualizers.AssertionVisualizer
+AuthManager=org.apache.jmeter.protocol.http.control.AuthManager
+Authorization=org.apache.jmeter.protocol.http.control.Authorization
+AuthPanel=org.apache.jmeter.protocol.http.gui.AuthPanel
+BackendListener=org.apache.jmeter.visualizers.backend.BackendListener
+BackendListenerGui=org.apache.jmeter.visualizers.backend.BackendListenerGui
+BeanShellAssertion=org.apache.jmeter.assertions.BeanShellAssertion
+BeanShellAssertionGui=org.apache.jmeter.assertions.gui.BeanShellAssertionGui
+BeanShellListener=org.apache.jmeter.visualizers.BeanShellListener
+BeanShellPostProcessor=org.apache.jmeter.extractor.BeanShellPostProcessor
+BeanShellPreProcessor=org.apache.jmeter.modifiers.BeanShellPreProcessor
+BeanShellSampler=org.apache.jmeter.protocol.java.sampler.BeanShellSampler
+BeanShellSamplerGui=org.apache.jmeter.protocol.java.control.gui.BeanShellSamplerGui
+BeanShellTimer=org.apache.jmeter.timers.BeanShellTimer
+BSFAssertion=org.apache.jmeter.assertions.BSFAssertion
+BSFListener=org.apache.jmeter.visualizers.BSFListener
+BSFPreProcessor=org.apache.jmeter.modifiers.BSFPreProcessor
+BSFPostProcessor=org.apache.jmeter.extractor.BSFPostProcessor
+BSFSampler=org.apache.jmeter.protocol.java.sampler.BSFSampler
+BSFSamplerGui=org.apache.jmeter.protocol.java.control.gui.BSFSamplerGui
+BSFTimer=org.apache.jmeter.timers.BSFTimer
+CacheManager=org.apache.jmeter.protocol.http.control.CacheManager
+CacheManagerGui=org.apache.jmeter.protocol.http.gui.CacheManagerGui
+CompareAssertion=org.apache.jmeter.assertions.CompareAssertion
+ComparisonVisualizer=org.apache.jmeter.visualizers.ComparisonVisualizer
+ConfigTestElement=org.apache.jmeter.config.ConfigTestElement
+ConstantThroughputTimer=org.apache.jmeter.timers.ConstantThroughputTimer
+ConstantTimer=org.apache.jmeter.timers.ConstantTimer
+ConstantTimerGui=org.apache.jmeter.timers.gui.ConstantTimerGui
+Cookie=org.apache.jmeter.protocol.http.control.Cookie
+CookieManager=org.apache.jmeter.protocol.http.control.CookieManager
+CookiePanel=org.apache.jmeter.protocol.http.gui.CookiePanel
+CounterConfig=org.apache.jmeter.modifiers.CounterConfig
+CriticalSectionController=org.apache.jmeter.control.CriticalSectionController
+CriticalSectionControllerGui=org.apache.jmeter.control.gui.CriticalSectionControllerGui
+CounterConfigGui=org.apache.jmeter.modifiers.gui.CounterConfigGui
+CSVDataSet=org.apache.jmeter.config.CSVDataSet
+DebugPostProcessor=org.apache.jmeter.extractor.DebugPostProcessor
+DebugSampler=org.apache.jmeter.sampler.DebugSampler
+DistributionGraphVisualizer=org.apache.jmeter.visualizers.DistributionGraphVisualizer
+DNSCacheManager=org.apache.jmeter.protocol.http.control.DNSCacheManager
+DNSCachePanel=org.apache.jmeter.protocol.http.gui.DNSCachePanel
+DurationAssertion=org.apache.jmeter.assertions.DurationAssertion
+DurationAssertionGui=org.apache.jmeter.assertions.gui.DurationAssertionGui
+# Should really have been defined as floatProp to agree with other properties
+# No point changing this now
+FloatProperty=org.apache.jmeter.testelement.property.FloatProperty
+ForeachController=org.apache.jmeter.control.ForeachController
+ForeachControlPanel=org.apache.jmeter.control.gui.ForeachControlPanel
+FtpConfigGui=org.apache.jmeter.protocol.ftp.config.gui.FtpConfigGui
+FTPSampler=org.apache.jmeter.protocol.ftp.sampler.FTPSampler
+FtpTestSamplerGui=org.apache.jmeter.protocol.ftp.control.gui.FtpTestSamplerGui
+GaussianRandomTimer=org.apache.jmeter.timers.GaussianRandomTimer
+GaussianRandomTimerGui=org.apache.jmeter.timers.gui.GaussianRandomTimerGui
+GenericController=org.apache.jmeter.control.GenericController
+GraphAccumVisualizer=org.apache.jmeter.visualizers.GraphAccumVisualizer
+GraphVisualizer=org.apache.jmeter.visualizers.GraphVisualizer
+Header=org.apache.jmeter.protocol.http.control.Header
+HeaderManager=org.apache.jmeter.protocol.http.control.HeaderManager
+HeaderPanel=org.apache.jmeter.protocol.http.gui.HeaderPanel
+HTMLAssertion=org.apache.jmeter.assertions.HTMLAssertion
+HTMLAssertionGui=org.apache.jmeter.assertions.gui.HTMLAssertionGui
+HTTPArgument=org.apache.jmeter.protocol.http.util.HTTPArgument
+HTTPArgumentsPanel=org.apache.jmeter.protocol.http.gui.HTTPArgumentsPanel
+HTTPFileArg=org.apache.jmeter.protocol.http.util.HTTPFileArg
+HTTPFileArgs=org.apache.jmeter.protocol.http.util.HTTPFileArgs
+HttpDefaultsGui=org.apache.jmeter.protocol.http.config.gui.HttpDefaultsGui
+HtmlExtractor=org.apache.jmeter.extractor.HtmlExtractor
+HtmlExtractorGui=org.apache.jmeter.extractor.gui.HtmlExtractorGui
+# removed in r1039684, probably not released. Not present in r322831 or since.
+#HttpGenericSampler=org.apache.jmeter.protocol.http.sampler.HttpGenericSampler
+# removed in r1039684, probably not released. Not present in r322831 or since.
+#HttpGenericSamplerGui=org.apache.jmeter.protocol.http.control.gui.HttpGenericSamplerGui
+HttpMirrorControl=org.apache.jmeter.protocol.http.control.HttpMirrorControl
+HttpMirrorControlGui=org.apache.jmeter.protocol.http.control.gui.HttpMirrorControlGui
+# r397955 - removed test class. Keep as commented entry for info only.
+#HTTPNullSampler=org.apache.jmeter.protocol.http.sampler.HTTPNullSampler
+# Merge previous 2 HTTP samplers into one
+HTTPSampler_=org.apache.jmeter.protocol.http.sampler.HTTPSampler
+HTTPSampler2_=org.apache.jmeter.protocol.http.sampler.HTTPSampler2
+HTTPSamplerProxy,HTTPSampler,HTTPSampler2=org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy
+# Merge GUIs
+HttpTestSampleGui,HttpTestSampleGui2=org.apache.jmeter.protocol.http.control.gui.HttpTestSampleGui
+#HttpTestSampleGui2=org.apache.jmeter.protocol.http.control.gui.HttpTestSampleGui2
+IfController=org.apache.jmeter.control.IfController
+IfControllerPanel=org.apache.jmeter.control.gui.IfControllerPanel
+IncludeController=org.apache.jmeter.control.IncludeController
+IncludeControllerGui=org.apache.jmeter.control.gui.IncludeControllerGui
+InterleaveControl=org.apache.jmeter.control.InterleaveControl
+InterleaveControlGui=org.apache.jmeter.control.gui.InterleaveControlGui
+JavaConfig=org.apache.jmeter.protocol.java.config.JavaConfig
+JavaConfigGui=org.apache.jmeter.protocol.java.config.gui.JavaConfigGui
+JavaSampler=org.apache.jmeter.protocol.java.sampler.JavaSampler
+JavaTest=org.apache.jmeter.protocol.java.test.JavaTest
+JavaTestSamplerGui=org.apache.jmeter.protocol.java.control.gui.JavaTestSamplerGui
+JDBCDataSource=org.apache.jmeter.protocol.jdbc.config.DataSourceElement
+JDBCPostProcessor=org.apache.jmeter.protocol.jdbc.processor.JDBCPostProcessor
+JDBCPreProcessor=org.apache.jmeter.protocol.jdbc.processor.JDBCPreProcessor
+JDBCSampler=org.apache.jmeter.protocol.jdbc.sampler.JDBCSampler
+# Renamed to JMSSamplerGui; keep original entry for backwards compatibility
+JMSConfigGui=org.apache.jmeter.protocol.jms.control.gui.JMSConfigGui
+JMSProperties=org.apache.jmeter.protocol.jms.sampler.JMSProperties
+JMSProperty=org.apache.jmeter.protocol.jms.sampler.JMSProperty
+JMSPublisherGui=org.apache.jmeter.protocol.jms.control.gui.JMSPublisherGui
+JMSSampler=org.apache.jmeter.protocol.jms.sampler.JMSSampler
+JMSSamplerGui=org.apache.jmeter.protocol.jms.control.gui.JMSSamplerGui
+JMSSubscriberGui=org.apache.jmeter.protocol.jms.control.gui.JMSSubscriberGui
+# Removed in r545311 as Jndi no longer present; keep for compat.
+JndiDefaultsGui=org.apache.jmeter.protocol.jms.control.gui.JndiDefaultsGui
+JSR223Assertion=org.apache.jmeter.assertions.JSR223Assertion
+JSR223Listener=org.apache.jmeter.visualizers.JSR223Listener
+JSR223PostProcessor=org.apache.jmeter.extractor.JSR223PostProcessor
+JSR223PreProcessor=org.apache.jmeter.modifiers.JSR223PreProcessor
+JSR223Sampler=org.apache.jmeter.protocol.java.sampler.JSR223Sampler
+JSR223Timer=org.apache.jmeter.timers.JSR223Timer
+JUnitSampler=org.apache.jmeter.protocol.java.sampler.JUnitSampler
+JUnitTestSamplerGui=org.apache.jmeter.protocol.java.control.gui.JUnitTestSamplerGui
+KeystoreConfig=org.apache.jmeter.config.KeystoreConfig
+LDAPArgument=org.apache.jmeter.protocol.ldap.config.gui.LDAPArgument
+LDAPArguments=org.apache.jmeter.protocol.ldap.config.gui.LDAPArguments
+LDAPArgumentsPanel=org.apache.jmeter.protocol.ldap.config.gui.LDAPArgumentsPanel
+LdapConfigGui=org.apache.jmeter.protocol.ldap.config.gui.LdapConfigGui
+LdapExtConfigGui=org.apache.jmeter.protocol.ldap.config.gui.LdapExtConfigGui
+LDAPExtSampler=org.apache.jmeter.protocol.ldap.sampler.LDAPExtSampler
+LdapExtTestSamplerGui=org.apache.jmeter.protocol.ldap.control.gui.LdapExtTestSamplerGui
+LDAPSampler=org.apache.jmeter.protocol.ldap.sampler.LDAPSampler
+LdapTestSamplerGui=org.apache.jmeter.protocol.ldap.control.gui.LdapTestSamplerGui
+LogicControllerGui=org.apache.jmeter.control.gui.LogicControllerGui
+LoginConfig=org.apache.jmeter.config.LoginConfig
+LoginConfigGui=org.apache.jmeter.config.gui.LoginConfigGui
+LoopController=org.apache.jmeter.control.LoopController
+LoopControlPanel=org.apache.jmeter.control.gui.LoopControlPanel
+MailerModel=org.apache.jmeter.reporters.MailerModel
+MailerResultCollector=org.apache.jmeter.reporters.MailerResultCollector
+MailerVisualizer=org.apache.jmeter.visualizers.MailerVisualizer
+MailReaderSampler=org.apache.jmeter.protocol.mail.sampler.MailReaderSampler
+MailReaderSamplerGui=org.apache.jmeter.protocol.mail.sampler.gui.MailReaderSamplerGui
+MD5HexAssertion=org.apache.jmeter.assertions.MD5HexAssertion
+MD5HexAssertionGUI=org.apache.jmeter.assertions.gui.MD5HexAssertionGUI
+ModuleController=org.apache.jmeter.control.ModuleController
+ModuleControllerGui=org.apache.jmeter.control.gui.ModuleControllerGui
+MongoScriptSampler=org.apache.jmeter.protocol.mongodb.sampler.MongoScriptSampler
+MongoSourceElement=org.apache.jmeter.protocol.mongodb.config.MongoSourceElement
+MonitorHealthVisualizer=org.apache.jmeter.visualizers.MonitorHealthVisualizer
+NamePanel=org.apache.jmeter.gui.NamePanel
+ObsoleteGui=org.apache.jmeter.config.gui.ObsoleteGui
+OnceOnlyController=org.apache.jmeter.control.OnceOnlyController
+OnceOnlyControllerGui=org.apache.jmeter.control.gui.OnceOnlyControllerGui
+ParamMask=org.apache.jmeter.protocol.http.modifier.ParamMask
+ParamModifier=org.apache.jmeter.protocol.http.modifier.ParamModifier
+ParamModifierGui=org.apache.jmeter.protocol.http.modifier.gui.ParamModifierGui
+PoissonRandomTimer=org.apache.jmeter.timers.PoissonRandomTimer
+PoissonRandomTimerGui=org.apache.jmeter.timers.gui.PoissonRandomTimerGui
+PropertyControlGui=org.apache.jmeter.visualizers.PropertyControlGui
+ProxyControl=org.apache.jmeter.protocol.http.proxy.ProxyControl
+ProxyControlGui=org.apache.jmeter.protocol.http.proxy.gui.ProxyControlGui
+PublisherSampler=org.apache.jmeter.protocol.jms.sampler.PublisherSampler
+RandomControlGui=org.apache.jmeter.control.gui.RandomControlGui
+RandomController=org.apache.jmeter.control.RandomController
+RandomOrderController=org.apache.jmeter.control.RandomOrderController
+RandomOrderControllerGui=org.apache.jmeter.control.gui.RandomOrderControllerGui
+RandomVariableConfig=org.apache.jmeter.config.RandomVariableConfig
+RecordController=org.apache.jmeter.protocol.http.control.gui.RecordController
+RecordingController=org.apache.jmeter.protocol.http.control.RecordingController
+# removed in r1039684, class was deleted in r580452
+ReflectionThreadGroup=org.apache.jmeter.threads.ReflectionThreadGroup
+RegexExtractor=org.apache.jmeter.extractor.RegexExtractor
+RegexExtractorGui=org.apache.jmeter.extractor.gui.RegexExtractorGui
+RegExUserParameters=org.apache.jmeter.protocol.http.modifier.RegExUserParameters
+RegExUserParametersGui=org.apache.jmeter.protocol.http.modifier.gui.RegExUserParametersGui
+RemoteListenerWrapper=org.apache.jmeter.samplers.RemoteListenerWrapper
+RemoteSampleListenerWrapper=org.apache.jmeter.samplers.RemoteSampleListenerWrapper
+RemoteTestListenerWrapper=org.apache.jmeter.samplers.RemoteTestListenerWrapper
+RemoteThreadsListenerWrapper=org.apache.jmeter.threads.RemoteThreadsListenerWrapper
+ResponseAssertion=org.apache.jmeter.assertions.ResponseAssertion
+RespTimeGraphVisualizer=org.apache.jmeter.visualizers.RespTimeGraphVisualizer
+ResultAction=org.apache.jmeter.reporters.ResultAction
+ResultActionGui=org.apache.jmeter.reporters.gui.ResultActionGui
+ResultCollector=org.apache.jmeter.reporters.ResultCollector
+ResultSaver=org.apache.jmeter.reporters.ResultSaver
+ResultSaverGui=org.apache.jmeter.reporters.gui.ResultSaverGui
+RunTime=org.apache.jmeter.control.RunTime
+RunTimeGui=org.apache.jmeter.control.gui.RunTimeGui
+SampleSaveConfiguration=org.apache.jmeter.samplers.SampleSaveConfiguration
+SimpleConfigGui=org.apache.jmeter.config.gui.SimpleConfigGui
+SimpleDataWriter=org.apache.jmeter.visualizers.SimpleDataWriter
+SizeAssertion=org.apache.jmeter.assertions.SizeAssertion
+SizeAssertionGui=org.apache.jmeter.assertions.gui.SizeAssertionGui
+SMIMEAssertion=org.apache.jmeter.assertions.SMIMEAssertionTestElement
+SMIMEAssertionGui=org.apache.jmeter.assertions.gui.SMIMEAssertionGui
+SmtpSampler=org.apache.jmeter.protocol.smtp.sampler.SmtpSampler
+SmtpSamplerGui=org.apache.jmeter.protocol.smtp.sampler.gui.SmtpSamplerGui
+SoapSampler=org.apache.jmeter.protocol.http.sampler.SoapSampler
+SoapSamplerGui=org.apache.jmeter.protocol.http.control.gui.SoapSamplerGui
+SplineVisualizer=org.apache.jmeter.visualizers.SplineVisualizer
+# Originally deleted in r397955 as class is obsolete; needed for compat.
+SqlConfigGui=org.apache.jmeter.protocol.jdbc.config.gui.SqlConfigGui
+StatGraphVisualizer=org.apache.jmeter.visualizers.StatGraphVisualizer
+StatVisualizer=org.apache.jmeter.visualizers.StatVisualizer
+SubscriberSampler=org.apache.jmeter.protocol.jms.sampler.SubscriberSampler
+SubstitutionElement=org.apache.jmeter.assertions.SubstitutionElement
+Summariser=org.apache.jmeter.reporters.Summariser
+SummariserGui=org.apache.jmeter.reporters.gui.SummariserGui
+SummaryReport=org.apache.jmeter.visualizers.SummaryReport
+SwitchController=org.apache.jmeter.control.SwitchController
+SwitchControllerGui=org.apache.jmeter.control.gui.SwitchControllerGui
+SyncTimer=org.apache.jmeter.timers.SyncTimer
+SystemSampler=org.apache.jmeter.protocol.system.SystemSampler
+SystemSamplerGui=org.apache.jmeter.protocol.system.gui.SystemSamplerGui
+TableVisualizer=org.apache.jmeter.visualizers.TableVisualizer
+TCPConfigGui=org.apache.jmeter.protocol.tcp.config.gui.TCPConfigGui
+TCPSampler=org.apache.jmeter.protocol.tcp.sampler.TCPSampler
+TCPSamplerGui=org.apache.jmeter.protocol.tcp.control.gui.TCPSamplerGui
+TestAction=org.apache.jmeter.sampler.TestAction
+TestActionGui=org.apache.jmeter.sampler.gui.TestActionGui
+TestBeanGUI=org.apache.jmeter.testbeans.gui.TestBeanGUI
+TestFragmentController=org.apache.jmeter.control.TestFragmentController
+TestFragmentControllerGui=org.apache.jmeter.control.gui.TestFragmentControllerGui
+TestPlan=org.apache.jmeter.testelement.TestPlan
+TestPlanGui=org.apache.jmeter.control.gui.TestPlanGui
+ThreadGroup=org.apache.jmeter.threads.ThreadGroup
+ThreadGroupGui=org.apache.jmeter.threads.gui.ThreadGroupGui
+PostThreadGroup=org.apache.jmeter.threads.PostThreadGroup
+PostThreadGroupGui=org.apache.jmeter.threads.gui.PostThreadGroupGui
+SetupThreadGroup=org.apache.jmeter.threads.SetupThreadGroup
+SetupThreadGroupGui=org.apache.jmeter.threads.gui.SetupThreadGroupGui
+ThroughputController=org.apache.jmeter.control.ThroughputController
+ThroughputControllerGui=org.apache.jmeter.control.gui.ThroughputControllerGui
+TransactionController=org.apache.jmeter.control.TransactionController
+TransactionControllerGui=org.apache.jmeter.control.gui.TransactionControllerGui
+TransactionSampler=org.apache.jmeter.control.TransactionSampler
+UniformRandomTimer=org.apache.jmeter.timers.UniformRandomTimer
+UniformRandomTimerGui=org.apache.jmeter.timers.gui.UniformRandomTimerGui
+URLRewritingModifier=org.apache.jmeter.protocol.http.modifier.URLRewritingModifier
+URLRewritingModifierGui=org.apache.jmeter.protocol.http.modifier.gui.URLRewritingModifierGui
+UserParameterModifier=org.apache.jmeter.protocol.http.modifier.UserParameterModifier
+UserParameterModifierGui=org.apache.jmeter.protocol.http.modifier.gui.UserParameterModifierGui
+UserParameters=org.apache.jmeter.modifiers.UserParameters
+UserParametersGui=org.apache.jmeter.modifiers.gui.UserParametersGui
+ViewResultsFullVisualizer=org.apache.jmeter.visualizers.ViewResultsFullVisualizer
+WebServiceSampler=org.apache.jmeter.protocol.http.sampler.WebServiceSampler
+WebServiceSamplerGui=org.apache.jmeter.protocol.http.control.gui.WebServiceSamplerGui
+WhileController=org.apache.jmeter.control.WhileController
+WhileControllerGui=org.apache.jmeter.control.gui.WhileControllerGui
+WorkBench=org.apache.jmeter.testelement.WorkBench
+WorkBenchGui=org.apache.jmeter.control.gui.WorkBenchGui
+XMLAssertion=org.apache.jmeter.assertions.XMLAssertion
+XMLAssertionGui=org.apache.jmeter.assertions.gui.XMLAssertionGui
+XMLSchemaAssertion=org.apache.jmeter.assertions.XMLSchemaAssertion
+XMLSchemaAssertionGUI=org.apache.jmeter.assertions.gui.XMLSchemaAssertionGUI
+XPathAssertion=org.apache.jmeter.assertions.XPathAssertion
+XPathAssertionGui=org.apache.jmeter.assertions.gui.XPathAssertionGui
+XPathExtractor=org.apache.jmeter.extractor.XPathExtractor
+XPathExtractorGui=org.apache.jmeter.extractor.gui.XPathExtractorGui
+#
+# Properties - all start with lower case letter and end with Prop
+#
+boolProp=org.apache.jmeter.testelement.property.BooleanProperty
+collectionProp=org.apache.jmeter.testelement.property.CollectionProperty
+doubleProp=org.apache.jmeter.testelement.property.DoubleProperty
+elementProp=org.apache.jmeter.testelement.property.TestElementProperty
+# see above - already defined as FloatProperty
+#floatProp=org.apache.jmeter.testelement.property.FloatProperty
+intProp=org.apache.jmeter.testelement.property.IntegerProperty
+longProp=org.apache.jmeter.testelement.property.LongProperty
+mapProp=org.apache.jmeter.testelement.property.MapProperty
+objProp=org.apache.jmeter.testelement.property.ObjectProperty
+stringProp=org.apache.jmeter.testelement.property.StringProperty
+#
+# Other - must start with a lower case letter (and not end with Prop)
+# (otherwise they could clash with the initial set of aliases)
+#
+hashTree=org.apache.jorphan.collections.ListedHashTree
+jmeterTestPlan=org.apache.jmeter.save.ScriptWrapper
+sample=org.apache.jmeter.samplers.SampleResult
+httpSample=org.apache.jmeter.protocol.http.sampler.HTTPSampleResult
+statSample=org.apache.jmeter.samplers.StatisticalSampleResult
+testResults=org.apache.jmeter.save.TestResultWrapper
+assertionResult=org.apache.jmeter.assertions.AssertionResult
+monitorStats=org.apache.jmeter.visualizers.MonitorStats
+sampleEvent=org.apache.jmeter.samplers.SampleEvent
+#
+# Converters to register. Must start line with '_'
+# If the converter is a collection of subitems, set equal to "collection"
+# If the converter needs to know the class mappings but is not a collection of
+# subitems, set it equal to "mapping"
+_org.apache.jmeter.protocol.http.sampler.HTTPSamplerBaseConverter=collection
+_org.apache.jmeter.protocol.http.util.HTTPResultConverter=collection
+_org.apache.jmeter.save.converters.BooleanPropertyConverter=
+_org.apache.jmeter.save.converters.IntegerPropertyConverter=
+_org.apache.jmeter.save.converters.LongPropertyConverter=
+_org.apache.jmeter.save.converters.MultiPropertyConverter=collection
+_org.apache.jmeter.save.converters.SampleEventConverter=
+_org.apache.jmeter.save.converters.SampleResultConverter=collection
+_org.apache.jmeter.save.converters.SampleSaveConfigurationConverter=collection
+_org.apache.jmeter.save.converters.StringPropertyConverter=
+_org.apache.jmeter.save.converters.HashTreeConverter=collection
+_org.apache.jmeter.save.converters.TestElementConverter=collection
+_org.apache.jmeter.save.converters.TestElementPropertyConverter=collection
+_org.apache.jmeter.save.converters.TestResultWrapperConverter=collection
+_org.apache.jmeter.save.ScriptWrapperConverter=mapping
+#
+# Remember to update the _version entry
+#
\ No newline at end of file
diff --git a/bin/shutdown.cmd b/bin/shutdown.cmd
new file mode 100644
index 00000000000..4cb874646a6
--- /dev/null
+++ b/bin/shutdown.cmd
@@ -0,0 +1,23 @@
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem Run the Shutdown client to stop a non-GUI instance gracefully
+
+rem P1 = command port for JMeter instance (defaults to 4445)
+
+java -cp %~dp0ApacheJMeter.jar org.apache.jmeter.util.ShutdownClient Shutdown %*
+pause
\ No newline at end of file
diff --git a/bin/shutdown.sh b/bin/shutdown.sh
new file mode 100755
index 00000000000..7ef54ae2b30
--- /dev/null
+++ b/bin/shutdown.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+# Run the Shutdown client to stop a non-GUI instance gracefully
+
+# P1 = command port for JMeter instance (defaults to 4445)
+
+DIRNAME=`dirname $0`
+
+java -cp ${DIRNAME}/ApacheJMeter.jar org.apache.jmeter.util.ShutdownClient Shutdown "$@"
diff --git a/bin/stoptest.cmd b/bin/stoptest.cmd
new file mode 100644
index 00000000000..6e06ab88290
--- /dev/null
+++ b/bin/stoptest.cmd
@@ -0,0 +1,23 @@
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem Run the Shutdown client to stop a non-GUI instance abruptly
+
+rem P1 = command port for JMeter instance (defaults to 4445)
+
+java -cp %~dp0ApacheJMeter.jar org.apache.jmeter.util.ShutdownClient StopTestNow %*
+pause
\ No newline at end of file
diff --git a/bin/stoptest.sh b/bin/stoptest.sh
new file mode 100755
index 00000000000..a96c798a13b
--- /dev/null
+++ b/bin/stoptest.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+# Run the Shutdown client to stop a non-GUI instance abruptly
+
+# P1 = command port for JMeter instance (defaults to 4445)
+
+DIRNAME=`dirname $0`
+
+java -cp ${DIRNAME}/ApacheJMeter.jar org.apache.jmeter.util.ShutdownClient StopTestNow "$@"
diff --git a/bin/system.properties b/bin/system.properties
new file mode 100644
index 00000000000..da87b3451b4
--- /dev/null
+++ b/bin/system.properties
@@ -0,0 +1,113 @@
+# Sample system.properties file
+#
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+# Commons Logging properties
+# Used by HttpComponents 4.x, see:
+# http://hc.apache.org/httpcomponents-client-4.3.x/logging.html
+#
+# By default, Commons Logging is configured by JMeter to use the same logging system
+# as the main JMeter code; to configure it please see jmeter.properties.
+#
+# Uncomment to enable debugging of Commons Logging setup; may be useful if
+# implementation cannot be instantiated:
+#org.apache.commons.logging.diagnostics.dest=STDERR
+#
+# Uncomment to enable Commons Logging to use standard output
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
+#org.apache.commons.logging.simplelog.showdatetime=true
+#
+# Uncomment the following two lines to generate basic debug logging for HC4.x
+#org.apache.commons.logging.simplelog.log.org.apache.http=DEBUG
+#org.apache.commons.logging.simplelog.log.org.apache.http.wire=ERROR
+
+# Java networking-related properties
+#
+# For details of Oracle Java network properties, see for example:
+# http://download.oracle.com/javase/1.5.0/docs/guide/net/properties.html
+#
+#java.net.preferIPv4Stack=false
+#java.net.preferIPv6Addresses=false
+#networkaddress.cache.ttl=-1
+#networkaddress.cache.negative.ttl=10
+
+#
+#
+# SSL properties (moved from jmeter.properties)
+#
+# See http://download.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#Customization
+# for information on the javax.ssl system properties
+
+# Truststore properties (trusted certificates)
+#javax.net.ssl.trustStore=/path/to/[jsse]cacerts
+#javax.net.ssl.trustStorePassword
+#javax.net.ssl.trustStoreProvider
+#javax.net.ssl.trustStoreType [default = KeyStore.getDefaultType()]
+
+# Keystore properties (client certificates)
+# Location
+#javax.net.ssl.keyStore=.keystore
+#
+#The password to your keystore
+#javax.net.ssl.keyStorePassword=changeit
+#
+#javax.net.ssl.keyStoreProvider
+#javax.net.ssl.keyStoreType [default = KeyStore.getDefaultType()]
+
+# SSL debugging:
+# See http://download.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#Debug
+#
+# javax.net.debug=help - generates the list below:
+#all turn on all debugging
+#ssl turn on ssl debugging
+#
+#The following can be used with ssl:
+# record enable per-record tracing
+# handshake print each handshake message
+# keygen print key generation data
+# session print session activity
+# defaultctx print default SSL initialization
+# sslctx print SSLContext tracing
+# sessioncache print session cache tracing
+# keymanager print key manager tracing
+# trustmanager print trust manager tracing
+#
+# handshake debugging can be widened with:
+# data hex dump of each handshake message
+# verbose verbose handshake message printing
+#
+# record debugging can be widened with:
+# plaintext hex dump of record plaintext
+#
+# Examples:
+#javax.net.debug=ssl
+#javax.net.debug=sslctx,session,sessioncache
+#
+#
+# We enable the following property to allow headers such as "Host" to be passed through.
+# See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6996110
+sun.net.http.allowRestrictedHeaders=true
+
+#Uncomment for Kerberos authentication and edit the 2 config files to match your domains
+#With the following configuration krb5.conf and jaas.conf must be located in bin folder
+#You can modify these file paths to use absolute location
+#java.security.krb5.conf=krb5.conf
+#java.security.auth.login.config=jaas.conf
+
+# Location of keytool application
+# This property can be defined if JMeter cannot find the application automatically
+# It should not be necessary in most cases.
+#keytool.directory=/bin
diff --git a/bin/templates/BeanShellSampler.jmx b/bin/templates/BeanShellSampler.jmx
new file mode 100644
index 00000000000..ad5a61a2a08
--- /dev/null
+++ b/bin/templates/BeanShellSampler.jmx
@@ -0,0 +1,27 @@
+
+
+
+
+ // A simple script
+log.info("Example");
+
+type = bsh.args[0];
+
+log.info(type);
+
+if ("1".equals(type)) {
+ ResponseCode = 2 * 100;
+ ResponseMessage = bsh.args[1];
+} else {
+ ResponseCode = 500;
+ ResponseMessage = "Invalid Type: " + type;
+ IsSuccess = false;
+}
+return Parameters;
+
+ 2 OK
+ false
+
+
+
+
diff --git a/bin/templates/build-adv-web-test-plan.jmx b/bin/templates/build-adv-web-test-plan.jmx
new file mode 100644
index 00000000000..096e4c0d41f
--- /dev/null
+++ b/bin/templates/build-adv-web-test-plan.jmx
@@ -0,0 +1,412 @@
+
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+
+
+ resources_folder
+ ${__P(resources_folder, CHANGE_FOLDER)}
+ Change this value to folder containing your CSV files
+ =
+
+
+ host
+ jmeter.apache.org
+ =
+
+
+ bugzilla_host
+ bz.apache.org
+ =
+
+
+
+
+
+
+ true
+ org.apache.jmeter.protocol.http.control.HC4CookieHandler
+
+
+
+
+
+ User-Agent
+ Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:22.0) Gecko/20100101 Firefox/22.0
+
+
+ Connection
+ keep-alive
+
+
+ Accept-Language
+ fr,en;q=0.8,fr-fr;q=0.5,en-us;q=0.3
+
+
+ Accept-Encoding
+ gzip, deflate
+
+
+ Accept
+ text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
+
+
+
+
+
+ CSV file that must contains rows with 2 columns separated by comma, first column will be mapped to login, second one to password
+ ,
+ UTF-8
+ ${resources_folder}/login.csv
+ false
+ true
+ All threads
+ false
+ login,password
+
+
+
+ continue
+
+ false
+ 2
+
+ 1
+ 5
+ 1373789594000
+ 1373789594000
+ false
+
+
+
+
+
+
+
+
+ ${host}
+
+
+
+
+
+
+ Shows how to set defaults on page
+ 4
+
+
+
+
+ 200
+
+ Check Response code for all children samplers of JMeter Users Thread Group
+ Assertion.response_code
+ false
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+ /
+ GET
+ true
+ false
+ true
+ false
+ false
+
+
+
+
+
+ <title>Apache JMeter - Apache JMeter™</title>
+
+ We check page contains some text
+ Assertion.response_data
+ false
+ 16
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /changes.html
+ GET
+ true
+ false
+ true
+ false
+ false
+
+
+
+
+ 5000
+ 500.0
+
+
+
+
+ <title>Apache JMeter - Changes</title>
+
+ We check page contains some text
+ Assertion.response_data
+ false
+ 16
+
+
+
+ Shows how to extract bug id from a link in response
+ false
+ bugId
+ https://bz.apache.org/bugzilla/show_bug.cgi\?id=([^"]+?)"
+ $1$
+ nv_bugId
+ 0
+
+
+
+
+
+
+
+ ${bugzilla_host}
+
+
+
+ https
+
+ /bugzilla/show_bug.cgi?id=${bugId}
+ GET
+ true
+ false
+ true
+ false
+ false
+
+ We use bugId variable extracted in Changes by randomBugIdExtractor
+
+
+
+ 5000
+ 500.0
+
+
+
+
+ This is <b>ASF Bugzilla</b>: the Apache Software Foundation bug system
+
+ We check page contains some text
+ Assertion.response_data
+ false
+ 16
+
+
+
+
+
+
+
+ true
+ ${login}
+ =
+ true
+ username
+
+
+ true
+ ${password}
+ =
+ true
+ password
+
+
+
+ www.example.com
+
+
+
+
+
+ /loginform.html
+ POST
+ true
+ false
+ true
+ false
+ false
+
+ We use here data from loginData CSV DataSet
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ true
+ true
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ true
+ true
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ true
+ true
+ 0
+ true
+ true
+ true
+ true
+
+
+ Use only during debug of script
+
+
+
+
+
+
diff --git a/bin/templates/build-ftp-test-plan.jmx b/bin/templates/build-ftp-test-plan.jmx
new file mode 100644
index 00000000000..9050b75cae2
--- /dev/null
+++ b/bin/templates/build-ftp-test-plan.jmx
@@ -0,0 +1,103 @@
+
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ continue
+
+ false
+ 2
+
+ 4
+ 1
+ 1373791853000
+ 1373791853000
+ false
+
+
+
+
+
+ ftp.domain.com
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+ /directory/file1.txt
+
+
+ false
+ false
+ false
+ anonymous
+ anonymous@test.com
+
+
+
+
+
+ /directory/file2.txt
+
+
+ false
+ false
+ false
+ anonymous
+ anonymous@test.com
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ 0
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
diff --git a/bin/templates/build-ldap-ext-test-plan.jmx b/bin/templates/build-ldap-ext-test-plan.jmx
new file mode 100644
index 00000000000..2603177fe56
--- /dev/null
+++ b/bin/templates/build-ldap-ext-test-plan.jmx
@@ -0,0 +1,373 @@
+
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ 1375035819000
+ 1375035819000
+ false
+
+
+
+
+
+
+
+
+ 2
+
+
+
+ false
+ false
+
+ false
+ false
+
+
+
+
+
+
+ unbind
+
+
+
+ true
+ 1
+
+
+
+ ldap.test.com
+ 636
+ dc=test,dc=com
+ 2
+
+
+
+ false
+ false
+ 5000
+ false
+ true
+ cn=adminldap,dc=test,dc=com
+ password
+
+
+
+
+ bind
+
+
+
+
+
+
+ 2
+ 0
+ 0
+ cn;dn;objectClass
+ false
+ false
+
+ false
+ false
+
+
+
+
+
+
+ search
+ ou=Users
+ (sn=Doe)
+
+
+
+
+
+
+ 2
+
+
+
+ false
+ false
+
+ false
+ false
+
+
+ cn=jdoe,ou=Users
+ mail=jdoe@test.com
+
+
+ compare
+
+
+
+ ldap.test.com
+ 636
+ dc=test,dc=com
+ 2
+
+
+
+ false
+ false
+ 5000
+ false
+ true
+ cn=jdoe,ou=Users,dc=test,dc=com
+ password
+
+
+
+
+ sbind
+
+
+
+
+
+
+ 2
+
+
+
+ false
+ false
+
+ false
+ false
+
+
+
+
+
+
+ add
+ cn=Little John Doe,ou=Users
+
+
+
+ sn
+ Doe
+ =
+
+
+ cn
+ Little John Doe
+ =
+
+
+ objectclass
+ top
+ =
+
+
+ objectclass
+ person
+ =
+
+
+ objectclass
+ organizationalPerson
+ =
+
+
+ objectclass
+ inetOrgPerson
+ =
+
+
+ userpassword
+ password
+ =
+
+
+ displayname
+ Little John
+ =
+
+
+ givenname
+ Doe
+ =
+
+
+ description
+ Test
+ =
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+ false
+ false
+
+ false
+ false
+
+
+
+
+
+
+ modify
+ cn=Little John Doe,ou=Users
+
+
+
+ mail
+ littlejohndoe@test.com
+ replace
+ =
+
+
+ telephoneNumber
+ +155669988
+ add
+ =
+
+
+ description
+ Test
+ delete
+ =
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+ false
+ false
+
+ false
+ false
+
+
+
+
+ cn=Little John Doe,ou=Users
+ cn=John Junior Doe,ou=Users
+ rename
+
+
+
+
+
+
+ 2
+
+
+
+ false
+ false
+
+ false
+ false
+
+
+
+
+
+
+ delete
+ cn=John Junior Doe,ou=Users
+
+
+
+
+
+
+ 2
+
+
+
+ false
+ false
+
+ false
+ false
+
+
+
+
+
+
+ unbind
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ false
+ true
+ false
+ false
+ true
+ true
+ false
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ 0
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
diff --git a/bin/templates/build-ldap-test-plan.jmx b/bin/templates/build-ldap-test-plan.jmx
new file mode 100644
index 00000000000..5ef9dcf91e0
--- /dev/null
+++ b/bin/templates/build-ldap-test-plan.jmx
@@ -0,0 +1,141 @@
+
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ continue
+
+ false
+ 4
+
+ 4
+ 1
+ 1373790870000
+ 1373790870000
+ false
+
+
+
+
+
+ cn=LDAP User,dc=test,dc=com
+ password
+
+
+
+ ldap.test.com
+ 389
+ dc=test,dc=com
+ false
+ add
+
+
+
+
+
+
+
+
+
+
+ false
+ add
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ search
+
+
+
+
+
+
+
+
+
+
+ false
+ modify
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ delete
+
+
+
+
+
+
+
+ successful
+
+ Assertion.response_data
+ false
+ 16
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ 0
+ true
+
+
+
+
+
+
+
+
+
diff --git a/bin/templates/build-web-test-plan.jmx b/bin/templates/build-web-test-plan.jmx
new file mode 100644
index 00000000000..da7bf7f3401
--- /dev/null
+++ b/bin/templates/build-web-test-plan.jmx
@@ -0,0 +1,153 @@
+
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ continue
+
+ false
+ 2
+
+ 5
+ 5
+ 1373789594000
+ 1373789594000
+ false
+
+
+
+
+
+
+
+
+ jmeter.apache.org
+
+
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+ /
+ GET
+ true
+ false
+ true
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /changes.html
+ GET
+ true
+ false
+ true
+ false
+ false
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ true
+ false
+ true
+ true
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ 0
+ true
+
+
+
+
+
+
+
+
+
+ true
+ johndoe
+ =
+ true
+ username
+
+
+ true
+ secret
+ =
+ true
+ password
+
+
+
+ www.example.com
+
+
+
+
+
+ /loginform.html
+ POST
+ true
+ false
+ true
+ false
+ false
+
+
+
+
+
+
+
diff --git a/bin/templates/build-webservice-test-plan.jmx b/bin/templates/build-webservice-test-plan.jmx
new file mode 100644
index 00000000000..b78dc077479
--- /dev/null
+++ b/bin/templates/build-webservice-test-plan.jmx
@@ -0,0 +1,184 @@
+
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+
+
+ host
+ wsf.cdyne.com
+ =
+ Host of Webservice
+
+
+
+
+
+
+
+
+ ${host}
+
+
+
+
+
+
+ 4
+
+
+
+ continue
+
+ false
+ 2
+
+ 5
+ 5
+ 1375525852000
+ 1375525852000
+ false
+
+
+
+
+
+ true
+
+
+
+ false
+ <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+ <soap:Body>
+ <GetCityForecastByZIP xmlns="http://ws.cdyne.com/WeatherWS/">
+ <ZIP>60601</ZIP>
+ </GetCityForecastByZIP>
+ </soap:Body>
+</soap:Envelope>
+ =
+
+
+
+
+
+
+
+
+
+ /WeatherWS/Weather.asmx
+ POST
+ true
+ false
+ true
+ false
+ false
+
+
+
+
+
+
+ Content-Type
+ text/xml; charset=utf-8
+
+
+ SOAPAction
+ "http://ws.cdyne.com/WeatherWS/GetCityForecastByZIP"
+
+
+
+
+
+
+ </GetCityForecastByZIPResult>
+
+ Verify content in response
+ Assertion.response_data
+ false
+ 16
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ true
+ true
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ true
+ true
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+
+
diff --git a/bin/templates/jdbc.jmx b/bin/templates/jdbc.jmx
new file mode 100644
index 00000000000..0ca8a700b58
--- /dev/null
+++ b/bin/templates/jdbc.jmx
@@ -0,0 +1,93 @@
+
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+ true
+ Select 1
+ 5000
+ jdbcConfig
+ jdbc:postgresql://hostname:port/dbname
+ org.postgresql.Driver
+ true
+ password
+ 10
+ 10000
+ DEFAULT
+ 60000
+ username
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ 1370729701000
+ 1370729701000
+ false
+
+
+
+
+
+ jdbcConfig
+ select column1 from table
+
+
+ Select Statement
+
+ col1
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ true
+ true
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+
+
diff --git a/bin/templates/mongodb.jmx b/bin/templates/mongodb.jmx
new file mode 100644
index 00000000000..bc52858c1d8
--- /dev/null
+++ b/bin/templates/mongodb.jmx
@@ -0,0 +1,194 @@
+
+
+
+
+ Shows how to setup a MongoDB Test
+ false
+ false
+
+
+
+
+
+
+
+ 127.0.0.1
+ db
+ false
+ 50
+ 0
+ 0
+ 120000
+ 0
+ false
+ 5
+ false
+ false
+ false
+ 0
+ 0
+ false
+ Configures connection to MongoDB
+
+
+
+ continue
+
+ false
+ -1
+
+ 1
+ 30
+ 1367357168000
+ 1367357168000
+ false
+ 300
+ 10
+
+
+
+ groovy
+
+
+ insert1
+ import com.mongodb.DB;
+import org.apache.jmeter.protocol.mongodb.config.MongoDBHolder;
+import com.mongodb.WriteResult;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBCollection;
+import com.mongodb.WriteConcern;
+import com.mongodb.WriteResult;
+
+// Get DB
+com.mongodb.DB db = org.apache.jmeter.protocol.mongodb.config.MongoDBHolder.getDBFromSource("db", "test");
+
+// Get collection to insert
+DBCollection coll = db.getCollection("testCollection");
+BasicDBObject doc = new BasicDBObject("name", "MongoDB").
+ append("type", "database").
+ append("count", 1).
+ append("info", new BasicDBObject("x", 203).append("y", 102));
+
+// Insert object
+WriteResult wr = coll.insert(doc, WriteConcern.ACKNOWLEDGED);
+
+// Set response data
+SampleResult.setResponseData(""+wr.toString(),"UTF-8");
+
+
+
+
+ "err" : null
+
+ Assertion.response_data
+ false
+ 2
+
+
+
+
+ groovy
+
+
+ count1
+ import com.mongodb.DB;
+import org.apache.jmeter.protocol.mongodb.config.MongoDBHolder;
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBObject;
+import com.mongodb.DBCollection;
+
+DB db = MongoDBHolder.getDBFromSource("db", "test");
+
+DBCollection coll = db.getCollection("testCollection");
+int size = coll.count();
+SampleResult.setResponseData(""+size,"UTF-8");
+
+
+
+
+ \d+
+
+ Assertion.response_data
+ false
+ 1
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ true
+ true
+ 0
+ true
+ true
+ true
+ true
+
+
+
+ Remove for Load Test
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ true
+ true
+ 0
+ true
+ true
+ true
+ true
+
+
+
+ Remove for Load Test
+
+
+
+
+
+
+
diff --git a/bin/templates/recording.jmx b/bin/templates/recording.jmx
new file mode 100644
index 00000000000..6bb61bbdfc7
--- /dev/null
+++ b/bin/templates/recording.jmx
@@ -0,0 +1,154 @@
+
+
+
+
+
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4
+
+
+
+
+ true
+
+
+
+ continue
+
+ false
+ 1
+
+ 1
+ 1
+ 1370726934000
+ 1370726934000
+ false
+
+
+
+
+
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ true
+ true
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+
+ true
+
+
+
+ 8888
+
+ (?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|woff)[\?;].*
+ (?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|woff)
+
+
+ true
+ 4
+ false
+
+ false
+ true
+ true
+ false
+ true
+
+
+ true
+
+
+
+ false
+
+ saveConfig
+
+
+ true
+ true
+ true
+
+ true
+ true
+ true
+ false
+ false
+ true
+ false
+ false
+ false
+ false
+ true
+ false
+ false
+ true
+ true
+ 0
+ true
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
diff --git a/bin/templates/templates.dtd b/bin/templates/templates.dtd
new file mode 100644
index 00000000000..221593377b4
--- /dev/null
+++ b/bin/templates/templates.dtd
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bin/templates/templates.xml b/bin/templates/templates.xml
new file mode 100644
index 00000000000..c1b4db6fc6e
--- /dev/null
+++ b/bin/templates/templates.xml
@@ -0,0 +1,180 @@
+
+
+
+
+
+
+ Recording
+ /bin/templates/recording.jmx
+ Template showing how to record
+
JMeter Configuration
+
+
JMeter Server Proxy port is set to 8888, you may want to change this
+
+
Browser Configuration
+
Configure your browser so that it uses the JMeter proxy, set:
+
+ This is a sample BeanShell sampler which shows how to use some of its features.
+
+ Please select a suitable location in the tree - e.g. Thread Group or WorkBench - before merging.
+
Add the groovy-all-XXX.jar in jmeter/lib folder, it is usually located in embeddable folder
+
Restart JMeter
+
Configure the Server address list, and tune MongoDB options in MongoDB Source Config
+
Modify the JSR223 samples (Insert into testCollection and Count from testCollection) to match your needs
+
+
Mongo Java Driver
+
+ MongoDB Source Config configures the connection to MongoDB for you and stores in MongoDB Source the configuration.
+ You can then access it in any Scripting element using:
+ com.mongodb.DB db = org.apache.jmeter.protocol.mongodb.config.MongoDBHolder.getDBFromSource("db", "test");
+
+ ]]>
+
+
+ Building an Advanced Web Test Plan
+ /bin/templates/build-adv-web-test-plan.jmx
+ Test plan from Building an advanced Web Test Plan section in user's manual
+
Configuration
+
In order to run the login sample inside plan, create a CSV file following description in loginData sample and put it in a folder of your choice then test running JMeter with:
+
+ ]]>
+
+
+ Building a SOAP WebService Test Plan
+ /bin/templates/build-webservice-test-plan.jmx
+ Test plan showing how to create a SOAP Webservice Test Plan
+
+ ]]>
+
+
+ Building an LDAP Test Plan
+ /bin/templates/build-ldap-test-plan.jmx
+ Test plan from Building an LDAP Test Plan section in user's manual
+
+ ]]>
+
+
+ Building an Extended LDAP Test Plan
+ /bin/templates/build-ldap-ext-test-plan.jmx
+ Test plan from Building an Extended LDAP Test Plan section in user's manual
+
+The Test Plan object has a checkbox called "Functional Testing". If selected, it
+will cause JMeter to record the data returned from the server for each sample. If you have
+selected a file in your test listeners, this data will be written to file. This can be useful if
+you are doing a small run to ensure that JMeter is configured correctly, and that your server
+is returning the expected results. The consequence is that the file will grow huge quickly, and
+JMeter's performance will suffer. This option should be off if you are doing stress-testing (it
+is off by default).
+
+
+If you are not recording the data to file, this option makes no difference.
+
+
+You can also use the Configuration button on a listener to decide what fields to save.
+
+Thread group elements are the beginning points of any test plan.
+All controllers and samplers must be under a thread group.
+Other elements, e.g. Listeners, may be placed directly under the test plan,
+in which case they will apply to all the thread groups.
+As the name implies, the thread group
+element controls the number of threads JMeter will use to execute your test. The
+controls for a thread group allow you to:
+
+
+
+Set the number of threads
+
+
+
+
+Set the ramp-up period
+
+
+
+
+Set the number of times to execute the test
+
+
+
+
+
+
+Each thread will execute the test plan in its entirety and completely independently
+of other test threads. Multiple threads are used to simulate concurrent connections
+to your server application.
+
+
+The ramp-up period tells JMeter how long to take to "ramp-up" to the full number of
+threads chosen. If 10 threads are used, and the ramp-up period is 100 seconds, then
+JMeter will take 100 seconds to get all 10 threads up and running. Each thread will
+start 10 (100/10) seconds after the previous thread was begun. If there are 30 threads
+and a ramp-up period of 120 seconds, then each successive thread will be delayed by 4 seconds.
+
+
+Ramp-up needs to be long enough to avoid too large a work-load at the start
+of a test, and short enough that the last threads start running before
+the first ones finish (unless one wants that to happen).
+
+
+
+
+Start with Ramp-up = number of threads and adjust up or down as needed.
+
+
+
+By default, the thread group is configured to loop once through its elements.
+
+
+Version 1.9 introduces a test run
+
+scheduler
+
+.
+ 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.
+
+
+Alternatively, one can use the relative delay and duration fields.
+ Note that delay overrides start-time, and duration over-rides end-time.
+
+
+JMeter has two types of Controllers: Samplers and Logical Controllers.
+These drive the processing of a test.
+
+
+
+Samplers tell JMeter to send requests to a server. For
+example, add an HTTP Request Sampler if you want JMeter
+to send an HTTP request. You can also customize a request by adding one
+or more Configuration Elements to a Sampler. For more
+information, see
+
+
+Samplers
+
+.
+
+
+Logical Controllers let you customize the logic that JMeter uses to
+decide when to send requests. For example, you can add an Interleave
+Logic Controller to alternate between two HTTP Request Samplers.
+For more information, see
+
+Logical Controllers
+
+.
+
+
+Samplers tell JMeter to send requests to a server and wait for a response.
+They are processed in the order they appear in the tree.
+Controllers can be used to modify the number of repetitions of a sampler.
+
+
+
+
+JMeter samplers include:
+
+
+
+
+
+FTP Request
+
+
+
+
+HTTP Request
+
+
+
+
+JDBC Request
+
+
+
+
+Java object request
+
+
+
+
+LDAP Request
+
+
+
+
+SOAP/XML-RPC Request
+
+
+
+
+WebService (SOAP) Request
+
+
+
+
+
+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.
+
+
+
+If you are going to send multiple requests of the same type (for example,
+HTTP Request) to the same server, consider using a Defaults Configuration
+Element. Each controller has one or more Defaults elements (see below).
+
+
+Remember to add a Listener to your test plan to view and/or store the
+results of your requests to disk.
+
+
+If you are interested in having JMeter perform basic validation on
+the response of your request, add an
+
+Assertion
+
+ to
+the sampler. For example, in stress testing a web application, the server
+may return a successful "HTTP Response" code, but the page may have errors on it or
+may be missing sections. You could add assertions to check for certain HTML tags,
+common error strings, and so on. JMeter lets you create these assertions using regular
+expressions.
+
+Logic Controllers let you customize the logic that JMeter uses to
+decide when to send requests.
+Logic Controllers can change the order of requests coming from their
+child elements. They can modify the requests themselves, cause JMeter to repeat
+requests, etc.
+
+
+
+To understand the effect of Logic Controllers on a test plan, consider the
+following test tree:
+
+The first thing about this test is that the login request will be executed only
+the first time through. Subsequent iterations will skip it. This is due to the
+effects of the
+Once Only Controller
+.
+
+
+After the login, the next Sampler loads the search page (imagine a
+web application where the user logs in, and then goes to a search page to do a search). This
+is just a simple request, not filtered through any Logic Controller.
+
+
+After loading the search page, we want to do a search. Actually, we want to do
+two different searches. However, we want to re-load the search page itself between
+each search. We could do this by having 4 simple HTTP request elements (load search,
+search "A", load search, search "B"). Instead, we use the
+Interleave Controller
+ which passes on one child request each time through the test. It keeps the
+ordering (ie - it doesn't pass one on at random, but "remembers" its place) of its
+child elements. Interleaving 2 child requests may be overkill, but there could easily have
+been 8, or 20 child requests.
+
+
+Note the
+HTTP Request Defaults
+ that
+belongs to the Interleave Controller. Imagine that "Search A" and "Search B" share
+the same PATH info (an HTTP request specification includes domain, port, method, protocol,
+path, and arguments, plus other optional items). This makes sense - both are search requests,
+ hitting the same back-end search engine (a servlet or cgi-script, let's say). Rather than
+ configure both HTTP Samplers with the same information in their PATH field, we
+ can abstract that information out to a single Configuration Element. When the Interleave
+ Controller "passes on" requests from "Search A" or "Search B", it will fill in the blanks with
+ values from the HTTP default request Configuration Element. So, we leave the PATH field
+ blank for those requests, and put that information into the Configuration Element. In this
+case, this is a minor benefit at best, but it demonstrates the feature.
+
+
+The next element in the tree is another HTTP default request, this time added to the
+Thread Group itself. The Thread Group has a built-in Logic Controller, and thus, it uses
+this Configuration Element exactly as described above. It fills in the blanks of any
+Request that passes through. It is extremely useful in web testing to leave the DOMAIN
+field blank in all your HTTP Sampler elements, and instead, put that information
+into an HTTP default request element, added to the Thread Group. By doing so, you can
+test your application on a different server simply by changing one field in your Test Plan.
+Otherwise, you'd have to edit each and every Sampler.
+
+
+The last element is a
+HTTP Cookie Manager
+. A Cookie Manager should be added to all web tests - otherwise JMeter will
+ignore cookies. By adding it at the Thread Group level, we ensure that all HTTP requests
+will share the same cookies.
+
+The Test Fragment element is a special type of
+
+controller
+
+ that
+exists on the Test Plan tree at the same level as the Thread Group element. It is distinguished
+from a Thread Group in that it is not executed unless it is
+referenced by either a
+Module Controller
+ or an
+Include_Controller
+.
+
+
+
+This element is purely for code re-use within Test Plans and was introduced in Version 2.5
+
+Listeners provide access to the information JMeter gathers about the test cases while
+JMeter runs. The
+Graph Results
+ listener plots the response times on a graph.
+The "View Results Tree" Listener shows details of sampler requests and
+responses, and can display basic HTML and XML representations of the
+response.
+Other listeners provide summary or aggregation information.
+
+
+
+
+Additionally, listeners can direct the data to a file for later use.
+Every listener in JMeter provides a field to indicate the file to store data to.
+There is also a Configuration button which can be used to choose which fields to save, and whether to use CSV or XML format.
+
+
+Note that all Listeners save the same data; the only difference is in the way the data is presented on the screen.
+
+
+
+
+
+
+Listeners can be added anywhere in the test, including directly under the test plan.
+They will collect data only from elements at or below their level.
+
+
+
+There are several
+
+listeners
+
+
+that come with JMeter.
+
+By default, a JMeter thread sends requests without pausing between each request.
+We recommend that you specify a delay by adding one of the available timers to
+your Thread Group. If you do not add a delay, JMeter could overwhelm your server by
+making too many requests in a very short amount of time.
+
+
+The timer will cause JMeter to delay a certain amount of time
+
+before
+
+ each
+sampler which is in its
+
+scope
+
+.
+
+
+
+If you choose to add more than one timer to a Thread Group, JMeter takes the sum of
+the timers and pauses for that amount of time before executing the samplers to which the timers apply.
+Timers can be added as children of samplers or controllers in order to restrict the samplers to which they are applied.
+
+
+
+
+To provide a pause at a single place in a test plan, one can use the
+Test Action
+ Sampler.
+
+
+Assertions allow you to assert facts about responses received from the
+server being tested. Using an assertion, you can essentially "test" that your
+application is returning the results you expect it to.
+
+
+For instance, you can assert that the response to a query will contain some
+particular text. The text you specify can be a Perl-style regular expression, and
+you can indicate that the response is to contain the text, or that it should match
+the whole response.
+
+
+You can add an assertion to any Sampler. For example, you can
+add an assertion to a HTTP Request that checks for the text, "</HTML>". JMeter
+will then check that the text is present in the HTTP response. If JMeter cannot find the
+text, then it will mark this as a failed request.
+
+
+
+Note that assertions apply to all samplers which are in its
+
+scope
+
+.
+To restrict the assertion to a single sampler, add the assertion as a child of the sampler.
+
+
+
+To view the assertion results, add an Assertion Listener to the Thread Group.
+Failed Assertions will also show up in the Tree View and Table Listeners,
+and will count towards the error %age for example in the Aggregate and Summary reports.
+
+
+A configuration element works closely with a Sampler. Although it does not send requests
+(except for
+HTTP Proxy Server
+), it can add to or modify requests.
+
+
+A configuration element is accessible from only inside the tree branch where you place the element.
+For example, if you place an HTTP Cookie Manager inside a Simple Logic Controller, the Cookie Manager will
+only be accessible to HTTP Request Controllers you place inside the Simple Logic Controller (see figure 1).
+The Cookie Manager is accessible to the HTTP requests "Web Page 1" and "Web Page 2", but not "Web Page 3".
+
+
+Also, a configuration element inside a tree branch has higher precedence than the same element in a "parent"
+branch. For example, we defined two HTTP Request Defaults elements, "Web Defaults 1" and "Web Defaults 2".
+Since we placed "Web Defaults 1" inside a Loop Controller, only "Web Page 2" can access it. The other HTTP
+requests will use "Web Defaults 2", since we placed it in the Thread Group (the "parent" of all other branches).
+
+
+Figure 1 -
+ Test Plan Showing Accessability of Configuration Elements
+
+
+
+
+The
+User Defined Variables
+ Configuration element is different.
+It is processed at the start of a test, no matter where it is placed.
+For simplicity, it is suggested that the element is placed only at the start of a Thread Group.
+
+
+A Pre-Processor executes some action prior to a Sampler Request being
+made.
+If a Pre-Processor is attached to a Sampler element, then it will
+execute just prior to that sampler element running.
+A Pre-Processor is most often used to modify the settings of a Sample
+Request just before it runs, or to update variables that aren't
+extracted from response text.
+See the
+
+
+scoping rules
+
+
+ for more details on when Pre-Processors are executed.
+
+A Post-Processor executes some action after a Sampler Request has been made.
+If a Post-Processor is attached to a Sampler element, then it will execute just after that sampler element runs.
+A Post-Processor is most often used to process the response data, often to extract values from it.
+See the
+
+
+scoping rules
+
+
+ for more details on when Post-Processors are executed.
+
+Please note that Timers, Assertions, Pre- and Post-Processors are only processed if there is a sampler to which they apply.
+Logic Controllers and Samplers are processed in the order in which they appear in the tree.
+Other test elements are processed according to the scope in which they are found, and the type of test element.
+[Within a type, elements are processed in the order in which they appear in the tree].
+
+
+
+The JMeter test tree contains elements that are both hierarchical and
+ordered. Some elements in the test trees are strictly hierarchical
+(Listeners, Config Elements, Post-Procesors, Pre-Processors, Assertions,
+ Timers), and some are primarily ordered (controllers, samplers). When
+you create your test plan, you will create an ordered list of sample
+request (via Samplers) that represent a set of steps to be executed.
+These requests are often organized within controllers that are also
+ordered. Given the following test tree:
+
+
+Example test tree
+
+
+The order of requests will be, One, Two, Three, Four.
+
+
+Some controllers affect the order of their subelements, and you can read about these specific controllers in
+
+the component reference
+
+.
+
+
+Other elements are hierarchical. An Assertion, for instance, is hierarchical in the test tree.
+If its parent is a request, then it is applied to that request. If its
+parent is a Controller, then it affects all requests that are descendants of
+that Controller. In the following test tree:
+
+
+Hierarchy example
+
+
+Assertion #1 is applied only to Request One, while Assertion #2 is applied to Requests Two and Three.
+
+
+Another example, this time using Timers:
+
+
+complex example
+
+
+In this example, the requests are named to reflect the order in which
+they will be executed. Timer #1 will apply to Requests Two, Three, and
+Four (notice how order is irrelevant for hierarchical elements).
+Assertion #1 will apply only to Request Three. Timer #2 will affect all
+ the requests.
+
+
+Hopefully these examples make it clear how configuration (hierarchical)
+elements are applied. If you imagine each Request being passed up the
+tree branches, to its parent, then to its parent's parent, etc, and each
+ time collecting all the configuration elements of that parent, then you
+ will see how it works.
+
+
+
+The Configuration elements Header Manager, Cookie Manager and Authorization manager are
+treated differently from the Configuration Default elements.
+The settings from the Configuration Default elements are merged into a set of values that the Sampler has access to.
+However, the settings from the Managers are not merged.
+If more than one Manager is in the scope of a Sampler,
+only one Manager is used, but there is currently no way to specify
+
+which
+
+ is used.
+
+
+
+
+JMeter
+
+properties
+
+ are defined in jmeter.properties (see
+
+Gettting Started - Configuring JMeter
+
+ for more details).
+
+
+
+
+Properties are global to jmeter, and are mostly used to define some of the defaults JMeter uses.
+For example the property remote_hosts defines the servers that JMeter will try to run remotely.
+Properties can be referenced in test plans
+- see
+
+Functions - read a property
+
+ -
+but cannot be used for thread-specific values.
+
+
+
+
+JMeter
+
+variables
+
+ are local to each thread. The values may be the same for each thread, or they may be different.
+
+
+
+
+If a variable is updated by a thread, only the thread copy of the variable is changed.
+For example the
+Regular Expression Extractor
+ Post-Processor
+will set its variables according to the sample that its thread has read, and these can be used later
+by the same thread.
+For details of how to reference variables and functions, see
+
+Functions and Variables
+
+
+
+
+
+
+Note that the values defined by the
+Test Plan
+ and the
+User Defined Variables
+ configuration element
+are made available to the whole test plan at startup.
+If the same variable is defined by multiple UDV elements, then the last one takes effect.
+Once a thread has started, the initial set of variables is copied to each thread.
+Other elements such as the
+
+User Parameters
+ Pre-Processor or
+Regular Expression Extractor
+ Post-Processor
+may be used to redefine the same variables (or create new ones). These redefinitions only apply to the current thread.
+
+
+
+
+The
+
+setProperty
+
+ function can be used to define a JMeter property.
+These are global to the test plan, so can be used to pass information between threads - should that be needed.
+
+
+
+
+
Both variables and properties are case-sensitive.
+
+
+Variables don't have to vary - they can be defined once, and if left alone, will not change value.
+So you can use them as short-hand for expressions that appear frequently in a test plan.
+Or for items which are constant during a run, but which may vary between runs.
+For example, the name of a host, or the number of threads in a thread group.
+
+
+
+
+When deciding how to structure a Test Plan,
+make a note of which items are constant for the run, but which may change between runs.
+Decide on some variable names for these -
+perhaps use a naming convention such as prefixing them with C_ or K_ or using uppercase only
+to distinguish them from variables that need to change during the test.
+Also consider which items need to be local to a thread -
+for example counters or values extracted with the Regular Expression Post-Processor.
+You may wish to use a different naming convention for these.
+
+
+
+
+For example, you might define the following on the Test Plan:
+
+
+HOST www.example.com
+THREADS 10
+LOOPS 20
+
+
+
+You can refer to these in the test plan as ${HOST} ${THREADS} etc.
+If you later want to change the host, just change the value of the HOST variable.
+This works fine for small numbers of tests, but becomes tedious when testing lots of different combinations.
+One solution is to use a property to define the value of the variables, for example:
+
+
+
+
+
+ Apache JMeter
+
+ is a 100% pure Java desktop application designed
+ to load test functional behavior and measure performance. It was
+ originally designed for testing Web Applications but has
+ since expanded to other test functions.
+
+
+
+ What can I do with it?
+
+
+
+ Apache JMeter may be used to test performance both on static and dynamic
+ resources (files, Servlets, Perl scripts, Java Objects, Data Bases and
+ Queries, FTP Servers and more). It can be used to simulate a heavy
+load on a server, network or object to test its strength or to analyze
+overall performance under different load types. You can use it to make a
+graphical analysis of performance or to test your server/script/object
+behavior under heavy concurrent load.
+
+
+ Full
+
+ Swing
+
+ and lightweight component support (precompiled JAR uses packages
+
+
+ javax.swing.*
+
+ ).
+
+
+
+
+ Full
+
+ multithreading
+
+ framework allows concurrent sampling by many threads and
+ simultaneous sampling of different functions by seperate thread groups.
+
+
+
+
+ Careful
+
+ GUI
+
+ design allows faster operation and more precise timings.
+
+
+
+
+ Caching and offline analysis/replaying of test results.
+
+
+
+
+ Apache JMeter
+
+ is a 100% pure Java desktop application designed
+ to load test functional behavior and measure performance. It was
+ originally designed for testing Web Applications but has
+ since expanded to other test functions.
+
+
+
+ What can I do with it?
+
+
+
+ Apache JMeter may be used to test performance both on static and dynamic
+ resources (files, Servlets, Perl scripts, Java Objects, Data Bases and
+ Queries, FTP Servers and more). It can be used to simulate a heavy
+load on a server, network or object to test its strength or to analyze
+overall performance under different load types. You can use it to make a
+graphical analysis of performance or to test your server/script/object
+behavior under heavy concurrent load.
+
+
+ Full
+
+ Swing
+
+ and lightweight component support (precompiled JAR uses packages
+
+
+ javax.swing.*
+
+ ).
+
+
+
+
+ Full
+
+ multithreading
+
+ framework allows concurrent sampling by many threads and
+ simultaneous sampling of different functions by seperate thread groups.
+
+
+
+
+ Careful
+
+ GUI
+
+ design allows faster operation and more precise timings.
+
+
+
+
+ Caching and offline analysis/replaying of test results.
+
+
+
+
+ Apache JMeter
+
+ is a 100% pure Java desktop application designed
+ to load test functional behavior and measure performance. It was
+ originally designed for testing Web Applications but has
+ since expanded to other test functions.
+
+
+
+ What can I do with it?
+
+
+
+ Apache JMeter may be used to test performance both on static and dynamic
+ resources (files, Servlets, Perl scripts, Java Objects, Data Bases and
+ Queries, FTP Servers and more). It can be used to simulate a heavy
+load on a server, network or object to test its strength or to analyze
+overall performance under different load types. You can use it to make a
+graphical analysis of performance or to test your server/script/object
+behavior under heavy concurrent load.
+
+
+ Full
+
+ Swing
+
+ and lightweight component support (precompiled JAR uses packages
+
+
+ javax.swing.*
+
+ ).
+
+
+
+
+ Full
+
+ multithreading
+
+ framework allows concurrent sampling by many threads and
+ simultaneous sampling of different functions by seperate thread groups.
+
+
+
+
+ Careful
+
+ GUI
+
+ design allows faster operation and more precise timings.
+
+
+
+
+ Caching and offline analysis/replaying of test results.
+
+
+Note to developers:
+This is a very brief overview.
+There is more infomation on the JMeter Wiki or in eclipse.readme in root folder of sources.
+
+
Building Add-Ons
+
+There is no need to build JMeter if you just want to build an add-on.
+Just download the binary archive and add the jars to the classpath or use Maven artifacts to build your add-ons.
+You may want to also download the source so it can be used by the IDE.
+
+
+
See the extras/addons* files in the source tree for some suggestions
+
+
Building JMeter
+
Acquiring the source
+
The full source is distributed alongside the binary, it can also be downloaded from SVN or found on Apache JMeter Github Mirror .
+
+The source archive and SVN do not contain any of the required library files.
+These need to be downloaded by running the Ant command:
+
+ant download_jars
+
+
+
Or you can download the binary distribution archive for a release and unpack it into the same directory structure as the source.
+This will ensure that the lib/ directory contains the jar files needed for running JMeter.
+There are a few additional jars that are needed to build JMeter, download these using:
+
+ant download_jars
+
+This will retrieve any missing jars.
+
+
Compiling and packaging JMeter using Ant
+
+JMeter can be built entirely using Ant.
+The basic command is:
+
+ant [install]
+
+See build.xml for the other targets that can be used.
+
+
Compiling and packaging JMeter using Eclipse
+
+Once you have downloaded the source from SVN or the release archives and run the ant download_jars target to
+install the dependent jars, you can configure Eclipse. The easiest way to do this is to replace the Eclipse .classpath
+file with the eclipse.classpath file provided with JMeter. This will set up the source-paths and most of the libraries.
+
+Ensure your read eclipse.readme for project configuration.
+
+
+
\ No newline at end of file
diff --git a/docs/changes.html b/docs/changes.html
new file mode 100644
index 00000000000..75e16864ac8
--- /dev/null
+++ b/docs/changes.html
@@ -0,0 +1,577 @@
+
+Apache JMeter
+ -
+ ChangesMain content
New Async BackendListener with Graphite implementation
+
A new Async BackendListener has been added to allow sending result data to a backend listener.
+JMeter ships with a GraphiteBackendListenerClient that allows sending results to a Graphite server using Pickle ot Plaintext protocols.
+You can implement your own backend by extending AbstractBackendListenerClient. This backend could be
+a database (JDBC), a Message Oriented Middleware (JMS), a Webservice or anything you want.
+
+
+
This is the kind of Live Dashboard you can obtain using Grafana and InfluxDB
+Read this for more details.
+Grafana dashboard
+
+
Core Improvements
+
+
New connect time metric
+
Starting with this version a new metric called connectTime has been added. It represents the time to establish connection.
+By default it is not saved to CSV or XML, to have it saved add to user.properties:
+
+jmeter.save.saveservice.connect_time=true
+
+
+
+
+
+
Aggregate Graph and Report
+
The listeners Aggregate Graph and Aggregate Report previously showed only the 90 percentile (historical behavior), the 95 percentile and the 99 percentile have been added and are customizable.
+To setup the percentiles value you want, add to user.properties:
+
+aggregate_rpt_pct1=90
+aggregate_rpt_pct2=95
+aggregate_rpt_pct3=99
+
+
+
+
+
HTTP(S) Test Script Recorder
+
Now component is able to detect authentication schemes and automatically adds a pre-configured HTTP Authorization Manager with the correct Mechanism.
+
+
+
HTTP Request
+
The CalDAV verbs (Calendar extensions to WebDAV) REPORT and MKCALENDAR have been added in the HTTP Request sampler.
+
+
+
+
JDBC Request
+
The ResultSet can be get as a object, this allows to handle more easily the results after in BeanShell, JSR223 scripts...
+
+
+
+
Distributed Testing
+
To allow better usage of Distributed Testing in the cloud, retry behaviour has been added when starting test on servers.
+Read this for more details.
+
+
+
+
Distributed Testing performance
+
Since JMeter 2.13, Stripping modes (StrippingBatch being the default mode) now also strip responses from SubResults improving consumed network bandwidth.
+
+
+
Documentation refresh
+
A new style for website (responsive and more up to date) has been created by Felix Schumacher.
+Documentations have been refreshed particularly:
+
The Module Controller now shows the target controller in a tree view (instead of combo list).
+
+
+
+
Toolbar
+
JMeter's toolbar has been refreshed for some icons (start, toogle, etc.). Three sizes are now avialable for the icons: 22x22, 32x32 and 48x48.
+The property to define your prefered size is:
+
jmeter.toolbar.icons.size=value
+with the value 22x22 (default size), 32x32 or 48x48.
+
The toolbar with 22x22 pixels icons
+
+
+
+
The toolbar with 32x32 pixels icons
+
+
+
+
The toolbar with 48x48 pixels icons
+
+
+
+
HTTP(S) Test Script Recorder
+
If your Test Plan does not contains a Recording Controller, a new warning message will appear if the
+ HTTP(S) Test Script Recorder is configured to send the samples into a Recording Controller.
+
+
+
+
+
+
Incompatible changes
+
+
+
Since 2.13, Aggregate Graph, Summary Report and Aggregate Report now export percentages to %, before they exported the decimal value which differed from what was shown in GUI
+
Third party plugins may be impacted by fix of
+ Bug
+ 57586, ensure that your subclass of HttpTestSampleGui implements ItemListener if you relied on parent class doing so.
+
Report package has been removed, ApacheJMeter_report.jar is not generated anymore as a consequence, see
+ Bug
+ 57269
+
+
+
+
+
Improvements
+
+
HTTP Samplers and Test Script Recorder
+
+
+ Bug
+ 25430
+ -
+ HTTP(S) Test Script Recorder : Make it populate HTTP Authorization Manager. Partly based on a patch from Dzmitry Kashlach (dzmitrykashlach at gmail.com)
+
+ Bug
+ 57381
+ -
+ HTTP(S) Test Script Recorder should display an error if Target Controller references a Recording Controller and no Recording Controller exists. Contributed by Ubik Load Pack (support at ubikloadpack.com)
+ Bug
+ 57565
+ -
+ SamplerCreator : Add method to allow implementations to add children to created sampler
+
+ Bug
+ 57606
+ -
+ HTTPSamplerBase#errorResult changes the sample label on exception
+
+ Bug
+ 57613
+ -
+ HTTP Sampler : Added CalDAV verbs (REPORT, MKCALENDAR). Contributed by Richard Brigham (richard.brigham at teamaol.com)
+
+ Bug
+ 48799
+ -
+ Add time to establish connection to available sample metrics. Implemented by Andrey Pokhilko (andrey at blazemeter.com) and contributed by BlazeMeter Ltd. and Pieter Ennes (apache.org at spam.ennes.nl)
+
+ Bug
+ 57500
+ -
+ Introduce retry behavior for distributed testing. Implemented by Andrey Pokhilko and Dzimitry Kashlach and contributed by BlazeMeter Ltd.
+
+
+
Other samplers
+
+
+ Bug
+ 57322
+ -
+ JDBC Test elements: add ResultHandler to deal with ResultSets(cursors) returned by callable statements. Contributed by Yngvi Þór Sigurjónsson (blitzkopf at gmail.com)
+
+
+
Controllers
+
+
+ Bug
+ 57561
+ -
+ Module controller UI : Replace combobox by tree. Contributed by Maciej Franek (maciej.franek at gmail.com)
+
+ Bug
+ 57648
+ -
+ TestFragment should be disabled when created. Contributed by Ubik Load Pack (support at ubikloadpack.com)
+
+
+
Listeners
+
+
+ Bug
+ 55932
+ -
+ Create a Async BackendListener to allow easy plug of new listener (Graphite, JDBC, Console,...)
+ Bug
+ 57217
+ -
+ Aggregate graph and Aggregate report improvements (3 configurable percentiles, same data in both, factor out code). Contributed by Ubik Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 57537
+ -
+ BackendListener : Allow implementations to drop samples
+ Bug
+ 57385
+ -
+ Getting empty thread name in xml result for HTTP requests with "Follow Redirects" set. Contributed by Ubik Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 57579
+ -
+ NullPointerException error is raised on main sample if "RETURN_NO_SAMPLE" is used (default) and "Use Cache-Control / Expires header..." is checked in HTTP Cache Manager
+
+
+
Other Samplers
+
+
+
+
Controllers
+
+
+ Bug
+ 57447
+ -
+ Use only the user listed DNS Servers, when "use custom DNS resolver" option is enabled.
+
+
+
Listeners
+
+
+ Bug
+ 57262
+ -
+ Aggregate Report, Aggregate Graph and Summary Report export : headers use keys instead of labels
+
+ Bug
+ 57346
+ -
+ Summariser : The + (difference) reports show wrong elapsed time and throughput
+
+ Bug
+ 57449
+ -
+ Distributed Testing: Stripped modes do not strip responses from SubResults (affects load tests that use Download of embedded resources). Contributed by Ubik Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 57562
+ -
+ View Results Tree CSS/JQuery Tester : Nothing happens when there is an error in syntax and an exception occurs in jmeter.log
+
+ Bug
+ 57514
+ -
+ Aggregate Graph, Summary Report and Aggregate Report show wrong percentage reporting in saved file
+ Bug
+ 57607
+ -
+ Constant Throughput Timer : Wrong throughput computed in shared modes due to rounding error
+
+
+
General
+
+
+ Bug
+ 57365
+ -
+ Selected LAF is not correctly setup due to call of UIManager.setLookAndFeel too late. Contributed by Ubik Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 57364
+ -
+ Options < Look And Feel does not update all windows LAF. Contributed by Ubik Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 57394
+ -
+ When constructing an instance with ClassTools#construct(String, int) the integer was ignored and the default constructor was used instead.
+
+ Bug
+ 57440
+ -
+ OutOfMemoryError after introduction of JSyntaxTextArea in LoggerPanel due to disableUndo not being taken into account.
+
+ Bug
+ 57569
+ -
+ FileServer.reserveFile - inconsistent behaviour when hasHeader is true
+
+ Bug
+ 57555
+ -
+ Cannot use JMeter 2.12 as a maven dependency. Contributed by Pascal Schumacher (pascal.schumacher at t-systems.com)
+
+ Bug
+ 57608
+ -
+ Fix start script compatibility with old Unix shells, e.g. on Solaris
+
+
+
+
+
Thanks
+
We thank all contributors mentioned in bug and improvement sections above:
+
Pascal Schumacher (pascal.schumacher at t-systems.com)
+
Maciej Franek (maciej.franek at gmail.com)
+
Richard Brigham (richard.brigham at teamaol.com)
+
Pieter Ennes (apache.org at spam.ennes.nl)
+
+
+
+We also thank bug reporters who helped us improve JMeter.
+For this release we want to give special thanks to the following reporters for the clear reports and tests made after our fixes:
+
+
Chaitanya Bhatt (bhatt.chaitanya at gmail.com) for his thorough testing of new BackendListener and Graphite Client implementation.
+
Marcelo Jara (marcelojara at hotmail.com) for his clear report on
+ Bug
+ 57607.
+
+
+Apologies if we have omitted anyone else.
+
+
+
+
Known bugs
+
+
+
The Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
+The numbers that appear to the left of the green box are the number of active threads / total number of threads,
+the total number of threads only applies to a locally run test, otherwise it will show 0 (see
+ Bug
+ 55510).
+
+
+
+Note that there is a bug in Java
+on some Linux systems that manifests itself as the following error when running the test cases or JMeter itself:
+
+ [java] WARNING: Couldn't flush user prefs:
+ java.util.prefs.BackingStoreException:
+ java.lang.IllegalArgumentException: Not supported: indent-number
+
+This does not affect JMeter operation. This issue is fixed since Java 7b05.
+
+
+
+Note that under some windows systems you may have this WARNING:
+
+java.util.prefs.WindowsPreferences
+WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0
+x80000002. Windows RegCreateKeyEx(...) returned error code 5.
+
+The fix is to run JMeter as Administrator, it will create the registry key for you, then you can restart JMeter as a normal user and you won't have the warning anymore.
+
+
+
+With Java 1.6 and Gnome 3 on Linux systems, the JMeter menu may not work correctly (shift between mouse's click and the menu).
+This is a known Java bug (see
+ Bug
+ 54477).
+A workaround is to use a Java 7 runtime (OpenJDK or Oracle JDK).
+
+
+
+With Oracle Java 7 and Mac Book Pro Retina Display, the JMeter GUI may look blurry.
+This is a known Java bug, see Bug JDK-8000629.
+A workaround is to use a Java 7 update 40 runtime which fixes this issue.
+
+
+
+You may encounter the following error: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
+ if you run a HTTPS request on a web site with a SSL certificate (itself or one of SSL certificates in its chain of trust) with a signature
+ algorithm using MD2 (like md2WithRSAEncryption) or with a SSL certificate with a size lower than 1024 bits.
+This error is related to increased security in Java 7 version u16 (MD2) and version u40 (Certificate size lower than 1024 bits), and Java 8 too.
+
+To allow you to perform your HTTPS request, you can downgrade the security of your Java installation by editing
+the Java jdk.certpath.disabledAlgorithms property. Remove the MD2 value or the constraint on size, depending on your case.
+
+This property is in this file:
+
\ No newline at end of file
diff --git a/docs/changes_history.html b/docs/changes_history.html
new file mode 100644
index 00000000000..a7b71b245b2
--- /dev/null
+++ b/docs/changes_history.html
@@ -0,0 +1,7245 @@
+
+Apache JMeter
+ -
+ History of Previous ChangesMain content
The Critical Section Controller allow to serialize the execution of a section in your tree.
+Only one instance of the section will be executed at the same time during the test.
+
+
+
DNS Cache Manager
+
The new configuration element DNS Cache Manager(see
+ Bug
+ 56841) improves the testing of:
+
+
CDN (Content Delivery Network)
+
DNS load balancing.
+
Load Balancers like Amazon Elastic Load Balancer
+
+
+
+
Core Improvements
+
+
Smarter Recording of Http Test Plans
+
Test Script Recorder has been improved in many ways
+
+
Better matching of Variables in Requests, making Test Script Recorder variabilize your sampler during recording more versatile
+
Ability to filter from View Results Tree the Samples that are excluded from recording, this lets you concentrate on recorded Samplers analysis and not bother with useless Sample Results
+
+
+
Better defaults for recording, since this version Recorder will number created Samplers letting you find them much easily in View Results Tree.
+ Grouping of Samplers under Transaction Controller will be smarter making all requests emitted by a web page be children as new Transaction Controller
+
+
+
Support of Webdav requests
+
You can now test against WebDav server using HttpClient4 Implementation of Http Request
+
+
+
Better handling of embedded resources
+
When download embedded resources is checked, JMeter now uses User Agent header to download or not resources embedded within conditionnal comments as per About conditional comments.
+
+
Ability to customize Cache Manager (Browser cache simulation) handling of cached resources
+
You can now configure the behaviour of JMeter when a resource is found in Cache, this can be controlled with cache_manager.cached_resource_mode property
+
+
+
+
JMS Publisher / JMS Point-to-Point
+
Add JMSPriority and JMSExpiration fields for these samplers.
+
+
+
+
+
Mail Reader Sampler
+
You can now specify the number of messages that want you retrieve (before all messages were retrieved).
+In addition, you can fetch only the message header now.
+
+
+
SMTP Sampler
+
Adding the Connection timeout and the Read timeout to the SMTP Sampler.
+
+
+
Synchronizing Timer
+
Adding a timeout to define the maximum time to waiting of the group of virtual users.
+
+
+
Performance improvements
+
A big improvement in performances of Functions has been made by lifting useless synchronization. It concerns all functions except __StringFromFile, __XPath and __BeanShell, see
+ Bug
+ 57114
+
__jexl2 performances have been improved to avoid contention point, see
+ Bug
+ 56708
+
+
GUI Improvements
+
+
Undo/Redo support
+
Undo / Redo has been introduced and allows user to undo/redo changes made on Test Plan Tree. This feature (ALPHA MODE) is disabled by default, to enable it set property undo.history.size=25
+
+
+
View Results Tree
+
Improve the ergonomics of View Results Tree by changing placement of Renderers and allowing custom ordering
+(with the property view.results.tree.renderers_order).
+
+
+
Response Time Graph
+
Adding the ability for the Response Time Graph listener to save/restore format its settings in/from the jmx file.
+
+
+
Log Viewer
+
Starting with this version, the last lines of JMeter's log file (jmeter.log) can be viewed directly in GUI by clicking on Warning icon in the upper right corner.
+This will unfold the Log Viewer panel and show logs.
+
+
+
File Opening
+
Now, "Open File dialog" uses last opened file folder as start folder, see
+ Bug
+ 52707
+
+
+
+
Known bugs
+
+
+
The Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
+The numbers that appear to the left of the green box are the number of active threads / total number of threads,
+the total number of threads only applies to a locally run test, otherwise it will show 0 (see
+ Bug
+ 55510).
+
+
+
+Note that there is a bug in Java
+on some Linux systems that manifests itself as the following error when running the test cases or JMeter itself:
+
+ [java] WARNING: Couldn't flush user prefs:
+ java.util.prefs.BackingStoreException:
+ java.lang.IllegalArgumentException: Not supported: indent-number
+
+This does not affect JMeter operation. This issue is fixed since Java 7b05.
+
+
+
+Note that under some windows systems you may have this WARNING:
+
+java.util.prefs.WindowsPreferences
+WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0
+x80000002. Windows RegCreateKeyEx(...) returned error code 5.
+
+The fix is to run JMeter as Administrator, it will create the registry key for you, then you can restart JMeter as a normal user and you won't have the warning anymore.
+
+
+
+With Java 1.6 and Gnome 3 on Linux systems, the JMeter menu may not work correctly (shift between mouse's click and the menu).
+This is a known Java bug (see
+ Bug
+ 54477 ).
+A workaround is to use a Java 7 runtime (OpenJDK or Oracle JDK).
+
+
+
+With Oracle Java 7 and Mac Book Pro Retina Display, the JMeter GUI may look blurry.
+This is a known Java bug, see Bug JDK-8000629.
+A workaround is to use a Java 7 update 40 runtime which fixes this issue.
+
+
+
+You may encounter the following error: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
+ if you run a HTTPS request on a web site with a SSL certificate (itself or one of SSL certificates in its chain of trust) with a signature
+ algorithm using MD2 (like md2WithRSAEncryption) or with a SSL certificate with a size lower than 1024 bits.
+This error is related to increased security in Java 7 version u16 (MD2) and version u40 (Certificate size lower than 1024 bits), and Java 8 too.
+
+To allow you to perform your HTTPS request, you can downgrade the security of your Java installation by editing
+the Java jdk.certpath.disabledAlgorithms property. Remove the MD2 value or the constraint on size, depending on your case.
+
+This property is in this file:
+
Since JMeter 2.12, active threads in all thread groups and active threads in current thread group are saved by default to CSV or XML results, see
+ Bug
+ 57025.
+This is usually the expected behaviour as you want to have the number of running threads during the test. But if you want to revert to previous behaviour, set property jmeter.save.saveservice.thread_counts=false
+
Since JMeter 2.12, Mail Reader Sampler will show 1 for number of samples instead of number of messages retrieved, see
+ Bug
+ 56539
+
Since JMeter 2.12, when using Cache Manager, if resource is found in cache no SampleResult will be created, in previous version a SampleResult with empty content and 204 return code was returned, see
+ Bug
+ 54778.
+You can choose between different ways to handle this case, see cache_manager.cached_resource_mode in jmeter.properties.
+
Since JMeter 2.12, Log Viewer will no more clear logs when closed and will have logs available even if closed. See
+ Bug
+ 56920. Read Hints and Tips > Enabling Debug logging
+for details on configuring this component.
+
+
+
+
+
Bug fixes
+
+
HTTP Samplers and Test Script Recorder
+
+
+ Bug
+ 55998 - HTTP recording – Replacing port value by user defined variable does not work
+
+ Bug
+ 56178 - keytool error: Invalid escaped character in AVA: - some characters must be escaped
+
+ Bug
+ 56222 - NPE if jmeter.httpclient.strict_rfc2616=true and location is not absolute
+
+ Bug
+ 56263 - DefaultSamplerCreator should set BrowserCompatible Multipart true
+
+ Bug
+ 56231 - Move redirect location processing from HC3/HC4 samplers to HTTPSamplerBase#followRedirects()
+
+ Bug
+ 56207 - URLs get encoded on redirects in HC3.1 & HC4 samplers
+
+ Bug
+ 56303 - The width of target controller's combo list should be set to the current panel size, not on label size of the controllers
+
+ Bug
+ 54778 - HTTP Sampler should not return 204 when resource is found in Cache, make it configurable with new property cache_manager.cached_resource_mode
+ Bug
+ 55999 - Scroll bar on jms point-to-point sampler does not work when content exceeds display
+
+ Bug
+ 56198 - JMSSampler : NullPointerException is thrown when JNDI underlying implementation of JMS provider does not comply with Context.getEnvironment contract
+
+ Bug
+ 56428 - MailReaderSampler - should it use mail.pop3s.* properties?
+
+ Bug
+ 46932 - Alias given in select statement is not used as column header in response data for a JDBC request.Based on report and analysis of Nicola Ambrosetti
+
+ Bug
+ 56539 - Mail reader sampler: When Number of messages to retrieve is superior to 1, Number of samples should only show 1 not the number of messages retrieved
+
+ Bug
+ 56809 - JMSSampler closes InitialContext too early. Contributed by Bradford Hovinen (hovinen at gmail.com)
+
+ Bug
+ 56761 - JMeter tries to stop already stopped JMS connection and displays "The connection is closed"
+
+ Bug
+ 57068 - No error thrown when negative duration is entered in Test Action
+
+ Bug
+ 57078 - LagartoBasedHTMLParser fails to parse page that contains input with no type
+
+ Bug
+ 57183 - JMSSampler: For input string: "" java.lang.NumberFormatException (for Expiration or Priority fields)
+
+
+
Controllers
+
+
+ Bug
+ 56243 - Foreach works incorrectly with indexes on subsequent iterations
+
+ Bug
+ 56276 - Loop controller becomes broken once loop count evaluates to zero
+
+ Bug
+ 56160 - StackOverflowError when using WhileController within IfController
+
+ Bug
+ 56811 - "Start Next Thread Loop" in Result Status Action Handler or on Thread Group and "Go to next Loop iteration" in Test Action behave incorrectly with TransactionController that has "Generate Parent Sampler" checked
+
+
+
Listeners
+
+
+ Bug
+ 56706 - SampleResult#getResponseDataAsString() does not use encoding in response body impacting PostProcessors and ViewResultsTree. Contributed by Ubik Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 57052 - ArithmeticException: / by zero when sampleCount is equal to 0
+ Bug
+ 55959 - Improve error message when Test Script Recorder fails due to I/O problem
+
+ Bug
+ 52013 - Test Script Recorder's Child View Results Tree does not take into account Test Script Recorder excluded/included URLs. Based on report and analysis of James Liang
+
+ Bug
+ 56119 - File uploads fail every other attempt using timers. Enable idle timeouts for servers that don't send Keep-Alive headers.
+
+ Bug
+ 56272 - MirrorServer should support query parameters for status and redirects
+ Bug
+ 57026 - HTTP(S) Test Script Recorder : Better default settings. Contributed by Ubik Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 57107 - Patch proposal: Add DAV verbs to HTTP Sampler. Contributed by Philippe Jung (apache at famille-jung.fr)
+
+ Bug
+ 56357 - Certificates does not conform to algorithm constraints: Adding a note to indicate how to remove of the Java installation these new security constraints
+
+
+
Other samplers
+
+
+ Bug
+ 56033 - Add Connection timeout and Read timeout to SMTP Sampler
+
+ Bug
+ 56429 - MailReaderSampler - no need to fetch all Messages if not all wanted
+ Bug
+ 56510 - JMS Publisher/Point to Point: Add JMSPriority and JMSExpiration
+
+
+
Controllers
+
+
+ Bug
+ 56728 - New Critical Section Controller to serialize blocks of a Test. Based partly on a patch contributed by Mikhail Epikhin(epihin-m at yandex.ru)
+
+ Bug
+ 57145 - RandomController : Use ThreadLocalRandom instead of Random for better performances
+
+
+
Listeners
+
+
+ Bug
+ 56228 - View Results Tree : Improve ergonomy by changing placement of Renderers and allowing custom ordering
+
+ Bug
+ 56349 - "summary" is a bad name for a Generate Summary Results component, documentation clarified
+
+ Bug
+ 56769 - Adds the ability for the Response Time Graph listener to save/restore format settings in/from the jmx file
+
+ Bug
+ 57025 - SaveService : Better defaults, save thread counts by default
+ Bug
+ 56701 - HTTP Authorization Manager/ Kerberos Authentication: add port to SPN when server port is neither 80 nor 443. Based on patches from Dan Haughey (dan.haughey at swinton.co.uk) and Felix Schumacher (felix.schumacher at internetallee.de)
+
+ Bug
+ 56841 - New configuration element: DNS Cache Manager to improve the testing of CDN. Based on patch from Dzmitry Kashlach (dzmitrykashlach at gmail.com), and contributed by BlazeMeter Ltd.
+
+ Bug
+ 52061 - Allow access to Request Headers in Regex Extractor. Based on patch from Dzmitry Kashlach (dzmitrykashlach at gmail.com), and contributed by BlazeMeter Ltd.
+
+
+
Functions
+
+
+ Bug
+ 56708 - __jexl2 doesn't scale with multiple CPU cores. Based on analysis and patch contributed by Mikhail Epikhin(epihin-m at yandex.ru)
+
+ Bug
+ 57114 - Performance : Functions that only have values as instance variable should not synchronize execute. Based on analysis by Ubik Load Pack support and Vladimir Sitnikov, patch contributed by Vladimir Sitnikov (sitnikov.vladimir at gmail.com)
+
+
+
I18N
+
+
+
+
General
+
+
+ Bug
+ 21695 - Unix jmeter start script assumes it is on PATH, not a link
+
+ Bug
+ 56292 - Add the check of the Java's version in startup files and disable some options when is Java v8 engine
+
+ Bug
+ 56298 - JSR223 language display does not show which engine will be used
+
+ Bug
+ 56455 - Batch files: drop support for non-NT Windows shell scripts
+
+ Bug
+ 52707 - Make Open File dialog use last opened file folder as start folder. Based on patch from Dzmitry Kashlach (dzmitrykashlach at gmail.com), and contributed by BlazeMeter Ltd.
+
+ Bug
+ 56807 - Ability to force flush of ResultCollector file. Contributed by Andrey Pohilko (apc4 at ya.ru)
+
+ Bug
+ 56921 - Templates : Improve Recording template to ignore embedded resources case and URL parameters. Contributed by Ubik Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 42248 - Undo-redo support on Test Plan tree modification. Developed by Andrey Pohilko (apc4 at ya.ru) and contributed by BlazeMeter Ltd. Additional contribution by Ubik Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 56920 - LogViewer : Make it receive all log events even when it is closed. Contributed by Ubik Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 57083 - simplified the CachedResourceMode enum. Contributed by Graham Russel (graham at ham1.co.uk)
+
+ Bug
+ 57082 - ComboStringEditor : Added hashCode to an inner class which overwrote equals. Contributed by Graham Russel (graham at ham1.co.uk)
+
+ Bug
+ 57081 - Updating checkstyle to only check for tabs in java, xml, xsd, dtd, htm, html and txt files (not images!). Contributed by Graham Russell (graham at ham1.co.uk)
+
+ Bug
+ 56178 - Really replace backslashes in user name before generating proxy certificate. Contributed by Graham Russel (graham at ham1.co.uk)
+
+ Bug
+ 57084 - Close socket after usage in BeanShellClient. Contributed by Graham Russel (graham at ham1.co.uk)
+
+
Non-functional changes
+
+
+ Bug
+ 57117 - Increase the default cipher for HTTPS Test Script Recorder from SSLv3 to TLS
+
Updated to commons-lang3 3.3.2 (from 3.1)
+
Updated to commons-codec 1.9 (from 1.8)
+
Updated to commons-logging 1.2 (from 1.1.3)
+
Updated to tika 1.6 (from 1.4)
+
Updated to xercesImpl 2.11.0 (from 2.9.1)
+
Updated to xml-apis 1.4.01 (from 1.3.04)
+
Updated to xstream 1.4.8 (from 1.4.4)
+
Updated to jodd 3.6.1 (from 3.4.10)
+
Updated to rsyntaxtextarea 2.5.3 (from 2.5.1)
+
Updated xalan and serializer to 2.7.2 (from 2.7.1)
+
Updated to jsoup-1.8.1.jar (from 1.7.3)
+
+
+
Thanks
+
We thank all contributors mentioned in bug and improvement sections above:
+
+
James Liang (jliang at andera.com)
+
Emmanuel Bourg (ebourg at apache.org)
+
Nicola Ambrosetti (ambrosetti.nicola at gmail.com)
Vladimir Sitnikov (sitnikov.vladimir at gmail.com)
+
+
+
+We also thank bug reporters who helped us improve JMeter.
+For this release we want to give special thanks to the following reporters for the clear reports and tests made after our fixes:
+
+
Oliver LLoyd (email at oliverlloyd.com) for his help on
+ Bug
+ 56119
+Following improvements have been made since major changes introduced in JMeter 2.10 on HTTP(S) Test Script Recorder:
+
+
Better detection of missing or invalid configuration of keytool utility
+
New system property keytool.directory (see system.properties) lets you configure directory containing keytool in case on non-standard installation
+
+
+
+
JMS Publisher/Point to Point : Add ability to set typed values in JMS header properties
+
In the samplers JMS Publisher and JMS Point-to-Point, you can now set up the class of values for the JMS header properties. Previously only String was possible.
+
+
+
+
+
View Results Tree : Add an XPath Tester
+
In View Results Tree listener, a new XPath tester can be used to test XPATH expressions.
+
+
+
+
+
Ability to choose the client alias for the cert key in JsseSslManager such that Mutual SSL auth testing can be made more flexible
+
When testing client based certificate authentications you have now better control on certificate you use through a new field "Variable name holding certificate alias", this
+field lets you select the certificate you want to send to server to authenticate. You can use a CSV Data Set as a holder for the variable value.
+
+
+
+
+
Add a "Save as Test Fragment" option
+
In the file menu, a new option allow to save a group of elements as a Test fragment.
+
+
+
+
+
Summariser is be enabled by default in Non GUI mode
+
When you run JMeter from command line, now JMeter displays some statistics from the Summariser mode.
+
+
+
+
+
Transaction Controller:Change default property "Include duration of timer..." for newly created element
+
Starting from 2.11, Transaction Controller is configured by default to exclude processing time of pre/post processors as long as timers pause.
+
+
+
+
+
+
+
+
+
+
+
Known bugs
+
+
+
The Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
Listeners don't show iteration counts when a If Controller has a condition which is always false from the first iteration (see
+ Bug
+ 52496).
+A workaround is to add a sampler at the same level as (or superior to) the If Controller.
+For example a Test Action sampler with 0 wait time (which doesn't generate a sample),
+or a Debug Sampler with all fields set to False (to reduce the sample size).
+
+
+
+The numbers that appear to the left of the green box are the number of active threads / total number of threads,
+the total number of threads only applies to a locally run test, otherwise it will show 0 (see
+ Bug
+ 55510).
+
+
+
+Note that there is a bug in Java
+on some Linux systems that manifests itself as the following error when running the test cases or JMeter itself:
+
+ [java] WARNING: Couldn't flush user prefs:
+ java.util.prefs.BackingStoreException:
+ java.lang.IllegalArgumentException: Not supported: indent-number
+
+This does not affect JMeter operation. This issue is fixed since Java 7b05.
+
+
+
+With Java 1.6 and Gnome 3 on Linux systems, the JMeter menu may not work correctly (shift between mouse's click and the menu).
+This is a known Java bug (see
+ Bug
+ 54477 ).
+A workaround is to use a Java 7 runtime (OpenJDK or Oracle JDK).
+
+
+
+With Oracle Java 7 and Mac Book Pro Retina Display, the JMeter GUI may look blurry.
+This is a known Java bug, see Bug JDK-8000629.
+A workaround is to use a Java 7 update 40 runtime which fixes this issue.
+
+
+
+
+
+
Incompatible changes
+
+
+
When creating a new Transaction Controller, property "Include duration of timer and pre-post processors in generated sample" will be unchecked starting from version 2.11
+
In Non GUI mode, since 2.11 summariser is enabled with a 30 seconds frequency
+
JMeter is more lenient with redirect handling and relaxes on RFC2616 by allowing relative locations. See property "jmeter.httpclient.strict_rfc2616" in jmeter.properties to change this behaviour, see
+ Bug
+ 55717
+
When creating a new Response Assertion, property "Pattern Matching Rules" now defaults to Substring starting from version 2.11
+
+
+
+
+
Bug fixes
+
+
HTTP Samplers and Test Script Recorder
+
+
+ Bug
+ 55815 - Proxy#getDomainMatch does not handle wildcards correctly
+
+ Bug
+ 55717 - Bad handling of Redirect when URLs are in relative format by HttpClient4 and HttpClient3.1
+
+
+
Other Samplers
+
+
+ Bug
+ 55685 - OS Sampler: timeout option don't save and restore correctly value and don't init correctly timeout
+
+
+
Controllers
+
+
+ Bug
+ 55816 - Transaction Controller with "Include duration of timer..." unchecked does not ignore processing time of last child sampler
+
+
+
Listeners
+
+
+ Bug
+ 55826 - Unsynchronised concurrent accesses to list in field RespTimeGraphVisualizer.internalList
+ Bug
+ 55871 - Wrong result with intSum() function when a space character is present before/after the number. Contributed by Milamber based on a proposal by James Liang.
+
+
+
I18N
+
+
+
+
General
+
+
+ Bug
+ 55739 - Remote Test : Total threads in GUI mode shows invalid total number of threads
+
+
+
+
+
Improvements
+
+
HTTP Samplers and Proxy
+
+
+
+
Other samplers
+
+
+ Bug
+ 55589 - JMS Publisher/Point to Point : Add ability to set typed values in JMS header properties.
+
+
+
Controllers
+
+
+ Bug
+ 55854 - Transaction Controller:Change default property "Include duration of timer..." for newly created element
+ Bug
+ 55908 - Response assertion : Change Pattern Matching Rules default to Substring on creation for better performances
+
+ Bug
+ 54977 - Ability to choose the client alias for the cert key in JsseSslManager such that Mutual SSL auth testing can be made more flexible. Contributed by UBIK Load Pack (support at ubikloadpack.com)
+ Bug
+ 55753 - Improve FilePanel behaviour to start from the value set in Filename field if any. Contributed by UBIK Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 55756 - HTTP Mirror Server : Add ability to set Headers
+
+ Bug
+ 55852 - Be more lenient in parsing when charset value is surrounded with single quotes
+
+ Bug
+ 55857 - Performance : AbstractProperty should test for emptiness to avoid Exception throwing
+
+ Bug
+ 55858 - Startup Performance : On Startup, BeanInfoSupport should test for key availability instead of throwing
+
+ Bug
+ 55865 - Performance :Disable stale check by default in HttpClient 4 and 3.1
+
+ Bug
+ 55512 - Summariser should be enabled by default in Non GUI mode
+
+
+
Non-functional changes
+
+
Updated to rsyntaxtextarea-2.5.1.jar (from 2.5.0)
+
Updated to jodd-core-3.4.9.jar from (3.4.8) and jodd-lagarto-3.4.9.jar (from 3.4.9)
+
Updated to jsoup-1.7.3.jar (from 1.7.2)
+
Updated to mail-1.5.0-b01 (from 1.4.4)
+
Updated to mongo-java-driver-2.11.3 (from 2.11.2)
+
+
+
Thanks
+
We thank all contributors mentioned in bug and improvement sections above:
+
+
James Liang (jliang at andera.com)
+
UBIK Load Pack (support at ubikloadpack.com)
+
+
+We also thank bug reporters who helped us improve JMeter.
+For this release we want to give special thanks to the following reporters for the clear reports and tests made after our fixes:
+
+
John Natsioulas (john_natsioulas at yahoo.com.au)
+
Antonio Gomes Rodrigues (ra0077 at gmail.com)
+
+
+Apologies if we have omitted anyone else.
+
+
+
+
+
+
A Huge performance improvement has been made on High Throughput Tests (no pause), see
+ Bug
+ 54777
+
An issue with unnecessary SSL Context reset has been fixed which improves performances of pure HTTP tests, see
+ Bug
+ 55023
+
Important performance improvement in parsing of Embedded resource in HTML pages thanks to a switch to JODD/Lagarto HTML Parser, see
+ Bug
+ 55632
+
+
+
+
New CSS/JQuery Tester in View Tree Results
+
A new CSS/JQuery Tester in View Tree Results that makes CSS/JQuery Extractor a first class
+citizen in JMeter, you can now test your expressions very easily
+
+
+
+
+
Many improvements in HTTP(S) Recording have been made
+
+
+
+The "HTTP Proxy Server" test element has been renamed as "HTTP(S) Test Script Recorder".
+
+
+
Better recording of HTTPS sites, embedded resources using subdomains will more easily be recorded when using JDK 7. See
+ Bug
+ 55507.
+See updated documentation: HTTP(S) Test Script Recorder
+
+
Redirection are now more smartly detected by HTTP Proxy Server, see
+ Bug
+ 55531
You can now load test MongoDB through new MongoDB Source Config
+
+
+
+
+
+
+
+
Kerberos authentication has been added to Auth Manager
+
+
+
+
+
Device can now be used in addition to source IP address
+
+
+
+
+
+
You can now do functional testing of MongoDB scripts through new MongoDB Script
+
+
+
+
+
Timeout has been added to OS Process Sampler
+
+
+
+
+
Query timeout has been added to JDBC Request
+
+
+
+
+
New functions (__urlencode and __urldecode) are now available to encode/decode URL encoded chars
+
+
+
+
+
Continuous Integration is now eased by addition of a new flag that forces NON-GUI JVM to exit after test end
+
See jmeter property:
+jmeterengine.force.system.exit
+
+
+
HttpSampler now allows DELETE Http Method to have a body (works for HC4 and HC31 implementations). This allows for example to test Elastic Search APIs
+
+
+
+
+
2 implementations of HtmlParser have been added to improve Embedded resources parsing
+
+You can choose the implementation to use for parsing Embedded resources in HTML pages:
+See jmeter.properties and look at property "htmlParser.className".
+
+
org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser for optimal performances
+
org.apache.jmeter.protocol.http.parser.JSoupBasedHtmlParser for most accurate parsing and functional testing
+
+
+
+
Distributed testing has been improved
+
+
+
+Number of threads on each node are now reported to controller.
+
+
+
+
+
+
+
+
+
Performance improvement on BatchSampleSender(
+ Bug
+ 55423)
+
Addition of 2 SampleSender modes (StrippedAsynch and StrippedDiskStore), see jmeter.properties
+
+
+
+
ModuleController has been improved to better handle changes to referenced controllers
New Templates feature that allows you to create test plan from existing template or merge
+template into your Test Plan
+
+
+
+
+
+
+
+
Workbench can now be saved
+
+
+
+
+
Syntax color has been added to scripts elements (BeanShell, BSF, and JSR223), MongoDB and JDBC elements making code much more readable and allowing UNDO/REDO through CTRL+Z/CTRL+Y
+
BSF Sampler with syntax color
+
+
+
JSR223 Pre Processor with syntax color
+
+
+
+
Better editors are now available for Test Elements with large text content, like HTTP Sampler, and JMS related Test Element providing line numbering and allowing UNDO/REDO through CTRL+Z/CTRL+Y
+
+
JMeter GUI can now be fully Internationalized, all remaining issues have been fixed
+
Currently French has all its labels translated. Other languages are partly translated, feel free to
+contribute translations by reading Localisation (Translator's Guide)
+
+
Moving elements in Test plan has been improved in many ways
+
Drag and drop of elements in Test Plan tree is now much easier and possible on multiple nodes
+
+
+
+
+Note that due to this bug in Java,
+you cannot drop a node after last node. The workaround is to drop it before this last node and then Drag and Drop the last node
+before the one you just dropped.
+
+
New shortcuts have been added to move elements in the tree.
+
(alt + Arrow Up) and (alt + Arrow Down) move the element within the parent node
+(alt + Arrow Left) and (alt + Arrow Right) move the element up and down in the tree depth
+
+
Response Time Graph Y axis can now be scaled
+
+
+
+
+
JUnit Sampler gives now more details on configuration errors
+
+
+
+
+
Known bugs
+
+
+
The Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
Listeners don't show iteration counts when a If Controller has a condition which is always false from the first iteration (see
+ Bug
+ 52496).
+A workaround is to add a sampler at the same level as (or superior to) the If Controller.
+For example a Test Action sampler with 0 wait time (which doesn't generate a sample),
+or a Debug Sampler with all fields set to False (to reduce the sample size).
+
+
+
Webservice sampler does not consider the HTTP response status to compute the status of a response, thus a response 500 containing a non empty body will be considered as successful, see
+ Bug
+ 54006.
+To workaround this issue, ensure you always read the response and add a Response Assertion checking text inside the response.
+
+
+
+The numbers that appear to the left of the green box are the number of active threads / total number of threads,
+these only apply to a locally run test; they do not include any threads started on remote systems when using client-server mode, (see
+ Bug
+ 54152).
+
+
+
+Note that there is a bug in Java
+on some Linux systems that manifests itself as the following error when running the test cases or JMeter itself:
+
+ [java] WARNING: Couldn't flush user prefs:
+ java.util.prefs.BackingStoreException:
+ java.lang.IllegalArgumentException: Not supported: indent-number
+
+This does not affect JMeter operation. This issue is fixed since Java 7b05.
+
+
+
+With Java 1.6 and Gnome 3 on Linux systems, the JMeter menu may not work correctly (shift between mouse's click and the menu).
+This is a known Java bug (see
+ Bug
+ 54477 ).
+A workaround is to use a Java 7 runtime (OpenJDK or Oracle JDK).
+
+
+
+With Oracle Java 7 and Mac Book Pro Retina Display, the JMeter GUI may look blurry.
+This is a known Java bug, see Bug JDK-8000629.
+A workaround is to use a Java 7 update 40 runtime which fixes this issue.
+
+
+
+
+
+
Incompatible changes
+
+
+
SMTP Sampler now uses eml file subject if subject field is empty
+
+
With this version autoFlush has been turned off on PrintWriter in charge of writing test results.
+This results in improved throughput for intensive tests but can result in more test data loss in case
+of JMeter crash (extremely rare). To revert to previous behaviour set jmeter.save.saveservice.autoflush property to true.
+
+
+Shortcut for Function Helper Dialog is now CTRL+SHIFT+F1 (CMD + SHIFT + F1 for Mac OS).
+The original key sequence (Ctrl+F1) did not work in some locations (it is consumed by the Java Swing ToolTipManager).
+It was therefore necessary to change the shortcut.
+
+
+
+Webservice (SOAP) Request has been removed by default from GUI as Element is deprecated. (Use HTTP Request
+with Body Data, see also the Template Building a SOAP Webservice Test Plan), if you need to show it, see property not_in_menu in jmeter.properties
+
+
+
+Transaction Controller now sets Response Code of Generated Parent Sampler
+(if Generated Parent Sampler is checked) to response code of first failing child in case of failure of one of the children, in previous versions Response Code was empty.
+
+
+
+In previous versions, IncludeController could run Test Elements located inside a Thread Group, this behaviour (which was not documented)
+ould result in weird behaviour, it has been removed in this version (see
+ Bug
+ 55464).
+The correct way to include Test Elements is to use Test Fragment as stated in documentation of Include Controller.
+
+
+
+The retry count for the HttpClient 3.1 and HttpClient 4.x samplers has been changed to 0.
+Previously the default was 1, which could cause unexpected additional traffic.
+
+
+
Starting with this version, the HTTP(S) Test Script Recorder tries to detect when a sample is the result of a previous
+redirect. If the current response is a redirect, JMeter will save the redirect URL. When the next request is received,
+it is compared with the saved redirect URL and if there is a match, JMeter will disable the generated sample.
+To revert to previous behaviour, set the property proxy.redirect.disabling=false
+
+
+
Starting with this version, in HTTP(S) Test Script Recorder if Grouping is set to Put each group in a new Transaction Controller,
+the Recorder will create Transaction Controller instances with Include duration of timer and pre-post processors in generated sample set
+to false. This default value reflect more accurately response time.
+
+
+
__escapeOroRegexpChars function (which escapes ORO reserved characters) no longer trims the value (see
+ Bug
+ 55328)
+
+
+
The commons-lang-2.6.jar has been removed from embedded libraries in jmeter/lib folder as it is not needed by JMeter at run-time
+(it is only used by Apache Velocity for generating documentation).
+If you use any plugin or third-party code that depends on it, you need to add it in jmeter/lib folder
+
+
+
+
+
+
Bug fixes
+
+
HTTP Samplers and Proxy
+
+
+ Bug
+ 54627 - JMeter Proxy GUI: Type of sampler setting takes the whole screen when there are samplers with long names.
+
+ Bug
+ 54629 - HTMLParser does not extract <object> tag urls.
+
+ Bug
+ 55023 - SSL Context reuse feature (51380) adversely affects non-ssl request performance/throughput. based on analysis by Brent Cromarty (brent.cromarty at yahoo.ca)
+
+ Bug
+ 55092 - Log message "WARN - jmeter.protocol.http.sampler.HTTPSamplerBase: Null URL detected (should not happen)" displayed when embedded resource URL is malformed.
+
+ Bug
+ 55161 - Useless processing in SoapSampler.setPostHeaders. Contributed by Adrian Nistor (nistor1 at illinois.edu)
+
+ Bug
+ 54482 - HC fails to follow redirects with non-encoded chars.
+
+ Bug
+ 54142 - HTTP Proxy Server throws an exception when path contains "|" character.
+
+ Bug
+ 55388 - HC3 does not allow IP Source field to override httpclient.localaddress.
+ Bug
+ 55504 - Proxy incorrectly issues CONNECT requests when browser prompts for certificate override
+
+ Bug
+ 55506 - Proxy should deliver failed requests to any configured Listeners
+
+ Bug
+ 55545 - HTTP Proxy Server GUI should not allow both Follow and Auto redirect to be selected
+
+
+
Other Samplers
+
+
+ Bug
+ 54913 - JMSPublisherGui incorrectly restores its state. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
+
+ Bug
+ 55027 - Test Action regression, duration value is not recorded (nightly build).
+
+ Bug
+ 55163 - BeanShellTestElement fails to quote string when calling testStarted(String)/testEnded(String).
+
+ Bug
+ 55349 - NativeCommand hangs if no input file is specified and the application requests input.
+
+ Bug
+ 55462 - System Sampler should not change the sampler label if a sample fails
+
+
+
Controllers
+
+
+ Bug
+ 54467 - Loop Controller: compute loop value only once per parent iteration.
+
+ Bug
+ 54985 - Make Transaction Controller set Response Code of Generated Parent Sampler to response code of first failing child in case of failure of one of its children. Contributed by Mikhail Epikhin (epihin-m at yandex.ru)
+
+ Bug
+ 54950 - ModuleController : Changes to referenced Module are not taken into account if changes occur after first run and referenced node is disabled.
+
+ Bug
+ 55201 - ForEach controller excludes start index and includes end index (clarified documentation).
+
+ Bug
+ 55334 - Adding Include Controller to test plan (made of Include Controllers) without saving TestPlan leads to included code not being taken into account until save.
+
+ Bug
+ 55375 - StackOverflowError with ModuleController in Non-GUI mode if its name is the same as the target node.
+
+ Bug
+ 55464 - Include Controller running included thread group
+
+
+
Listeners
+
+
+ Bug
+ 54589 - View Results Tree have a lot of Garbage characters if html page uses double-byte charset.
+
+ Bug
+ 54753 - StringIndexOutOfBoundsException at SampleResult.getSampleLabel() if key_on_threadname=false when using Statistical mode.
+
+ Bug
+ 54685 - ArrayIndexOutOfBoundsException if "sample_variable" is set in client but not server.
+
+ Bug
+ 55111 - ViewResultsTree: text not refitted if vertical scrollbar is required. Contributed by Milamber
+ Bug
+ 55065 - Useless processing in Spline3.converge(). Contributed by Adrian Nistor (nistor1 at illinois.edu)
+
+ Bug
+ 55064 - Useless processing in ReportTreeListener.isValidDragAction(). Contributed by Adrian Nistor (nistor1 at illinois.edu)
+
+ Bug
+ 55242 - BeanShell Client jar throws exceptions after upgrading to 2.8.
+
+ Bug
+ 55288 - JMeter should default to 0 retries for HTTP requests.
+
+ Bug
+ 55405 - ant download_jars task fails if lib/api or lib/doc are missing. Contributed by Antonio Gomes Rodrigues.
+
+ Bug
+ 55427 - TestBeanHelper should ignore properties not supported by GenericTestBeanCustomizer
+
+ Bug
+ 55459 - Elements using ComboStringEditor lose the input value if user selects another Test Element
+
+ Bug
+ 54152 - In distributed testing : activeThreads always show 0 in GUI and Summariser
+
+ Bug
+ 55509 - Allow Plugins to be notified of remote thread number progression
+
+ Bug
+ 55572 - Detail popup of parameter does not show a Scrollbar when content exceeds display
+
+ Bug
+ 55580 - Help pane does not scroll to start for <a href="#"> links
+
+ Bug
+ 55600 - JSyntaxTextArea : Strange behaviour on first undo
+
+ Bug
+ 55655 - NullPointerException when Remote stopping /shutdown all if one engine did not start correctly. Contributed by UBIK Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 55657 - Remote and Local Stop/Shutdown buttons state does not take into account local / remote status
+
+
+
+
+
Improvements
+
+
HTTP Samplers and Proxy
+
+
HTTP Request: Small user interaction improvements in Row parameter Detail Box. Contributed by Milamber
+
+ Bug
+ 55255 - Allow Body in HTTP DELETE method to support API that use it (like ElasticSearch).
+
+ Bug
+ 53480 - Add Kerberos support to Http Sampler (HttpClient4). Based on patch by Felix Schumacher (felix.schumacher at internetallee.de)
+
+ Bug
+ 54874 - Support device in addition to source IP address. Based on patch by Dan Fruehauf (malkodan at gmail.com)
+
+ Bug
+ 55488 - Add .ico and .woff file extension to default suggested exclusions in proxy recorder. Contributed by Antonio Gomes Rodrigues
+
+ Bug
+ 55525 - Proxy should support alias for keyserver entry
+
+ Bug
+ 55531 - Proxy recording and redirects. Added code to disable redirected samples.
+
+ Bug
+ 55507 - Proxy SSL recording does not handle external embedded resources well
+
+ Bug
+ 55632 - Have a new implementation of htmlParser for embedded resources parsing with better performances
+
+ Bug
+ 55653 - HTTP(S) Test Script Recorder should set TransactionController property "Include duration of timer and pre-post processors in generated sample" to false
+
+
+
Other samplers
+
+
+ Bug
+ 54788 - JMS Point-to-Point Sampler - GUI enhancements to increase readability and ease of use. Contributed by Bruno Antunes (b.m.antunes at gmail.com)
+
+ Bug
+ 54798 - Using subject from EML-file for SMTP Sampler. Contributed by Mikhail Epikhin (epihin-m at yandex.ru)
+ Bug
+ 54896 - JUnit sampler gives only "failed to create an instance of the class" message with constructor problems.
+
+ Bug
+ 55084 - Add timeout support for JDBC Request. Contributed by Mikhail Epikhin (epihin-m at yandex.ru)
+
+ Bug
+ 55403 - Enhancement to OS sampler: Support for timeout
+
+ Bug
+ 55518 - Add ability to limit number of cached PreparedStatements per connection when "Prepared Select Statement", "Prepared Update Statement" or "Callable Statement" query type is selected
+
+
+
Controllers
+
+
+ Bug
+ 54271 - Module Controller breaks if test plan is renamed.
+
+
+
Listeners
+
+
+ Bug
+ 54532 - Improve Response Time Graph Y axis scale with huge values or small values (< 1000ms). Add a new field to define increment scale. Contributed by Milamber based on patch by Luca Maragnani (luca.maragnani at gmail.com)
+
+ Bug
+ 54576 - View Results Tree : Add a CSS/JQuery Tester.
+
+ Bug
+ 54777 - Improve Performance of default ResultCollector. Based on patch by Mikhail Epikhin (epihin-m at yandex.ru)
+ Bug
+ 54789 - XPath Assertion - GUI enhancements to increase readability and ease of use.
+
+
+
Functions
+
+
+ Bug
+ 54991 - Add functions to encode/decode URL encoded chars (__urlencode and __urldecode). Contributed by Milamber.
+
+
+
I18N
+
+
+ Bug
+ 55241 - Need GUI Editor to process fields which are based on Enums with localised display strings
+
+ Bug
+ 55440 - ComboStringEditor should allow tags to be language dependent
+
+ Bug
+ 55432 - CSV Dataset Config loses sharing mode when switching languages
+
+
+
General
+
+
+ Bug
+ 54584 - MongoDB plugin. Based on patch by Jan Paul Ettles (janpaulettles at gmail.com)
+
+ Bug
+ 54669 - Add flag forcing non-GUI JVM to exit after test. Contributed by Scott Emmons
+
+ Bug
+ 42428 - Workbench not saved with Test Plan. Contributed by Dzmitry Kashlach (dzmitrykashlach at gmail.com)
+
+ Bug
+ 54825 - Add shortcuts to move elements in the tree. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
+
+ Bug
+ 54834 - Improve Drag & Drop in the jmeter tree. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
+
+ Bug
+ 54839 - Set the application name on Mac. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
+
+ Bug
+ 54841 - Correctly handle the quit shortcut on Mac Os (CMD-Q). Contributed by Benoit Wiart (benoit.wiart at gmail.com)
+
+ Bug
+ 54844 - Set the application icon on Mac Os. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
+
+ Bug
+ 54864 - Enable multi selection drag & drop in the tree without having to start dragging before releasing Shift or Control. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
+
+ Bug
+ 54945 - Add Shutdown Hook to enable trapping kill or CTRL+C signals.
+
+ Bug
+ 54990 - Download large files avoiding outOfMemory.
+
+ Bug
+ 55085 - UX Improvement : Ability to create New Test Plan from Templates. Contributed by UBIK Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 55172 - Provide plugins a way to add Top Menu and menu items.
+
+ Bug
+ 55202 - Add syntax color for scripts elements (BeanShell, BSF, and JSR223) and JDBC elements with RSyntaxTextArea. Contributed by Milamber based on patch by Marko Vlahovic (vlahovic74 at gmail.com)
+ Bug
+ 54776 - Update the dependency on Bouncy Castle to 1.48. Contributed by Emmanuel Bourg (ebourg at apache.org)
+
Updated to HttpComponents Client 4.2.6 (from 4.2.3)
+
Updated to HttpComponents Core 4.2.5 (from 4.2.3)
+
Updated to commons-codec 1.8 (from 1.6)
+
Updated to commons-io 2.4 (from 2.2)
+
Updated to commons-logging 1.1.3 (from 1.1.1)
+
Updated to commons-net 3.3 (from 3.1)
+
Updated to jdom-1.1.3 (from 1.1.2)
+
Updated to jodd-lagarto and jodd-core 3.4.8 (from 3.4.1)
+
Updated to junit 4.11 (from 4.10)
+
Updated to slf4j-api 1.7.5 (from 1.7.2)
+
Updated to tika 1.4 (from 1.3)
+
Updated to xmlgraphics-commons 1.5 (from 1.3.1)
+
Updated to xstream 1.4.4 (from 1.4.2)
+
Updated to BouncyCastle 1.49 (from 1.48)
+
+ Bug
+ 54912 - JMeterTreeListener should use constants. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
+
+ Bug
+ 54903 - Remove the dependency on the Activation Framework. Contributed by Emmanuel Bourg (ebourg at apache.org)
+
Moved commons-lang (2.6) to lib/doc as it's only needed by Velocity.
+
Re-organised and simplified NOTICE and LICENSE files.
+
+ Bug
+ 55411 - NativeCommand could be useful elsewhere. Copied code to o.a.jorphan.exec.
+
+ Bug
+ 55435 - ComboStringEditor could be simplified to make most settings final
+
+ Bug
+ 55436 - ComboStringEditor should implement ClearGui
+
+ Bug
+ 55463 - Component.requestFocus() is discouraged; use requestFocusInWindow() instead
+
+ Bug
+ 55486 - New JMeter Logo. Contributed by UBIK Load Pack (support at ubikloadpack.com)
+
+ Bug
+ 55548 - Tidy up use of TestElement.ENABLED; use TestElement.isEnabled()/setEnabled() throughout
+
+ Bug
+ 55617 - Improvements to jorphan collection. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
+
+ Bug
+ 55623 - Invalid/unexpected configuration values should not be silently ignored
+
+ Bug
+ 55626 - Rename HTTP Proxy Server as HTTP(S) Test Script Recorder
+
+
+
Thanks
+
We thank all contributors mentioned in bug and improvement sections above:
+
+
Bruno Antunes (b.m.antunes at gmail.com)
+
Emmanuel Bourg (ebourg at apache.org)
+
Scott Emmons
+
Mikhail Epikhin (epihin-m at yandex.ru)
+
Dzmitry Kashlach (dzmitrykashlach at gmail.com)
+
Luca Maragnani (luca.maragnani at gmail.com)
+
Milamber
+
Adrian Nistor (nistor1 at illinois.edu)
+
Antonio Gomes Rodrigues (ra0077 at gmail.com)
+
UBIK Load Pack (support at ubikloadpack.com)
+
Benoit Wiart (benoit.wiart at gmail.com)
+
+
+We also thank bug reporters who helped us improve JMeter.
+For this release we want to give special thanks to the following reporters for the clear reports and tests made after our fixes:
+
+
Immanuel Hayden (immanuel.hayden at gmail.com)
+
Danny Lade (dlade at web.de)
+
Brent Cromarty (brent.cromarty at yahoo.ca)
+
Wolfgang Heider (wolfgang.heider at racon.at)
+
Shmuel Krakower (shmulikk at gmail.com)
+
+
+
+Apologies if we have omitted anyone else.
+
+
+
+
+
Version 2.9
+
+
New and Noteworthy
+
+
Core Improvements:
+
+
* A new Extractor that uses CSS or jquery-like selector syntax has been introduced,
+it allows using either JODD or JSOUP implementations
+
+
+
+
Result: the title of the page in a JMeter variable
+
+
+
* JMeter can now handle different types of documents (PDF, MsOffice files, Apache OpenOffice's files...)
+ within different elements
+
+
Regular Expression Extractor, extract text from documents
+
Assertion Response, check text in documents
+
View Results Tree, view as a text the documents
+
+
+
+
+
+
* A new Regex User Parameters Pre-Processor that enables injecting input parameter names and values
+using a reference extracted by Regular Expression Extractor from a previous response
+
+
+
+
+
* TCP Sampler: new options
+
TCP Sampler has been enhanced with new options to allow setting Close Connection,
+ SO_LINGER and End of line(EOL) byte value
+
+
+
* A new function __escapeOroRegexpChars(,) has been introduced quote ORO regexp meta characters
+
* ForEach Controller: new fields
+
ForEach Controller has now 2 new fields to control start and end of loop
+
+
+
* Result Status Action Handler now has a new option to "Start next thread loop"
+
+
+
+
+
* JMS Publisher: new option
+
JMS Publisher can now send Bytes Messages
+
+
+
* Memory and performance improvements
+
Significant improvements have been done in this version on memory usage per Thread and CPU when more
+than one Post Processor is used as child of a Sampler
+
JSR223 Elements (enable using Groovy, Scala... as scripting languages) have been improved to enable caching
+of Compilation results when scripts are passed in Text area
+
+
+
Some configuration defaults have changed to improve performances by default(see
+ Bug
+ 54412),
+see description in New and Noteworthy section.
+
+
Distributed testing now uses MODE_STRIPPED_BATCH, which returns samples in batch mode (every 100 samples
+ or every minute by default). Note also that MODE_STRIPPED_BATCH strips response data from SampleResult,
+ so if you need it change to another mode (mode property in jmeter.properties)
+
Result data are now saved to CSV by default (jmeter.save.saveservice.output_format in jmeter.properties)
+
+
+
+
* XPath Assertion now enables using a JMeter variable as input
+
+
+
+
+
GUI and ergonomy Improvements:
+
* Search feature has been improved to search within more internal fields of elements and expand search results
+
* Copy/paste is now possible between 2 JMeter instances >= 2.9 version
+
Copy element(s) from one JMeter instance:
+
+
+
Paste element(s) into a second JMeter instance:
+
+
+
* HTTP Header Manager
+
Allow copy from clipboard to HeaderPanel, headers are supposed to be separated by new line
+ and have the following form name:value
+
+
+
* Module Controller
+
Module Controller has been improved to better render referenced controller and expand it by clicking on a new button
+
+
+
* HTTP Proxy Server
+
HTTP Proxy Server now has a button to add a set of default exclusions for URL patterns,
+this list can be configured through property : proxy.excludes.suggested
+
+
+
* Rendering of target controller has been improved in HTTP Proxy Server
+
+
HTTP Proxy Server recording:
+
* HTTP Proxy Server now automatically uses HTTP Request with Raw Post Body mode for
+samples that only have one unnamed argument (JSON, XML, GWT...)
+
* HTTP Proxy Server does not force user to select the type of Sampler in HTTP Sampler Settings,
+ this allows easier switch between implementations as Sampler do not have this information set anymore
+
+
+
+
* SamplerCreator interface has been enriched to meet new requirements for plug-in providers
+
* It is now possible to create binary sampler for x-www-form-urlencoded POST request by
+modifying proxy.binary.types property to add application/x-www-form-urlencoded
+
* Improved timestamp format auto-detection when reading CSV files
+
+
+
+
Known bugs
+
+
The Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
Listeners don't show iteration counts when a If Controller has a condition which is always false from the first iteration (see
+ Bug
+ 52496).
+A workaround is to add a sampler at the same level as (or superior to) the If Controller.
+For example a Test Action sampler with 0 wait time (which doesn't generate a sample),
+or a Debug Sampler with all fields set to False (to reduce the sample size).
+
+
+
Webservice sampler does not consider the HTTP response status to compute the status of a response, thus a response 500 containing a non empty body will be considered as successful, see
+ Bug
+ 54006.
+To workaround this issue, ensure you always read the response and add a Response Assertion checking text inside the response.
+
+
+
+Changing language can break part of the configuration of the following elements (see
+ Bug
+ 53679):
+
+
CSV Data Set Config (sharing mode will be lost)
+
Constant Throughput Timer (Calculate throughput based on will be lost)
+
+
+
+
+The numbers that appear to the left of the green box are the number of active threads / total number of threads,
+these only apply to a locally run test; they do not include any threads started on remote systems when using client-server mode, (see
+ Bug
+ 54152).
+
+
+
+Note that there is a bug in Java on some Linux systems that manifests
+itself as the following error when running the test cases or JMeter itself:
+
+ [java] WARNING: Couldn't flush user prefs:
+ java.util.prefs.BackingStoreException:
+ java.lang.IllegalArgumentException: Not supported: indent-number
+
+This does not affect JMeter operation.
+
+
+
+
+
Incompatible changes
+
+
JMeter requires now a Java 6 runtime or higher.
+
+
Some configuration defaults have changed to improve performances by default (see
+ Bug
+ 54412),
+see description in New and Noteworthy section.
+
+
Webservice sampler now adds to request the headers that are set through Header Manager, these were previously ignored
+
+
jdbcsampler.cachesize property has been removed, it previously limited the size of a per connection cache of Map < String,
+PreparedStatement > , it also limited the size of this
+map which held the PreparedStatement for SQL queries. This limitation provoked a bug
+ Bug
+ 53995.
+It has been removed so now size of these 2 maps is not limited anymore. This change changes behaviour as starting from
+this version no PreparedStatement will be closed during the test.
+
+
Starting with this version, there are some important changes on JSR223 Test Elements:
+
+
JSR223 Test Elements that have an invalid filename (not existing or unreadable) will make test fail instead of
+ making the element silently work
+
In JSR223 Test Elements: responseCodeOk, responseMessageOK and successful are set before
+ script is executed, if responseData is set it will not be overriden anymore by a toString() on script return value
+
+
+
+
View Results Tree now considers response with missing content type as text.
+
+
In remote Test mode, JMeter now exits in error if one of the remote engines cannot be configured,
+previously it started the test with available engines.
+
+
+
+
Bug fixes
+
+
HTTP Samplers and Proxy
+
+
Don't log spurious warning messages when using concurrent pool embedded downloads with Cache Manager or CookieManager
+
+ Bug
+ 54057- Proxy option to set user and password at startup (-u and -a) not working with HTTPClient 4
+
+ Bug
+ 54187 - Request tab does not show headers if request fails
+ Bug
+ 53997 - LDAP Extended Request: Escape ampersand (&), left angle bracket (<)
+and right angle bracket (>) in search filter tag in XML response data
+
+ Bug
+ 53995 - AbstractJDBCTestElement shares PreparedStatement between multi-threads
+ Bug
+ 54058 - In HTTP Request Defaults, the value of field "Embedded URLs must match: is not saved if the check box "Retrieve All Embedded Resources" is not checked.
+
+ Bug
+ 54375 - Regular Expression Extractor : When regex syntax is wrong, post processing is stopped
+
+
+
Functions
+
+
+
+
I18N
+
+
+
+
General
+
+
+ Bug
+ 53975 - Variables replacement doesn't work with option "Delay thread creation until needed"
+
+ Bug
+ 54055 - View Results tree: = signs are stripped from parameter values at HTTP tab
+
+ Bug
+ 54129 - Search Feature does not find text although existing in elements
+
+ Bug
+ 54023 - Unable to start JMeter from a root directory and if the full path of JMeter installation contains one or more spaces (Unix/linux)
+
+ Bug
+ 54172 - Duplicate shortcut key not working and CTRL+C / CTRL+V / CTRL+V do not cancel default event
+
+ Bug
+ 54057 - Proxy option to set user and password at startup (-u and -a) not working with HTTPClient 4
+
+ Bug
+ 54267 - Start Next Thread Loop setting doesn't work in custom thread groups
+
+ Bug
+ 54413 - DataStrippingSampleSender returns 0 for number of bytes of any response
+
+
+
+
+
Improvements
+
+
HTTP Samplers
+
+
+ Bug
+ 54185 - Allow query strings in paths that start with HTTP or HTTPS
+
+
+
Other samplers
+
+
+ Bug
+ 54004 - Webservice Sampler : Allow adding headers to request with Header Manager
+
+ Bug
+ 54106 - JSR223TestElement should check for file existence when a filename is set instead of using Text Area content
+
+ Bug
+ 54107 - JSR223TestElement : Enable compilation and caching of Script Text
+
+ Bug
+ 54109 - JSR223TestElement : SampleResult properties should be set before entering script to allow user setting different code
+
+ Bug
+ 54230 - TCP Sampler, additions of "Close Connection", "SO_LINGER" and "End of line(EOL) byte value" options
+
+ Bug
+ 54182 - Support sending of ByteMessage for JMS Publisher.
+
+
+
Controllers
+
+
+ Bug
+ 54131 - ForEach Controller : Add start and end index for looping over variables
Thread Group: New Option Delay thread creation until needed
+
New Option "Delay thread creation until needed" that will create and start threads when needed instead of creating them on Test startup
+This new feature allows running tests with a huge number of short lived threads.
+
+
+
+
HTTP Cookie Manager (IPv6 support)
+
Add HTTPClient 4 cookie implementation in JMeter.
+Cookie Manager has now the default HC3.1 implementation and a new choice HC4 implementation (compliant with IPv6 address)
+
+
+
+
Memory and performance improvements
+
Significant improvements have been done in this version on memory usage of JMeterThread
+
JSR223 Elements (enable using Groovy, scala... as scripting languages) have been improved to enable:
+
+
usage of Compilable interface when available to boost CPU usage
+
caching of Compilation when scripts are used as Files
HTTP Request: HTTPClient 4 is now the default implementation
+
HTTPClient 4 is now the default HTTP Request implementation (and for Proxy element when generating HTTP requests).
+Previously the default was the HTTP Java implementation (i.e. the implementation provided by the JVM)
+
+
+
+
HTTP Request
+
Add Embedded URL Filter to HTTP Request Defaults Control (it was already present for HTTP Requests)
+
+
+
+
Miscellanous
+
+
CSV Dataset : Embedded new lines are now supported in quoted data
+
JMX files now contain the version of JMeter that created the file
+
JMeter Version is now available as property "jmeter.version"
+
+
Reporting Improvements:
+
+
Response Time Graph
+
Add a new visualizer Response Time Graph to draw a line graph showing the evolution of response time for a test
+
+
+
Settings for Response Time Graph
+
+
+
+
View Results in Table
+
Add latency to View Result in Table listener
+
+
+
+
Aggregate Graph
+
Small improvements: legend at left or right is now on 1 column (instead of 1 large line), ...
+
+
+
+
GUI and ergonomy Improvements:
+
HTTP Proxy Server simplifications
+
HTTPS Spoofing options have been removed from Proxy as HTTPS recording is directly available since JMeter 2.4.
+
+
+
+
HTTP Proxy Server
+
Allow URL Filters to be pasted from clipboard
+
+
+
+
Find in JMeter
+
CTRL + F for the new Find feature
+
+
+ESC key now closes popups.
+
+
+
User Interface in GNOME 3
+
Display 'Apache JMeter' title in app title bar in Gnome 3
+
+
+
+
+
+
Known bugs
+
+
The Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
Listeners don't show iteration counts when a If Controller has a condition which is always false from the first iteration (see
+ Bug
+ 52496).
+A workaround is to add a sampler at the same level as (or superior to) the If Controller.
+For example a Test Action sampler with 0 wait time (which doesn't generate a sample),
+or a Debug Sampler with all fields set to False (to reduce the sample size).
+
+
+
+Changing language can break part of the configuration of the following elements (see
+ Bug
+ 53679):
+
+
CSV Data Set Config (sharing mode will be lost)
+
Constant Throughput Timer (Calculate throughput based on will be lost)
+
+
+
+
+Note that there is a bug in Java on some Linux systems that manifests
+itself as the following error when running the test cases or JMeter itself:
+
+ [java] WARNING: Couldn't flush user prefs:
+ java.util.prefs.BackingStoreException:
+ java.lang.IllegalArgumentException: Not supported: indent-number
+
+This does not affect JMeter operation.
+
+
+
+
+
Incompatible changes
+
+
+When using CacheManager, JMeter now caches responses for GET queries provided header Cache-Control is different from "no-cache" as described in specification.
+Furthermore it doesn't put anymore in Cache deprecated entries for "no-cache" responses. See
+ Bug
+ 53521 and
+ Bug
+ 53522
+
+
+
+A major change has occured on JSR223 Test Elements, previously variables set up before script execution where stored in ScriptEngineManager which was created once per execution,
+now ScriptEngineManager is a singleton shared by all JSR223 elements and only ScriptEngine is created once per execution, variables set up before script execution are now stored
+in Bindings created on each execution, see
+ Bug
+ 53365.
+
+
+
+JSR223 Test Elements using Script file are now Compiled if ScriptEngine supports this feature, see
+ Bug
+ 53520.
+
+
+
+Shortcut for Function Helper Dialog is now CTRL+F1 (CMD + F1 for Mac OS), CTRL+F (CMD+F1 for Mac OS) now opens Search Dialog.
+
+
+
+By default, the TestCompiler now stores details of which pairs it has seen in Controller instances rather than in a static Set.
+[
+ Bug
+ 53796]
+This gives much better memory behaviour for delayed start test plans, as memory used is proportional to the number of concurrent threads.
+With the static Set memory usage was proportional to the total thread count.
+This change is very unlikely to cause a problem.
+The original behaviour can be restored by setting the property TestCompiler.useStaticSet=true
+
+
+
+HTTPS Spoofing options have been removed from Proxy as HTTPS recording is directly available since JMeter 2.4.
+
+
+
+
Bug fixes
+
+
HTTP Samplers and Proxy
+
+
+ Bug
+ 53521 - Cache Manager should cache content with Cache-control=private
+
+ Bug
+ 53522 - Cache Manager should not store at all response with header "no-cache" and store other types of Cache-Control having max-age value
+
+ Bug
+ 53838 - Pressing "Stop" does not interrupt the TCP sampler
+
+ Bug
+ 53911 - JmeterKeystore does not allow for key down the list of certificate
+
+
+
Other Samplers
+
+
+ Bug
+ 53348 - JMeter JMS Point-to-Point Request-Response sampler doesn't work when Request-queue and Receive-queue are different
+
+ Bug
+ 53357 - JMS Point to Point reports too high response times in Request Response Mode
+
+ Bug
+ 53440 - SSL connection leads to ArrayStoreException on JDK 6 with some KeyManagerFactory SPI
+ Bug
+ 53742 - When jmeter.save.saveservice.sample_count is set to true, elapsed time read by listener is always equal to 0
+
+ Bug
+ 53774 - RequestViewRaw does not show headers unless samplerData is non-null
+
+ Bug
+ 53802 - IdleTime values are not saved to CSV log
+
+ Bug
+ 53874 - View Results Tree : If some parameter containing special characters like % is not encoded, RequestViewHTTP fails with java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern and Response is not displayed
+ Bug
+ 53931 - Define HTTPClient 4 for the default HTTP Request (and Proxy element to generate the HTTP requests). Before the default, it was the HTTP Java Sampler
+
+ Bug
+ 53934 - Removes HTTPS spoofing options in JMeter HTTP Proxy Server. Since JMeter 2.4, the HTTPS protocol is directly supported by the proxy
+
+
+
Other samplers
+
+
+ Bug
+ 55310 - TestAction should implement Interruptible
+
+ Bug
+ 53318 - Add Embedded URL Filter to HTTP Request Defaults Control
+
+ Bug
+ 53782 - Enhance JavaSampler handling of JavaSamplerClient cleanup to use less memory
+
+ Bug
+ 53168 - OS Process - allow specification of stdout/stderr/stdin
+
+ Bug
+ 53844 - JDBC related elements should check class of Variable Name supposed to contain JDBC Connection Configuration to avoid ClassCastException
+
+
+
Controllers
+
+
+ Bug
+ 53671 - tearDown thread group to run even if shutdown test happens
+
+
+
Listeners
+
+
+ Bug
+ 53566 - Don't log partial responses to the jmeter log
+
+ Bug
+ 53716 - Small improvements in aggregate graph: legend at left or right is now on 1 column (instead of 1 large line), no border to the reference's square color, reduce width on some fields
+
+ Bug
+ 53718 - Add a new visualizer 'Response Time Graph' to draw a line graph showing the evolution of response time for a test
+
+ Bug
+ 53738 - Keep track of number of threads started and finished
+
+ Bug
+ 53753 - Summariser: no point displaying fractional time in most cases
+
+ Bug
+ 53749 - TestListener interface could perhaps be split up.
+This should reduce per-thread memory requirements and processing,
+as only test elements that actually use testIterationStart functionality now need to be handled.
+
+ Bug
+ 53941 - Add latency to View Result table listener
+ Bug
+ 53755 - Adding a HttpClient 4 cookie implementation in JMeter.
+Cookie Manager has now the default HC3.1 implementation and a new choice HC4 implementation (compliant with IPv6 address)
+
+
+
Functions
+
+
+ Bug
+ 51527 - __time() function : add another option to __time() to provide *seconds* since epoch
+
+
+
I18N
+
+
+
+
General
+
+
+ Bug
+ 53364 - Sort list of Functions in Function Helper Dialog
+
+ Bug
+ 53418 - New Option "Delay thread creation until needed" that will create and start threads when needed instead of creating them on Test startup
+
+ Bug
+ 42245 - Show clear passwords in HTTP Authorization Manager
+
+ Bug
+ 53616 - Display 'Apache JMeter' title in app title bar in Gnome 3
A new System Sampler that can be used to execute commands on the local machine.
+
+
+
+
OS Process Sampler results example with DNS lookup command 'dig'
+
+
+
+
JMS Samplers improvements
+
Addition of a "Non Persistent Delivery" option to send "Non-Persistent" (Guaranteed to be delivered at most once. Message loss is not a concern.) JMS messages
+
+
+
+
Support sending of JMS Object Messages to enable sending Objects unmarshalled from XML by XStream
+
+
+
+
Enable setting JMS Properties through JMS Publisher sampler
+
+
+
+
Test Action sampler
+
Allow premature exit from a loop
+
+
+
+
Webservice Sampler improvements
+
Add a jmeter property soap.document_cache to control size of Document Cache
+
+
+
+
Make Maintain HTTP Session configurable
+
+
+
+
Aggregate graph: Clustered Bar char with average, median, 90% line, min and max columns
+
Aggregate graph changes to Clustered Bar chart, add more columns (median, 90% line, min, max) and options, fixed some bugs
+
+
+
+
New settings for aggregate graph
+
+
+
+
Improvements of HTML report design generated by JMeter Ant task in extras folder
+
HTML report example
+
+
+
+
HTML report example with some assertion errors
+
+
+
+
Mailer Visualizer
+
+
Enable authentication, and connection security with SSL or TLS
+
Improve GUI design
+
Add internationalisation (i18n) support
+
+
+
+
+
New Visual Indicator of number of ERROR/FATAL messages in logs
+
Indicator shows number of ERROR/FATAL messsages in logs, it can be clicked to toggle Log Viewer panel
+
+
+
+
Dialog box to show detail of a parameter row
+
Add a detail button on parameters table to show detail of a Row
+
+
+
+
Detail box example
+
+
+
+
Plugin writers
+
+New interface org.apache.jmeter.engine.util.ConfigMergabilityIndicator has been introduced to tell whether a ConfigTestElement can be merged in Sampler (see
+ Bug
+ 53042):
+
public boolean applies(ConfigTestElement configElement);
+
+
+
New interface org.apache.jmeter.protocol.http.proxy.SamplerCreator to allow plugging HTTP based samplers that differ from default HTTP Samplers through Proxy during Recording Phase (see
+ Bug
+ 52674):
+
public String[] getManagedContentTypes();
+
public HTTPSamplerBase createSampler(HttpRequestHdr request, Map<String, String> pageEncodings, Map<String, String> formEncodings);
The Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
Listeners don't show iteration counts when a If Controller has a condition which is always false from the first iteration (see
+ Bug
+ 52496).
+A workaround is to add a sampler at the same level as (or superior to) the If Controller.
+For example a Test Action sampler with 0 wait time (which doesn't generate a sample),
+or a Debug Sampler with all fields set to False (to reduce the sample size).
+
+
+
+
+
Incompatible changes
+
+
+When doing replacement of User Defined Variables, Proxy will not substitute partial values anymore when "Regexp matching" is used. It will use Perl 5 word matching ("\b")
+
+
+
+In User Defined Variables, Test Plan, HTTP Sampler Arguments Table, Java Request Defaults, JMS Sampler and Publisher, LDAP Request Defaults and LDAP Extended Request Defaults, rows with
+empty Name and Value are no more saved.
+
+
+
+JMeter now expands the Test Plan tree to the testplan level and no further and selects the root of the tree. Furthermore default value of onload.expandtree is false.
+
+
+
+Graph Full Results Listener has been removed.
+
+
+
+When calling "Clear All" command, if Log Viewer is displayed its content will be cleared.
+
+
+
+
Bug fixes
+
+
HTTP Samplers and Proxy
+
+
+ Bug
+ 52613 - Using Raw Post Body option, text gets encoded
+
+ Bug
+ 52781 - Content-Disposition header garbled even if browser compatible headers is checked (HC4)
+
+ Bug
+ 52796 - MonitorHandler fails to clear variables when starting a new parse
+
+ Bug
+ 52871 - Multiple Certificates not working with HTTP Client 4
+
+ Bug
+ 52885 - Proxy : Recording issues with HTTPS, cookies starting with secure are partly truncated
+
+ Bug
+ 52886 - Proxy : Recording issues with HTTPS when spoofing is on, secure cookies are not always changed
+
+ Bug
+ 52897 - HTTPSampler : Using PUT method with HTTPClient4 and empty Content Encoding and sending files leads to NullPointerException
+
+ Bug
+ 53145 - HTTP Sampler - function in path evaluated too early
Mailer Visualizer has been internationalized. French translation added. (see
+ Bug
+ 53246)
+
+
+
General
+
+
+ Bug
+ 45839 - Test Action : Allow premature exit from a loop
+
+ Bug
+ 52614 - MailerModel.sendMail has strange way to calculate debug setting
+
+ Bug
+ 52782 - Add a detail button on parameters table to show detail of a Row
+
+ Bug
+ 52674 - Proxy : Add a Sampler Creator to allow plugging HTTP based samplers using potentially non textual POST Body (AMF, Silverlight...) and customizing them for others
+
+ Bug
+ 52934 - GUI : Open Test plan with the tree expanded to the testplan level and no further and select the root of the tree
+
+ Bug
+ 52941 - Improvements of HTML report design generated by JMeter Ant task extra
+
+ Bug
+ 53042 - Introduce a new method in Sampler interface to allow Sampler to decide wether a config element applies to Sampler
+
+ Bug
+ 52771 - Documentation : Added RSS feed on JMeter Home page under link "Subscribe to What's New"
+
+ Bug
+ 42784 - Show the number of errors logged in the GUI
+
+ Bug
+ 53256 - Make Clear All command clean LogViewer content
+
+ Bug
+ 53261 - Make "Error/fatal" counter added in
+ Bug
+ 42784 open Log Viewer panel when Warn Indicator is clicked
+
+
+
Non-functional changes
+
+
Upgraded to rhino 1.7R3 (was js-1.7R2.jar).
+Note: the Maven coordinates for the jar were changed from rhino:js to org.mozilla:rhino.
+This does not affect JMeter directly, but might cause problems if using JMeter in a Maven project
+with other code that depends on an earlier version of the Rhino Javascript jar.
+
+
+ Bug
+ 52675 - Refactor Proxy and HttpRequestHdr to allow Sampler Creation by Proxy
+
+ Bug
+ 52680 - Mention version in which function was introduced
+
+ Bug
+ 52788 - HttpRequestHdr : Optimize code to avoid useless work
+
JMeter Ant (ant-jmeter-1.1.1.jar) task was upgraded from 1.0.9 to 1.1.1
Updated to httpcomponents-client 4.1.3 (from 4.1.2)
+
Updated JMeter distributed testing guide (jmeter_distributed_testing_step_by_step.pdf). Changes source format to OpenOffice odt (from sxw)
+
+
+
+
+
Version 2.6
+
+
New and Noteworthy
+
+
Toolbar
+
A new toolbar on JMeter's main window
+
+
+
+
JMeter start test button
+
A new menu option and button allow to start a test ignoring the Pause Timers
+
+
+
+
JMeter GUI Look and Feel
+
Allow System or CrossPlatform LAF to be set from options menu
+
+
+
+
JMeter GUI - duplicate node
+
Add "duplicate node" in context menu
+
+
+
+
JMeter tree view - search facility
+
Functionality to search by keyword in Samplers Tree View
+
+
+
+
HTTP Request - raw request pane
+
Improve HTTP Request GUI to better show parameters without name (GWT RPC request or SOAP request for example)
+
+
+
+
HTTP Request - other changes
+
+
Allow multiple selection in arguments panel
+
Allow to add (paste) entries from the clipboard to an arguments list
+
Ability to move variables up or down in HTTP Request
+
+
+
+
+
HTTP Request - file protocol
+
Better support for file: protocol in HTTP sampler
+
+
+
Retrieve embedded resources with file: protocol
+
+
+
+
HTTP Request - Ignore embedded resources failed
+
Enable "ignore failed" for embedded resources
+
+
+
Parent success with a embedded resource failed
+
+
+
+
View Results in Table - child sample display
+
Add option to TableVisualiser to display child samples instead of parent
+
+
+
+
Key Store - multiple certificates
+
Allowing multiple certificates (JKS)
+
+
+
+
Aggregate graph improvements
+
Some improvements on Aggregate Graph Listener:
+
new GUI for settings
+
dynamic graph size
+
allow to change fonts for title graph and legend
+
allow to change bar color (background and text values)
+
allow to draw or not bars outlines
+
allow to select only some samplers by a regexp filter
+
allow to define Y axis maximum scale
+
+
+
+
+
Aggregate Graph bar
+
+
+
+
Counter - new reset option
+
Add an option to reset counter on each Thread Group iteration
+
+
+
+
Functions
+
+
Add a new function __RandomString to generate random Strings
+
Add a new function __TestPlanName returning the name of the current "Test Plan"
+
Add a new function __machineIP returning IP address
+
Add a new function __jexl2 to support Jexl2
+
+
+
+
+
User Defined Variable improvements
+
Add a comment field in User Defined Variables
+
Allow to add (paste) entries from the clipboard to an arguments list
+
Ability to move up or down variables in User Defined Variables
+
+
+
+
+
View Results Tree
+
In View Results Tree rather than showing just a message if the results are to big, show as much of the result as are configured
+
+
+
+
Controllers - change elements
+
Add ability to Change Controller elements
+
+
+
+
JDBC pre- and post-processor
+
Add JDBC pre- and post-processor
+
+
+
+
JDBC transaction isolation option
+
Allow to set the transaction isolation in the JDBC Connection Configuration
+
+
+
+
Poisson Timer
+
Add a Poisson based timer
+
+
+
+
GUI and OS interaction
+
Support for file Drag and Drop.
+
+
+
+
Confirm Remove Dialog box
+
Add a dialog box to confirm removing the element(s) when Remove action is called
+
+The dialogue can be skipped by setting the JMeter property confirm.delete.skip=true
+
+
+
Remote batching support
+
Use external store to hold samples during distributed testing,
+Added DiskStore remote sample sender: like Hold, but saves samples to disk until end of test
+
+
+
+
JMS Subscriber sampler
+
With JMS Subscriber, ability to use Selectors
+
+
+
+
New Logger Panel
+
A new Log Viewer has been added to the GUI and can be enabled from menu Options > Log Viewer:
+
+
+
This Log Viewer shows the jmeter.log file, and useful (for example) to debug BeanShell/BSF scripts:
+
+
+
+
The menu item Options / Choose Language is now fully functional
+
+The menu item Options / Choose Language now changes all the displayed text to the new language provided
+all messages are translated. You can help on this by translating into your language.
+
+
+
Legacy JMX and JTL Avalon format support restored
+
+Support for reading/writing the original Avalon XML format of JMX (script) and JTL (sample result) files was dropped in JMeter version 2.4.
+JMeter can now read the Avalon format files again, however there is no support for saving files in the old format.
+
+
+
JMeter jars available from Maven repository
+
+JMeter jars are now available from Maven repository.
+
+
+
+
+
Known bugs
+
+
+The Include Controller has some problems in non-GUI mode (see Bugs 40671, 41286, 44973, 50898).
+In particular, it can cause a NullPointerException if there are two include controllers with the same name.
+
+
+
The Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
Listeners don't show iteration counts when a If Controller has a condition which is always false from the first iteration (see
+ Bug
+ 52496).
+A workaround is to add a sampler at the same level as (or superior to) the If Controller.
+For example a Test Action sampler with 0 wait time (which doesn't generate a sample),
+or a Debug Sampler with all fields set to False (to reduce the sample size).
+
+
+
+
+
Incompatible changes
+
+
+JMeter versions since 2.1 failed to create a container sample when loading embedded resources.
+This has been corrected; can still revert to the
+ Bug
+ 51939 behaviour by setting the following property:
+httpsampler.separate.container=false
+
+
+Mirror server now uses default port 8081, was 8080 before 2.5.1.
+
+
+TCP Sampler handles SocketTimeoutException, SocketException and InterruptedIOException differently since 2.6, when
+these occurs, Sampler is marked as failed.
+
+
+Sample Sender implementations now resolve their configuration on Client side since 2.6.
+This behaviour can be changed with property sample_sender_client_configured (set it to false).
+
+
+
+The HTTP User Parameter Modifier test element has been removed; it has been deprecated for a long time.
+
+
+
+
+
Bug fixes
+
+
HTTP Samplers and Proxy
+
+
+ Bug
+ 51932 - CacheManager does not handle cache-control header with any attributes after max-age
+ Bug
+ 52221 - Nullpointer Exception with use Retrieve Embedded Resource without HTTP Cache Manager
+
+ Bug
+ 52310 - variable in IPSource failed HTTP request if "Concurrent Pool Size" is enabled
+
+ Bug
+ 52371 - API Incompatibility - Methods in HTTPSampler2 now require PostMethod instead of HttpMethod[Base]. Reverted to original types.
+
+ Bug
+ 49950 - Proxy : IndexOutOfBoundsException when recording with Proxy server
+
+ Bug
+ 52409 - HttpSamplerBase#errorResult modifies sampleResult passed as parameter;
+fix code which assumes that a new instance is created (i.e. when adding a sub-sample)
+
+ Bug
+ 51996 - JMS Initial Context leak newly created Context when Multiple Thread enter InitialContextFactory#lookupContext at the same time
+
+ Bug
+ 51691 - Authorization does not work for JMS Publisher and JMS Subscriber
+
+ Bug
+ 52036 - Durable Subscription fails with ActiveMQ due to missing clientId field
+
+ Bug
+ 52044 - JMS Subscriber used with many threads leads to javax.naming.NamingException: Something already bound with ActiveMQ
+
+ Bug
+ 52072 - LengthPrefixedBinaryTcpClientImpl may end a sample prematurely
+
+ Bug
+ 52390 - AbstractJDBCTestElement:Memory leak and synchronization issue in perConnCache
+
+
+
Controllers
+
+
+ Bug
+ 51865 - Infinite loop inside thread group does not work properly if "Start next loop after a Sample error" option set
+
+ Bug
+ 51868 - A lot of exceptions in jmeter.log while using option "Start next loop" for thread
+
+ Bug
+ 51866 - Counter under loop doesn't work properly if "Start next loop on error" option set for thread group
+
+ Bug
+ 52296 - TransactionController + Children ThrouputController or InterleaveController leads to ERROR sampleEnd called twice java.lang.Throwable: Invalid call sequence when TPC does not run sample
+
+ Bug
+ 52330 - With next-Loop-On-Error after error samples are not executed in next loop
+
+
+
Listeners
+
+
+ Bug
+ 52357 - View results in Table does not allow for multiple result samples
+
+ Bug
+ 52491 - Incorrect parsing of Post data parameters in Tree Listener / Http Request view
+ Bug
+ 52087 - TCPClient interface does not allow for partial reads
+
+ Bug
+ 52115 - SOAP/XML-RPC should not send a POST request when file to send is not found
+
+ Bug
+ 40750 - TCPSampler : Behaviour when sockets are closed by remote host
+
+ Bug
+ 52396 - TCP Sampler in "reuse connection mode" reuses previous sampler's connection even if it's configured with other host, port, user or password
+
+ Bug
+ 52048 - BSFSampler, BSFPreProcessor and BSFPostProcessor should share the same GUI
+
+
+
Controllers
+
+
+
+
Listeners
+
+
+ Bug
+ 52022 - In View Results Tree rather than showing just a message if the results are to big, show as much of the result as are configured
+
+ Bug
+ 52201 - Add option to TableVisualiser to display child samples instead of parent
+
+ Bug
+ 52214 - Save Responses to a file - improve naming algorithm
+
+ Bug
+ 52340 - Allow remote sampling mode to be changed at run-time
+
+ Bug
+ 52452 - Improvements on Aggregate Graph Listener (GUI and settings)
+
Resurrected OldSaveService to allow reading Avalon format JTL (result) files
+ Bug
+ 52099 - Allow to set the transaction isolation in the JDBC Connection Configuration
+
+ Bug
+ 52116 - Allow to add (paste) entries from the clipboard to an arguments list
+
+ Bug
+ 52160 - Don't display TestBeanGui items which are flagged as hidden
+
+ Bug
+ 51886 - SampleSender configuration resolved partly on client and partly on server
+
+ Bug
+ 52161 - Enable plugins to add own translation rules in addition to upgrade.properties.
+Loads any additional properties found in META-INF/resources/org.apache.jmeter.nameupdater.properties files
+ Bug
+ 46921 - Add Ability to Change Controller elements
+
+ Bug
+ 52240 - TestBeans should support Boolean, Integer and Long
+
+ Bug
+ 52241 - GenericTestBeanCustomizer assumes that the default value is the empty string
+
+ Bug
+ 52242 - FileEditor does not allow output to be saved in a File
+
+ Bug
+ 51093 - when loading a selection previously stored by "Save Selection As", show the file name in the blue window bar
+
+ Bug
+ 50086 - Password fields not Hidden in JMS Publisher, JMS Subscriber, Mail Reader sampler, SMTP sampler and Database Configuration
+
+ Bug
+ 29352 - Use external store to hold samples during distributed testing, Added DiskStore remote sample sender: like Hold, but saves samples to disk until end of test.
+
+ Bug
+ 52333 - Reduce overhead in calculating SampleResult#nanoTimeOffset
+
+ Bug
+ 52346 - Shutdown detects if there are any non-daemon threads left which prevent JVM exit.
+ Bug
+ 52471 - Improve Mirror Server performance by Using Pool of threads instead of launching a Thread for each request
+
Resurrected OldSaveService to allow reading Avalon format JMX files (removed in 2.4)
+
Add a dialog box to confirm removing the element(s) when Remove action is called
+
+ Bug
+ 41788 - Log viewer (console window) needed as an option
+
Add option to change the pause time (default 2000ms) in the daemon thread which checks for successful JVM exit.
+The thread is not now started unless the pause time is greater than 0.
+
+
+
+
Non-functional changes
+
+
fixes to build.xml: support scripts; localise re-usable property names
+
+ Bug
+ 51923 - Counter function bug or documentation issue ? (fixed docs)
+
Update velocity.jar to 1.7 (from 1.6.2)
+
Update js.jar to 1.7R3 (from 1.6R5)
+
Update commons-codec 1.5 => 1.6
+
Update commons-io 2.0.1 => 2.1
+
Update commons-jexl 2.0.1 => 2.1.1
+
Update jdom 1.1 => 1.1.2
+
Update junit 4.9 => 4.10
+
+ Bug
+ 51954 - Generated documents include </br> entries which cause extra blank lines
+
+ Bug
+ 52075 - JMeterProperty.clone() currently returns Object; it should return JMeterProperty
+
Updated httpcore to 4.1.4
+
+ Bug
+ 49753 - Please publish jMeter artifacts on Maven central repository
+
+
+
+
+
Version 2.5.1
+
+
Summary of main changes
+
+
+
HttpClient4 sampler now re-uses connections properly (previously it would use one per sample, which could quickly cause resource exhaustion).
+
Various fixes to JMS samplers
+
Functions are no longer spuriously invoked when used with a Configuration element
+
WebService sampler GUI has been re-organized for better design and more user-friendliness. Some improments on WSDL configuration assistant
+
Better handling of test shutdown. System.exit now only called if there is no other option; even this can be disabled.
+
+
+
+
Known bugs
+
+
+The Include Controller has some problems in non-GUI mode.
+In particular, it can cause a NullPointerException if there are two include controllers with the same name.
+
+
+
The Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
The If Controller may cause an infinite loop if the condition is always false from the first iteration.
+A workaround is to add a sampler at the same level as (or superior to) the If Controller.
+For example a Test Action sampler with 0 wait time (which doesn't generate a sample),
+or a Debug Sampler with all fields set to False (to reduce the sample size).
+
+
+
+The menu item Options / Choose Language does not change all the displayed text to the new language.
+[The behaviour has improved, but language change is still not fully working]
+To override the default local language fully, set the JMeter property "language" before starting JMeter.
+
+
+
Incompatible changes
+
+
+The HttpClient4 and Commons HttpClient 3.1 samplers previously used a retry count of 3.
+This has been changed to default to 1, to be compatible with the Java implementation.
+The retry count can be overridden by setting the relevant JMeter property, for example:
+
+ Bug
+ 51885 - Allow a JMeter Variable as input to XPathExtractor
+
+
+
Functions
+
+
+
+
I18N
+
+
+
+
General
+
+
+ Bug
+ 51822 - (part 1) save 1 invocation of GuiPackage#getCurrentGui
+
Added AsynchSampleSender which sends samples from server to client asynchronously.
+
Upgraded to htmlparser 2.1; JavaMail 1.4.4; JUnit 4.9
+
+
+
Non-functional changes
+
+
+ Bug
+ 49976 - FormCharSetFinder visibility is default instead of public.
+
+ Bug
+ 50917 - Property CookieManager.save.cookies not honored when set from test plan
+
Improve error logging when Javascript errors are detected.
+
Updated documentation footer
+
+
+
+
+
Version 2.5
+
+
Summary of main changes
+
+
+
The HTTP implementation can now be selected at run-time, and JMeter now also supports Apache HttpComponents HttpClient 4.x.
+Note that Commons HttpClient 3.1 is no longer actively developed, and support may be removed from JMeter in a future release.
+
+
The HTTP sampler now allows concurrent downloads of embedded resources in an HTML page
+
The HTTP Sampler can now report the size of a request before decompression.
+
The JMS and Mail samplers have been improved.
+
The new Test Fragment Test Element makes using Include Controllers easier
+
There are various improvements to the View Results Tree Listener
+
+ Bug
+ 30563 - Thread Group should have a start next loop option on Sample Error
+
There are two new Thread Group types - setUp and tearDown - which are run before and after the main Thread groups.
+
Client-Server mode now supports external stop/shutdown via UDP
+multiple JMeter server instances can be started on the same host without needing to change the port property.
+
+ Bug
+ 50516 - "Host" header in HTTP Header Manager is not included in generated HTTP request
+
+
+
+
+
+
+
+
+
+
+
Known bugs
+
+
+The Include Controller has some problems in non-GUI mode.
+In particular, it can cause a NullPointerException if there are two include controllers with the same name.
+
+
+
Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
+The menu item Options / Choose Language does not change all the displayed text to the new language.
+[The behaviour has improved, but language change is still not fully working]
+To override the default local language fully, set the JMeter property "language" before starting JMeter.
+
+
+
Incompatible changes
+
+
+Unsupported methods are no longer converted to GET by the Commons HttpClient sampler.
+
+
+
+Removed method public static long currentTimeInMs().
+This has been replaced by the instance method public long currentTimeInMillis().
+
+
+
+ProxyControl.getSamplerTypeName() now returns a String rather than an int.
+This is internal to the workings of the JMeter Proxy & its GUI, so should not affect any user code.
+
+
+
Bug fixes
+
+
HTTP Samplers and Proxy
+
+
+ Bug
+ 50178 - HeaderManager added as child of Thread Group can create concatenated HeaderManager names and OutOfMemoryException
+
+ Bug
+ 50392 - value is trimmed when sending the request in Multipart
+
+ Bug
+ 50686 - HeaderManager logging too verbose when merging instances
+ Bug
+ 50516 - "Host" header in HTTP Header Manager is not included in generated HTTP request
+
+ Bug
+ 50544 - In Apache Common Log the HEAD requests cause problems.
+
+ Bug
+ 51268 - HTTPS request through an invalid proxy causes NullPointerException and does not show in result tree.
+Rather than delegating to the JMeter thread handler for "unexpected" failures, ensure all Exceptions generate a sample error.
+
+ Bug
+ 50088 - fix getAvgPageBytes in SamplingStatCalculator so it returns what it should
+
+ Bug
+ 50203 Cannot set property "jmeter.save.saveservice.default_delimiter=\t"
+
mirror-server.sh - fix classpath to use : separator (not ;)
+
+ Bug
+ 50286 - URL Re-writing Modifier: extracted jsessionid value is incorrect when is between XML tags
+
+System.nanoTime() tends to drift relative to System.currentTimeMillis().
+Change SampleResult to recalculate offset each time.
+Also enable reversion to using System.currentTimeMillis() only.
+
+
+ Bug
+ 50425 - Remove thread groups from Controller add menu
+
+
+ Bug
+ 50675 - CVS Data Set Config incompatible with Remote Start
+Fixed RMI startup to provide location of JMX file relative to user.dir.
+
+
+ Bug
+ 50221 - Renaming elements in the tree does not resize label
+
+ Bug
+ 51002 - Stop Thread if CSV file is not available. JMeter now treats IOError as EOF.
+
Define sun.net.http.allowRestrictedHeaders=true by default. This fixes
+ Bug
+ 51238.
+
+ Bug
+ 51645 - CSVDataSet does not read UTF-8 files when file.encoding is UTF-8
+
+
+
+
+
Improvements
+
+
HTTP Samplers
+
+
AJP Sampler now implements Interruptible
+
Allow HTTP implementation to be selected at run-time
+
+ Bug
+ 50684 - Optionally disable Content-Type and Transfer-Encoding in Multipart POST
+
+ Bug
+ 50943 - Allowing concurrent downloads of embedded resources in html page
+
+ Bug
+ 50170 - Bytes reported by http sampler is after GUnZip Add optional properties to allow change the method to get response size
+
Hiding the proxy password on HTTP Sampler (just on GUI, not in JMX file)
+
+
+
Other samplers
+
+
+ Bug
+ 49622 - Allow sending messages without a subject (SMTP Sampler)
+
+ Bug
+ 49603 - Allow accepting expired certificates on Mail Reader Sampler
+ Bug
+ 49975 - New function returning the name of the current sampler
+
+
+
I18N
+
+
Add French translation for the new labels and reduce size for some labels (by abbreviation) on HTTP Sample
+
+
+
General
+
+
+ Bug
+ 30563 - Thread Group should have a start next loop option on Sample Error
+
+ Bug
+ 50347 - Eclipse setup instructions should remind user to download dependent jars
+
+ Bug
+ 50490 - Setup and Post Thread Group enhancements for better test flow.
+
All BeansShell test elements now have the script variables "prev" and "Label" defined.
+
+ Bug
+ 50708 - Classpath jar order in NewDriver not alphabetically
+
+ Bug
+ 50659 - JMeter server does not support concurrent tests - prevent client from starting another
+
Added remote shutdown functionality
+
Client JMeter engine now supports external stop/shutdown via UDP
+
UDP shutdown can now use a range of ports, from jmeterengine.nongui.port=4445 to jmeterengine.nongui.maxport=4455,
+allowing multiple JMeter instances on the same host without needing to change the port property.
+
Updated to httpcore 4.1.3 and httpclient 4.1.2
+
+
+
Non-functional changes
+
+
+ Bug
+ 50008 - Allow BatchSampleSender to be subclassed
+
+ Bug
+ 50450 - use System.array copy in jacobi solver as, being native, is more performant.
+
+ Bug
+ 50487 - runSerialTest verifies objects that never need persisting
+
Use Thread.setDefaultUncaughtExceptionHandler() instead of private ThreadGroup
+
Update to Commons Net 3.0
+
+
+
+
+
Version 2.4
+
+
Summary of main changes
+
+
+
+
JMeter now requires at least Java 1.5.
+
HTTP Proxy can now record HTTPS sessions.
+
JUnit sampler now supports JUnit4 annotations.
+
Added JSR223 (javax.script) test elements.
+
MailReader Sampler can now use any protocol supported by the underlying implementation.
+
An SMTP Sampler has been added.
+
JMeter now allows users to provide their own Thread Group implementations.
+
View Results Tree now supports more display options, including search and Regex Testing.
+
StatCalculator performance is much improved; Aggregate Report etc. need far less memory.
+
+JMS samplers have been extensively reworked, and should no longer lose messages.
+Correlation processing is improved.
+JMS Publisher and Subscriber now support both Topics and Queues.
+
+
Many other improvements have been made, please see below and in the manual.
+
+
+
+
+
+
+
Known bugs
+
+
+The Include Controller has some problems in non-GUI mode.
+In particular, it can cause a NullPointerException if there are two include controllers with the same name.
+
+
+
Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
+The menu item Options / Choose Language does not change all the displayed text to the new language.
+[The behaviour has improved, but language change is still not fully working]
+To override the default local language fully, set the JMeter property "language" before starting JMeter.
+
+
+
Incompatible changes
+
+
+HTTP Redirect now defaults to "Follow Redirects" rather than "Redirect Automatically".
+This is to enable JMeter to track cookies that may be sent during redirects.
+This does not affect existing test plans; it only affects the default for new HTTP Samplers.
+
+
+
+The Avalon file format for JMX and JTL files is no longer supported.
+Any such files will need to be converted by reading them in JMeter 2.3.4 and resaving them.
+
+
+
+The XPath Assertion and XPath Extractor elements no longer fetch external DTDs by default; this can be changed in the GUI.
+
+
+
+JMSConfigGui has been renamed as JMSSamplerGui.
+This does not affect existing test plans.
+
+
+
+The constructor public SampleResult(SampleResult res) has been changed to become a true "copy constructor".
+It no longer calls addSubResult(). This may possibly affect some 3rd party add-ons.
+
+
+
Bug fixes
+
+
HTTP Samplers and Proxy
+
+
+ Bug
+ 47445 - Using Proxy with https-spoofing secure cookies need to be unsecured
+
+ Bug
+ 47442 - Missing replacement of https by http for certain conditions using https-spoofing
+
+ Bug
+ 48451 - Error in: SoapSampler.setPostHeaders(PostMethod post) in the else branch
+
+ Bug
+ 48542 - SoapSampler uses wrong response header field to decide if response is gzip encoded
+ Bug
+ 49149 - usermanual/index.html has typo in link to "Regular Expressions" page
+
+ Bug
+ 49394 - Classcast Exception in ActionRouter.postActionPerformed
+
+ Bug
+ 48136 - Essential files missing from source tarball.
+Source archives now contain all source files, including source files previously only provided in the binary archives.
+
+
+ Bug
+ 48331 - XpathExtractor does not return XML string representations for a Nodeset
+ Bug
+ 47474 - View Results Tree support for plugin renderers
+
Allow Idle Time to be saved to sample log files
+
+ Bug
+ 48259 - Improve StatCalculator performance by using TreeMap
+
Listeners using SamplingStatCalculator have much reduced memory needs
+as the Sample cache has been moved to the new CachingStatCalculator class.
+In particular, Aggregate Report can now handle large numbers of samples.
+
+
Aggregate Report and Summary Report now allow column headers to be optionally excluded
+
+ Bug
+ 49506 - Add .csv File Extension in open dialog box from "read from file" functionality of listeners
+
+ Bug
+ 49545 - Formatted (parsed) view of Sample Result in Results Tree
Beanshell, JavaMail and JMS API (Apache Geronimo) jars are now included in the binary archive.
+
Add TestBean Table Editor support
+
Removed all external libraries from SVN; added download_jars Ant target
+
Updated various jar files:
+
+
BeanShell - 2.0b4 => 2.0b5
+
Commons Codec - 1.3 => 1.4
+
Commons-Collections - 3.2 => 3.2.1
+
JTidy => r938
+
JUnit - 3.8.2 => 4.8.1
+
Logkit - 1.2 => 2.0
+
Xalan Serializer = 2.7.1 (previously erroneously shown as 2.9.1)
+
Xerces xml-apis = 1.3.04 (previously erroneously shown as 2.9.1)
+
Some jar files were renamed.
+
+
+
+
+
+
+
Version 2.3.4
+
+
Summary of main changes
+
+
+This is a minor bug-fix release, mainly to correct some bugs that were accidentally added in 2.3.3.
+
+
+
+
Known bugs
+
+
+The Include Controller has some problems in non-GUI mode.
+In particular, it can cause a NullPointerException if there are two include controllers with the same name.
+
+
+
Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
+The menu item Options / Choose Language does not change all the displayed text to the new language.
+[The behaviour has improved, but language change is still not fully working]
+To override the default local language fully, set the JMeter property "language" before starting JMeter.
+
+
+
Bug fixes
+
+
HTTP Samplers and Proxy
+
+
+ Bug
+ 47321 - HTTPSampler2 response timeout not honored
Change ResultCollector to only warn if the directory was not created
+
Fix some synchronisation issues in ResultCollector and SampleResult (wrong locks were being used)
+
+
+
I18N
+
+
Fixed bug introduced in 2.3.3: JMeter does not start up if there is no messages.properties file for the default Locale.
+
+
+
General
+
+
Fix problems with remote clients - bug introduced in 2.3.3
+
+ Bug
+ 47377 - Make ClassFinder more robust and close zipfile resources
+
Fix some errors in generating the documentation (latent bug revealed in 2.3.3 when Velocity was upgraded)
+
+
+
Improvements
+
+
Other samplers
+
+
+ Bug
+ 47266 - FTP Request Sampler: allow specifying an FTP port, other than the default
+
+
+
+
+
Version 2.3.3
+
+
Summary of main changes
+
+
+The handling of test closedown is much improved.
+The gradual "Shutdown" command now waits until all threads have stopped,
+and does not report an error if threads don't stop within 5 seconds.
+The immediate "Stop" command can now be used if "Shutdown" takes too long.
+Also the immediate "Stop" command is able to interrupt samplers which support the new Interruptible interface (e.g. HTTP and SOAP, FTP).
+This allows immediate completion of pending responses.
+Non-GUI mode tests can also now be sent a "Shutdown" or "Stop" message.
+Test Action now supports a "Stop Now" action,
+as do the Thread Group and Result Status Action Handler Post Processor elements.
+
+
+
+HTTP Cookie handling is improved, and HTTP POST can now use variable file names correctly.
+HTTP, SOAP/XML-RPC and WebService(SOAP) sampler character encodings updated to be more consistent.
+HTTP Samplers now support connection and response timeouts (requires JVM 1.5 for the HTTP Java sampler).
+Together with the closedown improvements described above, this should avoid most cases where a test run hangs.
+Multiple Header Manager elements are now supported for a single HTTP sampler.
+The Proxy Server is improved, and no longer stores "Host" headers by default.
+
+
+
+JDBC Request can optionally save the results of Select statements to variables.
+JDBC Request now handles quoted strings and UTF-8, and can handle arbitrary variable types.
+
+
+
+There are several new functions:
+__char() function: allows arbitrary Unicode characters to be entered in fields.
+__unescape() function: allows Java-escaped strings to be used.
+_unescapeHtml() function: decodes Html-encoded text.
+__escapeHtml() function: encodes text using Html-encoding.
+A reference to a missing function - e.g. ${__missing(a)} - is now treated the same as a missing variable.
+Previously the function name - and leading { - were dropped. This makes it easier to debug test plans.
+
+
+
+Some Assertions can now be applied to sub-samples as well as (or instead of) just the parent sample.
+There is a new Random Variable Configuration element.
+
+
+
+JMS samplers are much improved (see details below). The TCP Sampler now supports some additional clients and is a bit more flexible.
+
+
+
+Client-server mode has been improved, and the server can optionally use a fixed RMI port, which should help with setting up firewalls.
+
+
+
+Various I18N changes have been made; language change works better (though not perfect yet).
+There are improved French translations as well as new Polish and Brazilian Portugese translations.
+
+
+
+The BeanShell jar is now included with the binary archive; there is no need to download it separately.
+
+
+
+
+
Known bugs
+
+
+The Include Controller has some problems in non-GUI mode.
+In particular, it can cause a NullPointerException if there are two include controllers with the same name.
+
+
+
Once Only controller behaves correctly under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
+The menu item Options / Choose Language does not change all the displayed text to the new language.
+[The behaviour has improved, but language change is still not fully working]
+To override the default local language fully, set the JMeter property "language" before starting JMeter.
+
+
+
Incompatible changes
+
+When loading sample results from a file, previous results are no longer cleared.
+This allows one to merge multiple files.
+If the previous behaviour is required,
+use the menu item Run/Clear (Ctrl+Shift+E) or Run/Clear All (Ctrl+E) before loading the file.
+
+
+The test elements "Save Results to a file" and "Generate Summary Results" are now shown as Listeners.
+They were previously shown as Post-Processors, even though they are implemented as Listeners.
+
+
+The Cookie Manager no longer saves incoming cookies as variables by default.
+To save cookies as variables, define the property "CookieManager.save.cookies=true".
+Also, cookies names are prefixed with "COOKIE_" before they are stored (this avoids accidental corruption of local variables)
+To revert to the original behaviour, define the property "CookieManager.name.prefix= " (one or more spaces).
+
+
+The Counter element is now shown as a Configuration element.
+It was previously shown as a Pre-Processor, even though it is implemented as a Config item.
+
+
+The above changes only affect the icons that are displayed and the locations in the GUI pop-up menus.
+They do not affect test plans or test behaviour.
+
+
+The PreProcessors are now invoked directly by the JMeterThread class,
+rather than by the TestCompiler#configureSampler() method. (JMeterThread handles the PostProcessors).
+This does not affect test plans or behaviour, but could perhaps affect 3rd party add-ons (very unlikely).
+
+
+Moved the Scoping Rules sub-section from Section 3. "Building a Test Plan" to Section 4. "Elements of a test plan"
+
+
+
+The While controller now trims leading and trailing spaces from the condition value before it is compared
+with LAST, blank or false.
+
+
+
+The "threadName" variable in the _jexl() and __javaScript() functions was previously misspelt as "theadName".
+
+
+
+The following deprecated methods were removed from JOrphanUtils: booleanToString(boolean) and valueOf(boolean).
+Java 1.4+ has these methods in the Boolean class.
+
+
+
+The TestElement interface has some new methods:
+
+ Bug
+ 45458 - Point to Point JMS in combination with authentication
+
+ Bug
+ 45460 - JMS TestPlan elements depend on resource property
+
Various ReceiveSubscriber thread-safety fixes
+
JMSPublisher and Subscriber fixes: thread-safety, support dynamic locale changes, locale independence for JMX attribute values
+
FTP Sampler now logs out before disconnecting.
+
TCP sampler now calls setupTest() and teardownTest() methods
+
+ Bug
+ 45887 - TCPSampler: timeout property incorrectly set
+
+
+
Controllers
+
+
Fix NPE when using nested Transaction Controllers with parent samples
+
Fix processing of Transaction Controller parent mode so current sampler is set to actual sampler
+
+ Bug
+ 44941 - Throughput controllers should not share global counters
+
+ Bug
+ 47120 - Throughput Controller: change percent executions to total executions, the value is stored in a String and interpreted as 1 execution
+
+ Bug
+ 47150 - ThreadGroup with a loop count of zero causes infinite loop
+
+ Bug
+ 47009 - Insert parent caused child controller name to be reset
+
+ Bug
+ 47165 - Using duplicate Module Controller names in command line mode causes NPE
+
+
+
Listeners
+
+
Mailer Visualizer documentation now agrees with code i.e. failure/success counts need to be exceeded to trigger the mail.
+
Mailer Visualizer now shows the failure count
+
Mailer Visualiser - fix parsing of multiple e-mail address when using Test button
+
+ Bug
+ 45976 - incomplete result file when using remote testing with more than 1 server
+
Fix Summariser so it works in client server mode
+
+ Bug
+ 34096 - Duplicate samples not eliminated when writing to CSV files
+
Save "Include group Name in Label" setting in Aggregate and Summary reports
+
The JMeter variable "sample_variables" is sent to all server instances to ensure the data is available to the client.
+
CSVSaveService - check for EOF while reading quoted string
+
+
+
Assertions
+
+
+ Bug
+ 45749 - Response Assertion does not work with a substring that happens to be an invalid RE
+
+ Bug
+ 45904 - Allow 'Not' Response Assertion to succeed with null sample
+
+
+
Functions
+
+
Fix regex function - was failing to process $m$mid$n$ correctly
+
Protect against possible NPE in RegexFunction if called during test shutdown.
+
Avoid NPE if XPath function does not match any nodes
+
Correct the variable name "theadName" to "threadName" in the __jexl() and __javaScript() functions
+
A reference to a missing function - e.g. ${__missing(a)} - is now treated the same as a missing variable. Previously the function name - and leading { - were dropped.
+
+
+
I18N
+
+
Fixed language change handling for menus (does not yet work for TestBeans)
+
Add HeaderAsPropertyRenderer to support header resource names; use this to fix locale changes in various GUI elements
Fix incorrect GUI classifications:
+"Save Results to a file" and "Generate Summary Results" are now shown as Listeners.
+"Counter" is now shown as a Configuration element.
+
Added locales.add property to allow for new Locales
+
+
+
General
+
+
Allow spaces in JMeter path names (apply work-round for Java Bug 4496398)
+
Process JVM_ARGS last in script files so users can override default settings
+
+ Bug
+ 46636 - Allow server mode to optionally use a fixed rmi port
+
Make some samplers interruptible: HTTP (both), SoapSampler, FTPSampler
+
Test Action now supports "Stop Now" action, as do the Thread Group and Result Status Post Processor elements
+
The Menu items Stop and Shutdown now behave better. Shutdown will now wait until all threads exit.
+In GUI mode it can be cancelled and Stop run instead.
+Stop now reports if some threads will not exit, and exits if running in non-GUI mode
+
Add UDP server to wait for shutdown message if running in non-GUI mode; add UDP client to send the message.
Introduce AbstractListenerGui class to make it easier to create Listeners with no visual output
+
Assertions are run after PostProcessors; change order of pop-up menus accordingly
+
Remove unnecessary clone() methods from function classes
+
Moved PreProcessor invocation to JMeterThread class
+
Made HashTree Map field final
+
Improve performance of calling ResultCollector#isSampleWanted() for multiple samples
+
Updated to new versions of: xmlgraphics-commons (1.3.1), jdom (1.1), xstream (1.3.1), velocity (1.6.2)
+
+
+
+
+
+
Version 2.3.2
+
+
Summary of main changes
+
+
Bug fixes
+
+Version 2.3.1 changed the way binary and text content types were determined as far as the View Results Tree Listener was concerned:
+originally everything except "image/" content types were considered text, but 2.3.1 introduced a check
+for specific content types. This has caused problems,
+as several popular types were omitted and these were no longer shown by default in the Response tab.
+Rather than try to list all the possible text types, JMeter now just checks for the following binary types:
+
+
image/*
+
audio/*
+
video/*
+
+All other types are now assumed to be text.
+
+
+
+JMeter 2.3.1 introduced a bug in the Cookie Manager
+- if "Clear Cookie each iteration" was selected, all threads would see the same cookies.
+This bug has been corrected.
+
+
+
Improvements
+
+
+The Proxy server can now record binary requests.
+By default the content types
+application/x-amf and application/x-java-serialized-object
+will be treated as binary and saved in a file.
+To change the content types, update the property proxy.binary.types.
+
+
+
+The CSV Dataset configuration element has new file sharing options: per thread group, per thread, per identifier.
+This allows for more flexible file processing, e.g. each thread can process the same data in the same order.
+
+
+
Switch Controller now works properly with functions and variables,
+and the condition can now be a name instead of a number.
+Simple Controller now works properly under a While Controller
+
+
CSV fields in JTL files can now contain delimiters.
+CSV and XML files can now contain additional variables (define the JMeter property sample_variables).
+
+
Response Assertion can now match on substrings (i.e. not regular expression).
+Regex extractor can operate on variables.
+
+
+XPath processing is improved; Tidy errors are handled better.
+
+
+
Save Table Data buttons added to Summary and Aggregate reports to allow easy saving of the calculated data.
+
+
+HTTP samplers can now save just the MD5 hash of responses, rather than the entire response.
+As a special case, if the HTTP Sampler path starts with "http://" or "https://" then this is used as the full URL,
+overriding the host and port fields.
+The HTTP Samplers can now POST multiple files.
+Webservice(SOAP) Sampler can now load local WSDL files using the "file:" protocol.
+
+
+
+A simple HTTP Cache Manager has been added. This needs further development.
+
+
+
+View Results Tree Listener now uses Tidy to display XML.
+This should allow more content to be displayed succesfully.
+It also avoids the need to download remote DTD files, which can slow the rendering considerably.
+
+
+
+MailReader sampler now supports POP3S and IMAPS protocols. Individual mails are now added as sub-samples.
+
+
+
+Various improvements to the BSF Sampler: now supports Jexl, and Javascript bug works properly.
+Added BSF PreProcessor, PostProcessor and Assertion test elements.
+All now have access to "props" JMeter Properties object.
+
+
+
Number of classes loaded in non-GUI mode is much reduced.
+
+
Known bugs
+
+
+The Include Controller has some problems in non-GUI mode.
+In particular, it can cause a NullPointerException if there are two include controllers with the same name.
+
+
+
Once Only controller behaves OK under a Thread Group or Loop Controller,
+but otherwise its behaviour is not consistent (or clearly specified).
+
+
+The menu item Options / Choose Language does not change all the displayed text to the new language.
+To override the default local language, set the JMeter property "language" before starting JMeter.
+
+
Incompatible changes
+
+
+To reduce the number of classes loaded in non-GUI mode,
+Functions will only be found if their classname contains the string
+'.functions.' and does not contain the string '.gui.'.
+All existing JMeter functions conform to this restriction.
+To revert to earlier behaviour, comment or change the properties classfinder.functions.* in jmeter.properties.
+
+
The reference value parameter for intSum() is now optional.
+As a consequence, if a variable name is used, it must not be a valid integer.
+
The supplied TCPClient implementation no longer treats tcp.eolByte=0 as special.
+To skip EOL checking, set tcp.eolByte=1000 (or some other value which is not a valid byte)
+
+
+Leading and trailing spaces are trimmed from variable names in function calls.
+For example, ${__Random(1,63, LOTTERY )} will use the variable 'LOTTERY' rather than ' LOTTERY '.
+
+
+Synchronization has been removed from the RunningSample class (it was not fully threadsafe anyway).
+Developers of 3rd party add-ons that use the class may need to synchronize access.
+
+
+
+
Bug fixes
+
+
Check that the CSV delimiter is reasonable.
+
Fix Switch Controller to work properly with functions and variables
+
+ Bug
+ 44011 - application/soap+xml not treated as a text type
+
+ Bug
+ 43427 - Simple Controller is only partly executed in While loop
+
+ Bug
+ 33954 - Stack Overflow in If/While controllers (may have been fixed previously)
The BeanShell and BSF component documentation made some incorrect references to the "SampleResponse" object;
+this has been corrected to "SampleResult"
+
BSF Sampler now works properly with Javascript
+
Test Action "Stop Test" now works
+
+ Bug
+ 42833 - Argument class uses LinkedHashMap in getArgumentsAsMap() to preserve ordering
+ Bug
+ 42204 - add thread group name to Aggregate and Summary reports
+
FTP Sampler sets latency = time to login
+
FTP Sampler sets a URL if it can
+
+ Bug
+ 41921 - add option for samplers to store MD5 of response; done for HTTP Samplers.
+
Regex Function can now also be applied to a variable rather than just the previous sample result.
+
Remove HTML Parameter Mask,HTTP User Parameter Modifier from menus as they are deprecated
+
+ Bug
+ 44807 - allow session ids to be terminated by backslash
+
+ Bug
+ 44784 - allow for broken server returning additional charset
+
Added TESTSTART.MS property / variable = test start time in milliseconds
+
Add POP3S and IMAPS protocols to Mail Reader Sampler.
+
Mail Reader Sampler now creates a sub-sample for each mail.
+
The supplied TCPClient implementation no longer treats tcp.eolByte=0 as special.
+To skip EOL checking, set tcp.eolByte=1000 (or some other value which is not a valid byte)
+
+
JUnit sampler GUI now also finds Test classes defined in user.classpath
+
+Leading and trailing spaces are trimmed from variable names in function calls.
+For example, ${__Random(1,63, LOTTERY )} will use the variable 'LOTTERY' rather than ' LOTTERY '
+
+
Webservice(SOAP) Sampler can now load local WSDL files using the file: protocol
+
+ Bug
+ 44872 - Add "All Files" filter to Open File dialogs
+
Mirror server can now be run independently (mirror-server.cmd and mirror-server.sh)
+
+ Bug
+ 19128 - Added multiple file POST support to HTTP Samplers
+
Allow use of special name LAST to mean the last test run; applies to -t, -l, -j flags
Better handling of MirrorServer startup problems and improved unit test.
+
Build process now detects missing 3rd party libraries and reports need for both binary and source archives
+
Skip BeanShell tests if jar is not present
+
Update to Xerces 2.9.1, Xalan 2.7.1, Commons IO 1.4, Commons Lang 2.4, Commons-Logging 1.1.1, XStream 1.3, XPP3 1.1.4c
+
Use properties for log/logn function descriptions
+
Check that all jmx files in the demos directory can be loaded OK
+
Update copyright to 2008; use copy tag instead of numeric character in HTML output
+
Methods called from constructors must not be overridable: make GUI init methods private
+
Make static variables final if possible
+
Split changes into current and previous
+
+
+
+
+
Version 2.3.1
+
Summary of changes
+
+
JMeter Proxy
+
+
+The Proxy spoof function was broken in 2.3; it has been fixed.
+Spoof now supports an optional parameter to limit spoofing to particular URLs.
+This is useful for HTTPS pages that have insecure content - e.g. images/stylesheets may be accessed using HTTP.
+Spoofed responses now drop the default port (443) from https links to make them work better.
+
+
+Ignored proxy samples are now visible in Listeners - the label is enclosed in [ and ] as an indication.
+Proxy documentation has been improved.
+
+
+
GUI changes
+
+
The Add menus show element types in the order in which they are processed
+- see Test Plan Execution Order.
+It is no longer possible to add test elements to inappropriate parts of the tree
+- e.g. samplers cannot be added directly under a test plan.
+This also applies to Paste and drag and drop.
+
+
+
+The File menu now supports a "Revert" option, which reloads the current file.
+Also the last few file names used are remembered for easy reloading.
+
+
+
+The Options Menu now supports Collapse All and Expand All items to collapse and expand the test tree.
+
+
+
Remote testing
+
+
+The JMeter server now starts the RMI server directly (by default).
+This simplifies testing, and means that the RMI server will be stopped when the server stops.
+
+
+
+Functions can now be used in Listener filenames (variables do not work).
+
+
+
+Command-line option -G can now be used to define properties for remote servers.
+Option -X can be used to stop a remote server after a non-GUI run.
+Server can be set to automatically exit after a single test (set property server.exitaftertest=true).
+
+
+
Other enhancements
+
+
+JMeter startup no longer loads as many classes; this should reduce memory requirements.
+
+
+
+Parameter and file support added to all BeanShell elements.
+Javascript function now supports access to JMeter objects;
+Jexl function always did have access, but the documentation has now been included.
+New functions __eval() and __evalVar() for evaluating variables.
+
+
+
+CSV files with the correct header column names are now automatically recognised when loaded.
+There is no need to configure the properties.
+
+
+
+The hostname can now be saved in CSV and XML output files.
+New "Successes only" option added when saving result files.
+Errors / Successes only option is now supported when loading XML and CSV files.
+
+
+
+General documentation improvements.
+
+
+
HTTP
+
+
PUT and DELETE should now work properly.
+Cookie Manager no longer clears manually entered cookies.
+
+
Now handles the META tag http-equiv charset
+
+
JDBC
+
+
JDBC Sampler now allows INOUT and OUT parameters for Called procedures.
+JDBC Sampler now allows per-thread connections - set Max Connections = 0 in JDBC Config.
+
+
+
+
+
+
Incompatible changes
+
+
JMeter server now creates the RMI registry by default.
+If the RMI registry has already been started externally, this will generate a warning message, but the server will continue.
+This should not affect JMeter testing.
+However, if you are also using the RMI registry for other applications there may be problems.
+For example, when the JMeter server shuts down it will stop the RMI registry.
+Also user-written command files may need to be adjusted (the ones supplied with JMeter have been updated).
+To revert to the earlier behaviour, define the JMeter property: server.rmi.create=false.
+
+
The Proxy server removes If-Modified-Since and If-None-Match headers from generated Header Managers.
+To revert to the previous behaviour, define the property proxy.headers.remove with no value
+
+
+
Bug fixes
+
+
+ Bug
+ 43430 - Count of active threads is incorrect for remote samples
+
Throughput Controller was not working for "all thread" counts
+
If a POST body is built from parameter values only, these are now encoded if the checkbox is set.
+
+ Bug
+ 43584 - Assertion Failure Message contains a comma that is also used as the delimiter for CSV files
+
HTTP Mirror Server now always returns the exact same content, it used to return incorrect data if UTF-8 encoding was used for HTTP POST body, for example
+
+ Bug
+ 43612 - HTTP PUT does not honor request parameters
+ Bug
+ 42012 - Variable Listener filenames do not get processed in remote tests.
+Filenames can now include function references; variable references do not work.
+
Ensure Listener nodes get own save configuration when copy-pasted
+
Correct Proxy Server include and exclude matching description - port and query are included, contrary to previously documented.
+
Aggregate Graph and Aggregate Report Column Header is KB/Sec; fixed the values to be KB rather than bytes
+
+Fix SamplingStatCalculator so it no longer adds elapsed time to endTime, as this is handled by SampleResult.
+This corrects discrepancies between Summary Report and Aggregate Report throughput calculation.
+
+
Default HTTPSampleResult to ISO-8859-1 encoding
+
Fix default encoding for blank encoding
+
Fix Https spoofing (port problem) which was broken in 2.3
+
Fix HTTP (Java) sampler so http.java.sampler.retries means retries, i.e. does not include initial try
+
Fix SampleResult dataType checking to better detect TEXT documents
+
+
+
Improvements
+
+
Add run_gui Ant target, to package and then start the JMeter GUI from Ant
+
Add File->Revert to easily drop the current changes and reload the project file currently loaded
+ Bug
+ 42555 - [I18N] Proposed corrections for the french translation
+
+ Bug
+ 43727 - Test Action does not support variables or functions
+
The Proxy server removes If-Modified-Since and If-None-Match headers from generated Header Managers by default.
+To change the list of removed headers, define the property proxy.headers.remove as a comma-separated list of headers to remove
+
The javaScript function now has access to JMeter variables and context etc. See JavaScript function
+
Use drop-down list for BSF Sampler language field
+
Add hostname to items that can be saved in CSV and XML output files.
+
Errors only flag is now supported when loading XML and CSV files
+
Ensure ResultCollector uses SaveService encoding
+
Proxy now rejects attempts to use it with https
+
Proxy spoofing can now use RE matching to determine which urls to spoof (useful if images are not https)
+
Proxy spoofing now drops the default HTTPS port (443) when converting https: links to http:
+
Add Successes Only logging and display
+
The JMeter log file name is formatted as a SimpleDateFormat (applied to the current date) if it contains paired single-quotes, .e.g. 'jmeter_'yyyyMMddHHmmss'.log'
+
Added Collapse All and Expand All Option menu items
+
Allow optional definition of extra content-types that are viewable as text
+
+
+
Non-functional Improvements
+
+
Functor code tightened up; Functor can now be used with interfaces, as well as pre-defined targets and parameters.
+
Save graphics function now prompts before overwriting an existing file
+
Debug Sampler and Debug PostProcessor added.
+
Fixed up method names in Calculator and SamplingStatCalculator
+
Tidied up Listener documentation.
+
+
+
+
+
Version 2.3
+
+
Fixes since 2.3RC4
+
+
Bug fixes
+
+
Fix NPE in SampleResultConverter - XStream PrettyPrintWriter cannot handle nulls
+
If Java HTTP sampler sees null ResponseMessage, replace with HTTP header
+
+ Bug
+ 43332 - 2.3RC4 does not clear Guis based on TestBean
+
+ Bug
+ 42948 - Problems with Proxy gui table fields in Java 1.6
+
Fixup broken jmeter-server script
+
+ Bug
+ 43364 - option to revert If Controller to pre 2.3RC3 behaviour
+
+ Bug
+ 43449 - Statistical Remote mode does not handle Latency
+
+ Bug
+ 43450 (partial fix) - Allow SampleCount and ErrorCount to be saved to/restored from files
+
+
+
Improvements
+
+
Add nameSpace option to XPath extractor
+
Add NULL parameter option to JDBC sampler
+
Add documentation links for Rhino and BeanShell to functions; clarify variables and properties
+
Ensure uncaught exceptions are logged
+
Look for user.properties and system.properties in JMeter bin directory if not found locally
+
+
+
Fixes since 2.3RC3
+
+
Fixed NPE in Summariser (bug introduced in 2.3RC3)
+
Fixed setup of proxy port (bug introduced in 2.3RC3)
+
Fixed errors when running non-GUI on a headless host (bug introduced in 2.3RC3)
+
+ Bug
+ 43054 - SSLManager causes stress tests to saturate and crash (bug introduced in 2.3RC3)
+
Clarified HTTP Request Defaults usage of the port field
+The JMeter remote server does not support multiple concurrent tests - each remote test should be run in a separate server.
+Otherwise tests may fail with random Exceptions, e.g. ConcurrentModification Exception in StandardJMeterEngine.
+See
+ Bug
+ 43168.
+
+
+The default HTTP Request (not HTTPClient) sampler may not work for HTTPS connections via a proxy.
+This appears to be due to a Java bug, see
+ Bug
+ 39337.
+To avoid the problem, try a more recent version of Java, or switch to the HTTPClient version of the HTTP Request sampler.
+
+
Transaction Controller parent mode does not support nested Transaction Controllers.
+Doing so may cause a Null Pointer Exception in TestCompiler.
+
+
Thread active counts are always zero in CSV and XML files when running remote tests.
+
+
The property file_format.testlog=2.1 is treated the same as 2.2.
+However JMeter does honour the 3 testplan versions.
+
+
+ Bug
+ 22510 - JMeter always uses the first entry in the keystore.
+
+
+Remote mode does not work if JMeter is installed in a directory where the path name contains spaces.
+
+
+BeanShell test elements leak memory.
+This can be reduced by using a file instead of including the script in the test element.
+
+
+Variables and functions do not work in Listeners in client-server (remote) mode so they cannot be used
+to name log files in client-server mode.
+
+
+CSV Dataset variables are defined after configuration processing is completed,
+so they cannot be used for other configuration items such as JDBC Config.
+(see
+ Bug
+ 40394)
+
+
+
Summary of changes (for more details, see below)
+
+Some of the main enhancements are:
+
+
+
Htmlparser 2.0 now used for parsing
+
HTTP Authorisation now supports domain and realm
+
HttpClient options can be specified via httpclient.parameters file
+
HttpClient now behaves the same as Java Http for SSL certificates
+
HTTP Mirror Server to allow local testing of HTTP samplers
+
HTTP Proxy supports XML-RPC recording, and other proxy improvements
+
__V() function allows support of nested variable references
+
LDAP Ext sampler optionally parses result sets and supports secure mode
+
FTP Sampler supports Ascii/Binary mode and upload
+
Transaction Controller now optionally generates a Sample with subresults
+
HTTPS session contexts are now per-thread, rather than shared. This gives better emulation of multiple users
+
BeanShell elements now support ThreadListener and TestListener interfaces
+
Coloured icons in Tree View Listener and elsewhere to better differentiate failed samples.
+
+
+The main bug fixes are:
+
+
+
HTTPS (SSL) handling now much improved
+
Various Remote mode bugs fixed
+
Control+C and Control+V now work in the test tree
+
Latency and Encoding now available in CSV log output
+
Test elements no longer default to previous contents; test elements no longer cleared when changing language.
+
+
+
Incompatible changes (usage):
+
+N.B. The javax.net.ssl properties have been moved from jmeter.properties to system.properties,
+and will no longer work if defined in jmeter.properties.
+
+The new arrangement is more flexible, as it allows arbitrary system properties to be defined.
+
+
+SSL session contexts are now created per-thread, rather than being shared.
+This generates a more realistic load for HTTPS tests.
+The change is likely to slow down tests with many SSL threads.
+The original behaviour can be enabled by setting the JMeter property:
+
+https.sessioncontext.shared=true
+
+
+
+The LDAP Extended Sampler now uses the same panel for both Thread Bind and Single-Bind tests.
+This means that any tests using the Single-bind test will need to be updated to set the username and password.
+
+
+
+ Bug
+ 41140: JMeterThread behaviour was changed so that PostProcessors are run in forward order
+(as they appear in the test plan) rather than reverse order as previously.
+The original behaviour can be restored by setting the following JMeter property:
+
+jmeterthread.reversePostProcessors=true
+
+
+The HTTP Authorisation Manager now has extra columns for domain and realm,
+so the temporary work-round of using '\' and '@' in the username to delimit the domain and realm
+has been removed.
+
+
+Control-Z no longer used for Remote Start All - this now uses Control+Shift+R
+
+
+HttpClient now uses pre-emptive authentication.
+This can be changed by setting the following:
+
+The port field in HTTP Request Defaults is no longer ignored for https samplers if it is set to 80.
+
+
+
Incompatible changes (development):
+
+N.B.The clear() method was defined in the following interfaces: Clearable, JMeterGUIComponent and TestElement.
+The methods serve different purposes, so two of them were renamed:
+the Clearable method is now clearData() and the JMeterGUIComponent method is now clearGui().
+3rd party add-ons may need to be rebuilt.
+
+
+Calulator and SamplingStatCalculator classes no longer provide any formatting of their data.
+Formatting should now be done using the jorphan.gui Renderer classes.
+
+
+Removed deprecated method JMeterUtils.split() - use JOrphanUtils version instead.
+
+
+Removed method saveUsingJPEGEncoder() from SaveGraphicsService.
+It was unused so far, and used the only Sun-specific class in JMeter.
+
+
+
+
New functionality/improvements:
+
+
Add Domain and Realm support to HTTP Authorisation Manager
+
HttpClient now behaves the same as the JDK http sampler for invalid certificates etc
+
Added httpclient.parameters.file to allow HttpClient parameters to be defined
+
+ Bug
+ 33964 - Http Requests can send a file as the entire post body if name/type are omitted
+
+ Bug
+ 41705 - add content-encoding option to HTTP samplers for POST requests
+The time stamp is now set to the sampler start time (it was the end).
+To revert to the previous behaviour, change the property sampleresult.timestamp.start to false (or comment it)
+
+
The JMX output format has been simplified and files are not backwards compatible
+
+The JMeter.BAT file no longer changes directory to JMeter home, but runs from the current working directory.
+The jmeter-n.bat and jmeter-t.bat files change to the directory containing the input file.
+
+
+Listeners are now started slightly later in order to allow variable names to be used.
+This may cause some problems; if so define the following in jmeter.properties:
+
+jmeterengine.startlistenerslater=false
+
+
+
+The GUI now expands the tree by default when loading a test plan.
+This can be disabled by setting the JMeter property onload.expandtree=false
+
+
+
Known problems:
+
+
Post-processors run in reverse order (see
+ Bug
+ 41140)
+
Module Controller does not work in non-GUI mode
+
Aggregate Report and some other listeners use increasing amounts of memory as a test progresses
+
Does not always handle non-default encoding properly
+
Spaces in the installation path cause problems for client-server mode
+
Change of Language does not propagate to all test elements
+
SamplingStatCalculator keeps a List of all samples for calculation purposes;
+this can cause memory exhaustion in long-running tests
+
Does not properly handle server certificates if they are expired or not installed locally
+
+
+
New functionality:
+
+
Report function
+
XPath Extractor Post-Processor. Handles single and multiple matches.
+
Simpler JMX file format (2.2)
+
BeanshellSampler code can update ResponseData directly
+
+ Bug
+ 37490 - Allow UDV as delay in Duration Assertion
+
Slow connection emulation for HttpClient
+
Enhanced JUnitSampler so that by default assert errors and exceptions are not appended to the error message.
+Users must explicitly check append in the sampler
+
Enhanced the documentation for webservice sampler to explain how it works with CSVDataSet
+
Enhanced the documentation for javascript function to explain escaping comma
+
Allow CSV Data Set file names to be absolute
+
Report Tree compiler errors better
+
Don't reset Regex Extractor variable if default is empty
+
includecontroller.prefix property added
+
Regular Expression Extractor sets group count
+
Can now save entire screen as an image, not just the right-hand pane
Add property jmeter.save.saveservice.xml_pi to provide optional xml processing instruction in JTL files
+
Add bytes and URL to items that can be saved in sample log files (XML and CSV)
+
The Post-Processor "Save Responses to a File" now saves the generated file name with the
+sample, and the file name can be included in the sample log file.
+
+
Change jmeter.bat DOS script so it works from any directory
+
New -N option to define nonProxyHosts from command-line
+
New -S option to define system properties from input file
+ Bug
+ 38681 - Include controller now works in non-GUI mode
+
Add write(OS,IS) implementation to TCPClientImpl
+
Sample Result converter saves response code as "rc". Previously it saved as "rs" but read with "rc"; it will now also read with "rc".
+The XSL stylesheets also now accept either "rc" or "rs"
+
Fix counter function so each counter instance is independent (previously the per-user counters were shared between instances of the function)
+
Fix TestBean Examples so that they work
+
Fix JTidy parser so it does not skip body tags with background images
+
Fix HtmlParser parser so it catches all background images
+
+ Bug
+ 39252 set SoapSampler sample result from XML data
+
+ Bug
+ 38694 - WebServiceSampler not setting data encoding correctly
+
Result Collector now closes input files read by listeners
+
+ Bug
+ 25505 - First HTTP sampling fails with "HTTPS hostname wrong: should be 'localhost'"
+
+ Bug
+ 25236 - remove double scrollbar from Assertion Result Listener
+ Bug
+ 31696 Duration not working correctly when using Scheduler
+
JMeterContext now uses ThreadLocal - should fix some potential NPE errors
+
+
Version 2.0.1
+
Bug fix release. TBA.
+
Version 2.0
+
+
HTML parsing improved; now has choice of 3 parsers, and most embedded elements can now be detected and downloaded.
+
Redirects can now be delegated to URLConnection by defining the JMeter property HTTPSamper.delegateRedirects=true (default is false)
+
Stop Thread and Stop Test methods added for Samplers and Assertions etc. Samplers can call setStopThread(true) or setStopTest(true) if they detect an error that needs to stop the thread of the test after the sample has been processed
+
Thread Group Gui now has an extra pane to specify what happens after a Sampler error: Continue (as now), Stop Thread or Stop Test.
+ This needs to be extended to a lower level at some stage.
+
Added Shutdown to Run Menu. This is the same as Stop except that it lets the Threads finish normally (i.e. after the next sample has been completed)
+
Remote samples can be cached until the end of a test by defining the property hold_samples=true when running the server.
+More work is needed to be able to control this from the GUI
+
Proxy server has option to skip recording browser headers
+
Proxy restart works better (stop waits for daemon to finish)
+
Scheduler ignores start if it has already passed
+
Scheduler now has delay function
+
added Summariser test element (mainly for non-GUI) testing. This prints summary statistics to System.out and/or the log file every so oftem (3 minutes by default). Multiple summarisers can be used; samples are accumulated by summariser name.
+
Extra Proxy Server options:
+Create all samplers with keep-alive disabled
+Add Separator markers between sets of samples
+Add Response Assertion to first sampler in each set
+
Test Plan has a comment field
+
+
Help Page can now be pushed to background
+
Separate Function help page
+
New / amended functions
+
+
__property() and __P() functions
+
__log() and __logn() - for writing to the log file
+
_StringFromFile can now process a sequence of files, e.g. dir/file01.txt, dir/file02.txt etc
+
_StringFromFile() funtion can now use a variable or function for the file name
+
+
New / amended Assertions
+
+
Response Assertion now works for URLs, and it handles null data better
+
Response Assertion can now match on Response Code and Response message as well
+
HTML Assertion using JTidy to check for well-formed HTML
+
+
If Controller (not fully functional yet)
+
Transaction Controller (aggregates the times of its children)
+
New Samplers
+
+
Basic BSF Sampler (optional)
+
BeanShell Sampler (optional, needs to be downloaded from www.beanshell.org
+
Basic TCP Sampler
+
+
Optionally start BeanShell server (allows remote access to JMeter variables and methods)
+
+
Version 1.9.1
+
TBA
+
Version 1.9
+
+
Sample result log files can now be in CSV or XML format
+
New Event model for notification of iteration events during test plan run
+
New Javascript function for executing arbitrary javascript statements
+
Many GUI improvements
+
New Pre-processors and Post-processors replace Modifiers and Response-Based Modifiers.
+
Compatible with jdk1.3
+
JMeter functions are now fully recursive and universal (can use functions as parameters to functions)
+
Integrated help window now supports hypertext links
+
New Random Function
+
New XML Assertion
+
New LDAP Sampler (alpha code)
+
New Ant Task to run JMeter (in extras folder)
+
New Java Sampler test implementation (to assist developers)
+
More efficient use of memory, faster loading of .jmx files
+
New SOAP Sampler (alpha code)
+
New Median calculation in Graph Results visualizer
+
Default config element added for developer benefit
+
Various performance enhancements during test run
+
New Simple File recorder for minimal GUI overhead during test run
+
New Function: StringFromFile - grabs values from a file
+
New Function: CSVRead - grabs multiple values from a file
+
Functions now longer need to be encoded - special values should be escaped
+with "\" if they are literal values
+
New cut/copy/paste functionality
+
SSL testing should work with less user-fudging, and in non-gui mode
+
Mailer Model works in non-gui mode
+
New Througput Controller
+
New Module Controller
+
Tests can now be scheduled to run from a certain time till a certain time
+
Remote JMeter servers can be started from a non-gui client. Also, in gui mode, all remote servers can be started with a single click
+
ThreadGroups can now be run either serially or in parallel (default)
+
New command line options to override properties
+
New Size Assertion
+
+
+
+
Version 1.8.1
+
+
Bug Fix Release. Many bugs were fixed.
+
Removed redundant "Root" node from test tree.
+
Re-introduced Icons in test tree.
+
Some re-organization of code to improve build process.
+
View Results Tree has added option to view results as web document (still buggy at this point).
+
New Total line in Aggregate Listener (still buggy at this point).
+
Improvements to ability to change JMeter's Locale settings.
+
Improvements to SSL Manager.
+
+
+
Version 1.8
+
+
Improvement to Aggregate report's calculations.
+
Simplified application logging.
+
New Duration Assertion.
+
Fixed and improved Mailer Visualizer.
+
Improvements to HTTP Sampler's recovery of resources (sockets and file handles).
+
Improving JMeter's internal handling of test start/stop.
+
Fixing and adding options to behavior of Interleave and Random Controllers.
+
New Counter config element.
+
New User Parameters config element.
+
Improved performance of file opener.
+
Functions and other elements can access global variables.
+
Help system available within JMeter's GUI.
+
Test Elements can be disabled.
+
Language/Locale can be changed while running JMeter (mostly).
+
View Results Tree can be configured to record only errors.
+
Various bug fixes.
+
+
+
Version 1.7.3
+
+
New Functions that provide more ability to change requests dynamically during test runs.
+
New language translations in Japanese and German.
+
Removed annoying Log4J error messages.
+
Improved support for loading JMeter 1.7 version test plan files (.jmx files).
+
JMeter now supports proxy servers that require username/password authentication.
+
Dialog box indicating test stopping doesn't hang JMeter on problems with stopping test.
+
GUI can run multiple remote JMeter servers (fixes GUI bug that prevented this).
+
Dialog box to help created function calls in GUI.
+
New Keep-alive switch in HTTP Requests to indicate JMeter should or should not use Keep-Alive for sockets.
+
HTTP Post requests can have GET style arguments in Path field. Proxy records them correctly now.
+
New User-defined test-wide static variables.
+
View Results Tree now displays more information, including name of request (matching the name
+in the test tree) and full request and POST data.
+
Removed obsolete View Results Visualizer (use View Results Tree instead).
+
Performance enhancements.
+
Memory use enhancements.
+
Graph visualizer GUI improvements.
+
Updates and fixes to Mailer Visualizer.
+
+
+
Version 1.7.2
+
+
JMeter now notifies user when test has stopped running.
+
HTTP Proxy server records HTTP Requests with re-direct turned off.
+
HTTP Requests can be instructed to either follow redirects or ignore them.
+
Various GUI improvements.
+
New Random Controller.
+
New SOAP/XML-RPC Sampler.
+
+
+
Version 1.7.1
+
+
JMeter's architecture revamped for a more complete separation between GUI code and
+test engine code.
+
Use of Avalon code to save test plans to XML as Configuration Objects
+
All listeners can save data to file and load same data at later date.
+
+
+
Version 1.7Beta
+
+
Better XML support for special characters (Tushar Bhatia)
+
Non-GUI functioning & Non-GUI test plan execution (Tushar Bhatia)
+
Removing Swing dependence from base JMeter classes
+
Internationalization (Takashi Okamoto)
+
AllTests bug fix (neth6@atozasia.com)
+
ClassFinder bug fix (neth6@atozasia.com)
+
New Loop Controller
+
Proxy Server records HTTP samples from browser
+ (and documented in the user manual)
Multipart Form support
+
HTTP Header class for Header customization
+
Extracting HTTP Header information from responses (Jamie Davidson)
+
Mailer Visualizer re-added to JMeter
+
JMeter now url encodes parameter names and values
+
listeners no longer give exceptions if their gui's haven't been initialized
+
HTTPS and Authorization working together
+
New Http sampling that automatically parses HTML response
+ for images to download, and includes the downloading of these
+ images in total time for request (Neth neth6@atozasia.com)
+
HTTP responses from server can be parsed for links and forms,
+ and dynamic data can be extracted and added to test samples
+ at run-time (documented)
+
New Ramp-up feature (Jonathan O'Keefe)
+
New visualizers (Neth)
+
New Assertions for functional testing
+
+
+
Version 1.6.1
+
+
Fixed saving and loading of test scripts (no more extra lines)
+
Can save and load special characters (such as "&" and "<").
+
Can save and load timers and listeners.
+
Minor bug fix for cookies (if you cookie value
+ contained an "=", then it broke).
+
URL's can sample ports other than 80, and can test HTTPS,
+ provided you have the necessary jars (JSSE)
+
+
+
Version 1.6 Alpha
+
+
New UI
+
Separation of GUI and Logic code
+
New Plug-in framework for new modules
+
Enhanced performance
+
Layering of test logic for greater flexibility
+
Added support for saving of test elements
+
Added support for distributed testing using a single client
+
+
+
Version 1.5.1
+
+
Fixed bug that caused cookies not to be read if header name case not as expected.
+
Clone entries before sending to sampler - prevents relocations from messing up
+ information across threads
+
Minor bug fix to convenience dialog for adding paramters to test sample.
+ Bug prevented entries in dialog from appearing in test sample.
+
Added xerces.jar to distribution
+
Added junit.jar to distribution and created a few tests.
+
Started work on new framework. New files in cvs, but do not effect program yet.
+
Fixed bug that prevent HTTPJMeterThread from delaying according to chosen timer.
+
+
+
Version 1.5
+
+
Abstracted out the concept of the Sampler, SamplerController, and TestSample.
+ A Sampler represents code that understands a protocol (such as HTTP,
+ or FTP, RMI, SMTP, etc..). It is the code that actually makes the
+ connection to whatever is being tested. A SamplerController
+ represents code that understands how to organize and run a group
+ of test samples. It is what binds together a Sampler and its test
+ samples and runs them. A TestSample represents code that understands
+ how to gather information from the user about a particular test.
+ For a website, it would represent a URL and any information to be sent
+ with the URL.
+
The UI has been updated to make entering test samples more convenient.
+
Thread groups have been added, allowing a user to setup multiple test to run
+ concurrently, and to allow sharing of test samples between those tests.
+
It is now possible to save and load test samples.
+
....and many more minor changes/improvements...
+
+
+
+Apache JMeter 1.4.1-dev
+
+
Cleaned up URLSampler code after tons of patches for better readability. (SM)
+
Made JMeter send a special "user-agent" identifier. (SM)
+
Fixed problems with redirection not sending cookies and authentication info and removed
+ a warning with jikes compilation. Thanks to Wesley Tanaka for the patches (SM)
+
Fixed a bug in the URLSampler that caused to skip one URL when testing lists of URLs and
+ a problem with Cookie handling. Thanks to Graham Johnson for the patches (SM)
+
Fixed a problem with POST actions. Thanks to Stephen Schaub for the patch (SM)
+
+
+
+ Apache JMeter 1.4 - Jul 11 1999
+
+
Fixed a problem with POST actions. Thanks to Brendan Burns for the patch (SM)
+
Added close button to the About box for those window managers who don't provide it.
+ Thanks to Jan-Henrik Haukeland for pointing it out. (SM)
+
Added the simple Spline sample visualizer (JPN)
+
+
Apache JMeter 1.3 - Apr 16 1999
+
+
Run the Garbage Collector and run finalization before starting to sampling to ensure
+ same state every time (SM)
+
Fixed some NullPointerExceptions here and there (SM)
+
Added HTTP authentication capabilities (RL)
+
Added windowed sample visualizer (SM)
+
Fixed stupid bug for command line arguments. Thanks to Jorge Bracer for pointing this out (SM)
+
+
Apache JMeter 1.2 - Mar 17 1999
+
+
Integrated cookie capabilities with JMeter (SM)
+
Added the Cookie manager and Netscape file parser (SD)
+
Fixed compilation error for JDK 1.1 (SD)
+
Apache JMeter 1.1 - Feb 24 1999
+
+
Created the opportunity to create URL aliasing from the properties file as well as the
+ ability to associate aliases to URL sequences instead of single URLs (SM) Thanks to
+ Simon Chatfield for the very nice suggestions
+ and code examples.
+
Removed the TextVisualizer and replaced it with the much more useful FileVisualizer (SM)
+
Added the known bug list (SM)
+
Removed the Java Apache logo (SM)
+
Fixed a couple of typos (SM)
+
Added UNIX makefile (SD)
+
Apache JMeter 1.0.1 - Jan 25 1999
+
+
Removed pending issues doc issues (SM)
+
Fixed the unix script (SM)
+
Added the possibility of running the JAR directly using "java -jar
+ ApacheJMeter.jar" with Java 2 (SM)
+
Some small updates: fixed Swing location after Java 2(tm) release, license update and
+ small cleanups (SM)
+ We recommend you use a mirror to download our release
+ builds, but you mustverify the integrity of
+ the downloaded files using signatures downloaded from our main
+ distribution directories. Recent releases (48 hours) may not yet
+ be available from all the mirrors.
+
+
+
+ You are currently using [preferred]. If you
+ encounter a problem with this mirror, please select another
+ mirror. If all mirrors are failing, there are backup
+ mirrors (at the end of the mirrors list) that should be
+ available.
+
+ [if-any logo][end]
+
+
+
+
+
+ The KEYS link links to the code signing keys used to sign the product.
+ The PGP link downloads the OpenPGP compatible signature from our main site.
+ The MD5 link downloads the checksum from the main site.
+ Please verify the integrity
+ of the downloaded file.
+
+
+ For more information concerning Apache JMeter, see the Apache JMeter site.
+
+ It is essential that you verify the integrity of the downloaded files using the PGP signature.
+ Please read Verifying Apache Software Foundation Releases for more information on why you should verify our releases.
+
+
\ No newline at end of file
diff --git a/docs/extending/jmeter_tutorial.pdf b/docs/extending/jmeter_tutorial.pdf
new file mode 100644
index 00000000000..f3c0910b426
Binary files /dev/null and b/docs/extending/jmeter_tutorial.pdf differ
diff --git a/docs/images/asf-logo.gif b/docs/images/asf-logo.gif
new file mode 100644
index 00000000000..22eb9d7358e
Binary files /dev/null and b/docs/images/asf-logo.gif differ
diff --git a/docs/images/asf-logo.png b/docs/images/asf-logo.png
new file mode 100644
index 00000000000..61b0f836f70
Binary files /dev/null and b/docs/images/asf-logo.png differ
diff --git a/docs/images/jakarta-logo.gif b/docs/images/jakarta-logo.gif
new file mode 100644
index 00000000000..049cf822952
Binary files /dev/null and b/docs/images/jakarta-logo.gif differ
diff --git a/docs/images/logo-small.jpg b/docs/images/logo-small.jpg
new file mode 100644
index 00000000000..1590774139a
Binary files /dev/null and b/docs/images/logo-small.jpg differ
diff --git a/docs/images/logo.jpg b/docs/images/logo.jpg
new file mode 100644
index 00000000000..82e2f0e442e
Binary files /dev/null and b/docs/images/logo.jpg differ
diff --git a/docs/images/screenshots/accesslogsampler.png b/docs/images/screenshots/accesslogsampler.png
new file mode 100644
index 00000000000..3da8efc782d
Binary files /dev/null and b/docs/images/screenshots/accesslogsampler.png differ
diff --git a/docs/images/screenshots/aggregate_graph.png b/docs/images/screenshots/aggregate_graph.png
new file mode 100644
index 00000000000..c3a8340de3d
Binary files /dev/null and b/docs/images/screenshots/aggregate_graph.png differ
diff --git a/docs/images/screenshots/aggregate_graph_settings.png b/docs/images/screenshots/aggregate_graph_settings.png
new file mode 100644
index 00000000000..0e9ef47d2a3
Binary files /dev/null and b/docs/images/screenshots/aggregate_graph_settings.png differ
diff --git a/docs/images/screenshots/aggregate_report.png b/docs/images/screenshots/aggregate_report.png
new file mode 100644
index 00000000000..f186d86d4d7
Binary files /dev/null and b/docs/images/screenshots/aggregate_report.png differ
diff --git a/docs/images/screenshots/aggregate_report_grouped.png b/docs/images/screenshots/aggregate_report_grouped.png
new file mode 100644
index 00000000000..3ef7a8bfa44
Binary files /dev/null and b/docs/images/screenshots/aggregate_report_grouped.png differ
diff --git a/docs/images/screenshots/assertion/HTMLAssertion.png b/docs/images/screenshots/assertion/HTMLAssertion.png
new file mode 100644
index 00000000000..927ff8222df
Binary files /dev/null and b/docs/images/screenshots/assertion/HTMLAssertion.png differ
diff --git a/docs/images/screenshots/assertion/MD5HexAssertion.png b/docs/images/screenshots/assertion/MD5HexAssertion.png
new file mode 100644
index 00000000000..f1bde1703a4
Binary files /dev/null and b/docs/images/screenshots/assertion/MD5HexAssertion.png differ
diff --git a/docs/images/screenshots/assertion/XMLSchemaAssertion.png b/docs/images/screenshots/assertion/XMLSchemaAssertion.png
new file mode 100644
index 00000000000..1a790f070df
Binary files /dev/null and b/docs/images/screenshots/assertion/XMLSchemaAssertion.png differ
diff --git a/docs/images/screenshots/assertion/assertion.png b/docs/images/screenshots/assertion/assertion.png
new file mode 100644
index 00000000000..0a07d7f9397
Binary files /dev/null and b/docs/images/screenshots/assertion/assertion.png differ
diff --git a/docs/images/screenshots/assertion/assertionscope.png b/docs/images/screenshots/assertion/assertionscope.png
new file mode 100644
index 00000000000..6efb1f9f7eb
Binary files /dev/null and b/docs/images/screenshots/assertion/assertionscope.png differ
diff --git a/docs/images/screenshots/assertion/assertionscopevar.png b/docs/images/screenshots/assertion/assertionscopevar.png
new file mode 100644
index 00000000000..aff8c75d98c
Binary files /dev/null and b/docs/images/screenshots/assertion/assertionscopevar.png differ
diff --git a/docs/images/screenshots/assertion/compare.png b/docs/images/screenshots/assertion/compare.png
new file mode 100644
index 00000000000..03c595432e2
Binary files /dev/null and b/docs/images/screenshots/assertion/compare.png differ
diff --git a/docs/images/screenshots/assertion/example1a.png b/docs/images/screenshots/assertion/example1a.png
new file mode 100644
index 00000000000..9951367bfb2
Binary files /dev/null and b/docs/images/screenshots/assertion/example1a.png differ
diff --git a/docs/images/screenshots/assertion/example1b.png b/docs/images/screenshots/assertion/example1b.png
new file mode 100644
index 00000000000..354c3c1dbe1
Binary files /dev/null and b/docs/images/screenshots/assertion/example1b.png differ
diff --git a/docs/images/screenshots/assertion/example1c-fail.png b/docs/images/screenshots/assertion/example1c-fail.png
new file mode 100644
index 00000000000..84b484e65ae
Binary files /dev/null and b/docs/images/screenshots/assertion/example1c-fail.png differ
diff --git a/docs/images/screenshots/assertion/example1c-pass.png b/docs/images/screenshots/assertion/example1c-pass.png
new file mode 100644
index 00000000000..2488b3c6978
Binary files /dev/null and b/docs/images/screenshots/assertion/example1c-pass.png differ
diff --git a/docs/images/screenshots/assertion/smime.png b/docs/images/screenshots/assertion/smime.png
new file mode 100644
index 00000000000..65e8ecff708
Binary files /dev/null and b/docs/images/screenshots/assertion/smime.png differ
diff --git a/docs/images/screenshots/assertion_results.png b/docs/images/screenshots/assertion_results.png
new file mode 100644
index 00000000000..99c32c38810
Binary files /dev/null and b/docs/images/screenshots/assertion_results.png differ
diff --git a/docs/images/screenshots/backend_listener.png b/docs/images/screenshots/backend_listener.png
new file mode 100644
index 00000000000..91ffdc7fffe
Binary files /dev/null and b/docs/images/screenshots/backend_listener.png differ
diff --git a/docs/images/screenshots/beanshell_assertion.png b/docs/images/screenshots/beanshell_assertion.png
new file mode 100644
index 00000000000..e954082f942
Binary files /dev/null and b/docs/images/screenshots/beanshell_assertion.png differ
diff --git a/docs/images/screenshots/beanshell_listener.png b/docs/images/screenshots/beanshell_listener.png
new file mode 100644
index 00000000000..43b6a247040
Binary files /dev/null and b/docs/images/screenshots/beanshell_listener.png differ
diff --git a/docs/images/screenshots/beanshell_postprocessor.png b/docs/images/screenshots/beanshell_postprocessor.png
new file mode 100644
index 00000000000..07f7ff03244
Binary files /dev/null and b/docs/images/screenshots/beanshell_postprocessor.png differ
diff --git a/docs/images/screenshots/beanshell_preprocessor.png b/docs/images/screenshots/beanshell_preprocessor.png
new file mode 100644
index 00000000000..747b32e9fc6
Binary files /dev/null and b/docs/images/screenshots/beanshell_preprocessor.png differ
diff --git a/docs/images/screenshots/beanshellsampler.png b/docs/images/screenshots/beanshellsampler.png
new file mode 100644
index 00000000000..5b7697bbe39
Binary files /dev/null and b/docs/images/screenshots/beanshellsampler.png differ
diff --git a/docs/images/screenshots/bsf_assertion.png b/docs/images/screenshots/bsf_assertion.png
new file mode 100644
index 00000000000..70e76abc13c
Binary files /dev/null and b/docs/images/screenshots/bsf_assertion.png differ
diff --git a/docs/images/screenshots/bsf_listener.png b/docs/images/screenshots/bsf_listener.png
new file mode 100644
index 00000000000..de557671532
Binary files /dev/null and b/docs/images/screenshots/bsf_listener.png differ
diff --git a/docs/images/screenshots/bsf_postprocessor.png b/docs/images/screenshots/bsf_postprocessor.png
new file mode 100644
index 00000000000..3047a54dc01
Binary files /dev/null and b/docs/images/screenshots/bsf_postprocessor.png differ
diff --git a/docs/images/screenshots/bsf_preprocessor.png b/docs/images/screenshots/bsf_preprocessor.png
new file mode 100644
index 00000000000..e7b12ea4e94
Binary files /dev/null and b/docs/images/screenshots/bsf_preprocessor.png differ
diff --git a/docs/images/screenshots/bsfsampler.png b/docs/images/screenshots/bsfsampler.png
new file mode 100644
index 00000000000..83e995a5766
Binary files /dev/null and b/docs/images/screenshots/bsfsampler.png differ
diff --git a/docs/images/screenshots/bsh_assertion.png b/docs/images/screenshots/bsh_assertion.png
new file mode 100644
index 00000000000..70e76abc13c
Binary files /dev/null and b/docs/images/screenshots/bsh_assertion.png differ
diff --git a/docs/images/screenshots/changes/2.10/01_css_jquery_tester.png b/docs/images/screenshots/changes/2.10/01_css_jquery_tester.png
new file mode 100644
index 00000000000..8cb54272dee
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/01_css_jquery_tester.png differ
diff --git a/docs/images/screenshots/changes/2.10/02_mongodb_source_config.png b/docs/images/screenshots/changes/2.10/02_mongodb_source_config.png
new file mode 100644
index 00000000000..4e5ae817691
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/02_mongodb_source_config.png differ
diff --git a/docs/images/screenshots/changes/2.10/03_mongodb_script_alpha.png b/docs/images/screenshots/changes/2.10/03_mongodb_script_alpha.png
new file mode 100644
index 00000000000..73001784fb5
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/03_mongodb_script_alpha.png differ
diff --git a/docs/images/screenshots/changes/2.10/04_jdbc_request_timeout.png b/docs/images/screenshots/changes/2.10/04_jdbc_request_timeout.png
new file mode 100644
index 00000000000..f37743aca7b
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/04_jdbc_request_timeout.png differ
diff --git a/docs/images/screenshots/changes/2.10/05_urlencode_function.png b/docs/images/screenshots/changes/2.10/05_urlencode_function.png
new file mode 100644
index 00000000000..33e10d545a3
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/05_urlencode_function.png differ
diff --git a/docs/images/screenshots/changes/2.10/06_http_request_delete_method.png b/docs/images/screenshots/changes/2.10/06_http_request_delete_method.png
new file mode 100644
index 00000000000..34f6e11123a
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/06_http_request_delete_method.png differ
diff --git a/docs/images/screenshots/changes/2.10/07_jmeter_templates_icon.png b/docs/images/screenshots/changes/2.10/07_jmeter_templates_icon.png
new file mode 100644
index 00000000000..ae6af99cc0c
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/07_jmeter_templates_icon.png differ
diff --git a/docs/images/screenshots/changes/2.10/08_jmeter_templates_box.png b/docs/images/screenshots/changes/2.10/08_jmeter_templates_box.png
new file mode 100644
index 00000000000..12f058fdd20
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/08_jmeter_templates_box.png differ
diff --git a/docs/images/screenshots/changes/2.10/09_save_workbench.png b/docs/images/screenshots/changes/2.10/09_save_workbench.png
new file mode 100644
index 00000000000..c651cdfc540
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/09_save_workbench.png differ
diff --git a/docs/images/screenshots/changes/2.10/10_color_syntax_bsf_sampler.png b/docs/images/screenshots/changes/2.10/10_color_syntax_bsf_sampler.png
new file mode 100644
index 00000000000..971c5500ee9
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/10_color_syntax_bsf_sampler.png differ
diff --git a/docs/images/screenshots/changes/2.10/11_color_syntax_jsr223_preprocessor.png b/docs/images/screenshots/changes/2.10/11_color_syntax_jsr223_preprocessor.png
new file mode 100644
index 00000000000..d90f2fcd7fd
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/11_color_syntax_jsr223_preprocessor.png differ
diff --git a/docs/images/screenshots/changes/2.10/12_drap_n-drop_multiple.png b/docs/images/screenshots/changes/2.10/12_drap_n-drop_multiple.png
new file mode 100644
index 00000000000..160a4d929db
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/12_drap_n-drop_multiple.png differ
diff --git a/docs/images/screenshots/changes/2.10/13_response_time_graph_y_scale.png b/docs/images/screenshots/changes/2.10/13_response_time_graph_y_scale.png
new file mode 100644
index 00000000000..ed7576d9535
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/13_response_time_graph_y_scale.png differ
diff --git a/docs/images/screenshots/changes/2.10/14_mongodb_jsr223.png b/docs/images/screenshots/changes/2.10/14_mongodb_jsr223.png
new file mode 100644
index 00000000000..36bceca6b16
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/14_mongodb_jsr223.png differ
diff --git a/docs/images/screenshots/changes/2.10/15_kerberos.png b/docs/images/screenshots/changes/2.10/15_kerberos.png
new file mode 100644
index 00000000000..0beeb7aa735
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/15_kerberos.png differ
diff --git a/docs/images/screenshots/changes/2.10/16_device.png b/docs/images/screenshots/changes/2.10/16_device.png
new file mode 100644
index 00000000000..d20ce976cf4
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/16_device.png differ
diff --git a/docs/images/screenshots/changes/2.10/17_os_process_timeout.png b/docs/images/screenshots/changes/2.10/17_os_process_timeout.png
new file mode 100644
index 00000000000..3857651d466
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/17_os_process_timeout.png differ
diff --git a/docs/images/screenshots/changes/2.10/17_threads_gui.png b/docs/images/screenshots/changes/2.10/17_threads_gui.png
new file mode 100644
index 00000000000..e178d099683
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/17_threads_gui.png differ
diff --git a/docs/images/screenshots/changes/2.10/17_threads_summariser.png b/docs/images/screenshots/changes/2.10/17_threads_summariser.png
new file mode 100644
index 00000000000..fa0b94ba8c1
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/17_threads_summariser.png differ
diff --git a/docs/images/screenshots/changes/2.10/18_https_test_script_recorder.png b/docs/images/screenshots/changes/2.10/18_https_test_script_recorder.png
new file mode 100644
index 00000000000..9ab1bfc5935
Binary files /dev/null and b/docs/images/screenshots/changes/2.10/18_https_test_script_recorder.png differ
diff --git a/docs/images/screenshots/changes/2.11/01_jms_properties_typed_values.png b/docs/images/screenshots/changes/2.11/01_jms_properties_typed_values.png
new file mode 100644
index 00000000000..0ad62a0df9e
Binary files /dev/null and b/docs/images/screenshots/changes/2.11/01_jms_properties_typed_values.png differ
diff --git a/docs/images/screenshots/changes/2.11/02_transaction_controller.png b/docs/images/screenshots/changes/2.11/02_transaction_controller.png
new file mode 100644
index 00000000000..ec06ed23876
Binary files /dev/null and b/docs/images/screenshots/changes/2.11/02_transaction_controller.png differ
diff --git a/docs/images/screenshots/changes/2.11/03_xpath_tester.png b/docs/images/screenshots/changes/2.11/03_xpath_tester.png
new file mode 100644
index 00000000000..182cc643ccc
Binary files /dev/null and b/docs/images/screenshots/changes/2.11/03_xpath_tester.png differ
diff --git a/docs/images/screenshots/changes/2.11/05_save_as_fragement.png b/docs/images/screenshots/changes/2.11/05_save_as_fragement.png
new file mode 100644
index 00000000000..5215e142b20
Binary files /dev/null and b/docs/images/screenshots/changes/2.11/05_save_as_fragement.png differ
diff --git a/docs/images/screenshots/changes/2.11/06_summariser.png b/docs/images/screenshots/changes/2.11/06_summariser.png
new file mode 100644
index 00000000000..8246f31ccd3
Binary files /dev/null and b/docs/images/screenshots/changes/2.11/06_summariser.png differ
diff --git a/docs/images/screenshots/changes/2.11/07_keystore_config.png b/docs/images/screenshots/changes/2.11/07_keystore_config.png
new file mode 100644
index 00000000000..7afabc09510
Binary files /dev/null and b/docs/images/screenshots/changes/2.11/07_keystore_config.png differ
diff --git a/docs/images/screenshots/changes/2.12/01_critical_section_controller.png b/docs/images/screenshots/changes/2.12/01_critical_section_controller.png
new file mode 100644
index 00000000000..13dd13b1b34
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/01_critical_section_controller.png differ
diff --git a/docs/images/screenshots/changes/2.12/02_dns_cache_manager.png b/docs/images/screenshots/changes/2.12/02_dns_cache_manager.png
new file mode 100644
index 00000000000..d9642f694fc
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/02_dns_cache_manager.png differ
diff --git a/docs/images/screenshots/changes/2.12/03_mail_reader_sampler.png b/docs/images/screenshots/changes/2.12/03_mail_reader_sampler.png
new file mode 100644
index 00000000000..f8878a68423
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/03_mail_reader_sampler.png differ
diff --git a/docs/images/screenshots/changes/2.12/04_jms_publisher.png b/docs/images/screenshots/changes/2.12/04_jms_publisher.png
new file mode 100644
index 00000000000..65f2b18653a
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/04_jms_publisher.png differ
diff --git a/docs/images/screenshots/changes/2.12/05_jms_point_to_point.png b/docs/images/screenshots/changes/2.12/05_jms_point_to_point.png
new file mode 100644
index 00000000000..ff89e680dfc
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/05_jms_point_to_point.png differ
diff --git a/docs/images/screenshots/changes/2.12/06_smtp_sampler.png b/docs/images/screenshots/changes/2.12/06_smtp_sampler.png
new file mode 100644
index 00000000000..f923580db9d
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/06_smtp_sampler.png differ
diff --git a/docs/images/screenshots/changes/2.12/07_view_results_tree.png b/docs/images/screenshots/changes/2.12/07_view_results_tree.png
new file mode 100644
index 00000000000..ceda7289057
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/07_view_results_tree.png differ
diff --git a/docs/images/screenshots/changes/2.12/08_response_time_graph.png b/docs/images/screenshots/changes/2.12/08_response_time_graph.png
new file mode 100644
index 00000000000..217a42b97ca
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/08_response_time_graph.png differ
diff --git a/docs/images/screenshots/changes/2.12/09_synchronizing_timer.png b/docs/images/screenshots/changes/2.12/09_synchronizing_timer.png
new file mode 100644
index 00000000000..3fdfbb0e5fd
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/09_synchronizing_timer.png differ
diff --git a/docs/images/screenshots/changes/2.12/10_undo_redo.png b/docs/images/screenshots/changes/2.12/10_undo_redo.png
new file mode 100644
index 00000000000..370daa1c378
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/10_undo_redo.png differ
diff --git a/docs/images/screenshots/changes/2.12/11_log_viewer.png b/docs/images/screenshots/changes/2.12/11_log_viewer.png
new file mode 100644
index 00000000000..c7ddf3aea35
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/11_log_viewer.png differ
diff --git a/docs/images/screenshots/changes/2.12/12_cache_resource_mode.png b/docs/images/screenshots/changes/2.12/12_cache_resource_mode.png
new file mode 100644
index 00000000000..a281b33c91d
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/12_cache_resource_mode.png differ
diff --git a/docs/images/screenshots/changes/2.12/13_webdav.png b/docs/images/screenshots/changes/2.12/13_webdav.png
new file mode 100644
index 00000000000..6c95e33f03c
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/13_webdav.png differ
diff --git a/docs/images/screenshots/changes/2.12/14_recorder_filter.png b/docs/images/screenshots/changes/2.12/14_recorder_filter.png
new file mode 100644
index 00000000000..b7d293d4665
Binary files /dev/null and b/docs/images/screenshots/changes/2.12/14_recorder_filter.png differ
diff --git a/docs/images/screenshots/changes/2.13/aggregate_graph_new_percentile.png b/docs/images/screenshots/changes/2.13/aggregate_graph_new_percentile.png
new file mode 100644
index 00000000000..72f6ba9f7bd
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/aggregate_graph_new_percentile.png differ
diff --git a/docs/images/screenshots/changes/2.13/backend_listener_graphite.png b/docs/images/screenshots/changes/2.13/backend_listener_graphite.png
new file mode 100644
index 00000000000..73228c1c2f4
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/backend_listener_graphite.png differ
diff --git a/docs/images/screenshots/changes/2.13/connect_time_table.png b/docs/images/screenshots/changes/2.13/connect_time_table.png
new file mode 100644
index 00000000000..96967224f22
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/connect_time_table.png differ
diff --git a/docs/images/screenshots/changes/2.13/connect_time_tree.png b/docs/images/screenshots/changes/2.13/connect_time_tree.png
new file mode 100644
index 00000000000..4c0515c5358
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/connect_time_tree.png differ
diff --git a/docs/images/screenshots/changes/2.13/distributed_retry.png b/docs/images/screenshots/changes/2.13/distributed_retry.png
new file mode 100644
index 00000000000..c8a31d41f7e
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/distributed_retry.png differ
diff --git a/docs/images/screenshots/changes/2.13/jdbc_resultset_handler.png b/docs/images/screenshots/changes/2.13/jdbc_resultset_handler.png
new file mode 100644
index 00000000000..dd8fad8d1bd
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/jdbc_resultset_handler.png differ
diff --git a/docs/images/screenshots/changes/2.13/module_controller_tree_view.png b/docs/images/screenshots/changes/2.13/module_controller_tree_view.png
new file mode 100644
index 00000000000..5eed7f499b0
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/module_controller_tree_view.png differ
diff --git a/docs/images/screenshots/changes/2.13/new_methods_caldav.png b/docs/images/screenshots/changes/2.13/new_methods_caldav.png
new file mode 100644
index 00000000000..7d0e5e4c88b
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/new_methods_caldav.png differ
diff --git a/docs/images/screenshots/changes/2.13/toolbar_22x22.png b/docs/images/screenshots/changes/2.13/toolbar_22x22.png
new file mode 100644
index 00000000000..d5aa794e5e6
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/toolbar_22x22.png differ
diff --git a/docs/images/screenshots/changes/2.13/toolbar_32x32.png b/docs/images/screenshots/changes/2.13/toolbar_32x32.png
new file mode 100644
index 00000000000..410460d93d7
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/toolbar_32x32.png differ
diff --git a/docs/images/screenshots/changes/2.13/toolbar_48x48.png b/docs/images/screenshots/changes/2.13/toolbar_48x48.png
new file mode 100644
index 00000000000..e8fdbc113f9
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/toolbar_48x48.png differ
diff --git a/docs/images/screenshots/changes/2.13/warning_message_proxy.png b/docs/images/screenshots/changes/2.13/warning_message_proxy.png
new file mode 100644
index 00000000000..89141393fea
Binary files /dev/null and b/docs/images/screenshots/changes/2.13/warning_message_proxy.png differ
diff --git a/docs/images/screenshots/changes/2.6/01_toolbar.png b/docs/images/screenshots/changes/2.6/01_toolbar.png
new file mode 100644
index 00000000000..b855de1ed2c
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/01_toolbar.png differ
diff --git a/docs/images/screenshots/changes/2.6/02_ignore_pause_timers.png b/docs/images/screenshots/changes/2.6/02_ignore_pause_timers.png
new file mode 100644
index 00000000000..43698e2bfd0
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/02_ignore_pause_timers.png differ
diff --git a/docs/images/screenshots/changes/2.6/03_look_and_feel.png b/docs/images/screenshots/changes/2.6/03_look_and_feel.png
new file mode 100644
index 00000000000..f57faaa5b71
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/03_look_and_feel.png differ
diff --git a/docs/images/screenshots/changes/2.6/04_duplicate_context_menu.png b/docs/images/screenshots/changes/2.6/04_duplicate_context_menu.png
new file mode 100644
index 00000000000..61fbdab7196
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/04_duplicate_context_menu.png differ
diff --git a/docs/images/screenshots/changes/2.6/05_search_tree.png b/docs/images/screenshots/changes/2.6/05_search_tree.png
new file mode 100644
index 00000000000..81a51845b0e
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/05_search_tree.png differ
diff --git a/docs/images/screenshots/changes/2.6/06_post_data.png b/docs/images/screenshots/changes/2.6/06_post_data.png
new file mode 100644
index 00000000000..6e9af4e6887
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/06_post_data.png differ
diff --git a/docs/images/screenshots/changes/2.6/07_multiple_selection_params.png b/docs/images/screenshots/changes/2.6/07_multiple_selection_params.png
new file mode 100644
index 00000000000..b3e97a09313
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/07_multiple_selection_params.png differ
diff --git a/docs/images/screenshots/changes/2.6/08_file_protocol.png b/docs/images/screenshots/changes/2.6/08_file_protocol.png
new file mode 100644
index 00000000000..04520ec991c
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/08_file_protocol.png differ
diff --git a/docs/images/screenshots/changes/2.6/09_file_protocol_embedded.png b/docs/images/screenshots/changes/2.6/09_file_protocol_embedded.png
new file mode 100644
index 00000000000..67f582f08b1
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/09_file_protocol_embedded.png differ
diff --git a/docs/images/screenshots/changes/2.6/10_child_sampler.png b/docs/images/screenshots/changes/2.6/10_child_sampler.png
new file mode 100644
index 00000000000..cff10a8cbce
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/10_child_sampler.png differ
diff --git a/docs/images/screenshots/changes/2.6/11_jks_keystore.png b/docs/images/screenshots/changes/2.6/11_jks_keystore.png
new file mode 100644
index 00000000000..db3375709b3
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/11_jks_keystore.png differ
diff --git a/docs/images/screenshots/changes/2.6/12_aggregate_graph_settings.png b/docs/images/screenshots/changes/2.6/12_aggregate_graph_settings.png
new file mode 100644
index 00000000000..4bb4d37c82b
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/12_aggregate_graph_settings.png differ
diff --git a/docs/images/screenshots/changes/2.6/13_aggregate_graph_bar.png b/docs/images/screenshots/changes/2.6/13_aggregate_graph_bar.png
new file mode 100644
index 00000000000..def4e8d3c75
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/13_aggregate_graph_bar.png differ
diff --git a/docs/images/screenshots/changes/2.6/14_reset_counter.png b/docs/images/screenshots/changes/2.6/14_reset_counter.png
new file mode 100644
index 00000000000..1b622b3d9bb
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/14_reset_counter.png differ
diff --git a/docs/images/screenshots/changes/2.6/15_random_string.png b/docs/images/screenshots/changes/2.6/15_random_string.png
new file mode 100644
index 00000000000..a85f5d2df76
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/15_random_string.png differ
diff --git a/docs/images/screenshots/changes/2.6/16_udv_comments.png b/docs/images/screenshots/changes/2.6/16_udv_comments.png
new file mode 100644
index 00000000000..e014bdb25a3
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/16_udv_comments.png differ
diff --git a/docs/images/screenshots/changes/2.6/17_vrt_max_size_display.png b/docs/images/screenshots/changes/2.6/17_vrt_max_size_display.png
new file mode 100644
index 00000000000..505302fcc07
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/17_vrt_max_size_display.png differ
diff --git a/docs/images/screenshots/changes/2.6/18_change_ctl_type.png b/docs/images/screenshots/changes/2.6/18_change_ctl_type.png
new file mode 100644
index 00000000000..bea7c315ebd
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/18_change_ctl_type.png differ
diff --git a/docs/images/screenshots/changes/2.6/19_jdbc_pre_post_proc.png b/docs/images/screenshots/changes/2.6/19_jdbc_pre_post_proc.png
new file mode 100644
index 00000000000..232e2b4a1fe
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/19_jdbc_pre_post_proc.png differ
diff --git a/docs/images/screenshots/changes/2.6/20_jdbc_trans_isolation.png b/docs/images/screenshots/changes/2.6/20_jdbc_trans_isolation.png
new file mode 100644
index 00000000000..7122a593f4a
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/20_jdbc_trans_isolation.png differ
diff --git a/docs/images/screenshots/changes/2.6/21_poisson_timer.png b/docs/images/screenshots/changes/2.6/21_poisson_timer.png
new file mode 100644
index 00000000000..8bba1d1b65a
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/21_poisson_timer.png differ
diff --git a/docs/images/screenshots/changes/2.6/22_drag_and_drop.png b/docs/images/screenshots/changes/2.6/22_drag_and_drop.png
new file mode 100644
index 00000000000..562889169d4
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/22_drag_and_drop.png differ
diff --git a/docs/images/screenshots/changes/2.6/23_confirm_remove.png b/docs/images/screenshots/changes/2.6/23_confirm_remove.png
new file mode 100644
index 00000000000..8d6a05bdbd1
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/23_confirm_remove.png differ
diff --git a/docs/images/screenshots/changes/2.6/24_diskstore.png b/docs/images/screenshots/changes/2.6/24_diskstore.png
new file mode 100644
index 00000000000..03024b2a1fb
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/24_diskstore.png differ
diff --git a/docs/images/screenshots/changes/2.6/25_selector.png b/docs/images/screenshots/changes/2.6/25_selector.png
new file mode 100644
index 00000000000..986e06ec6d7
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/25_selector.png differ
diff --git a/docs/images/screenshots/changes/2.6/26_ignore_child_failed.png b/docs/images/screenshots/changes/2.6/26_ignore_child_failed.png
new file mode 100644
index 00000000000..966fc41e46d
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/26_ignore_child_failed.png differ
diff --git a/docs/images/screenshots/changes/2.6/27_succes_with_child_failed.png b/docs/images/screenshots/changes/2.6/27_succes_with_child_failed.png
new file mode 100644
index 00000000000..097b04b8cb1
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/27_succes_with_child_failed.png differ
diff --git a/docs/images/screenshots/changes/2.6/28_loggerpanel.png b/docs/images/screenshots/changes/2.6/28_loggerpanel.png
new file mode 100644
index 00000000000..2f889b0609e
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/28_loggerpanel.png differ
diff --git a/docs/images/screenshots/changes/2.6/28_loggerpanel_option.png b/docs/images/screenshots/changes/2.6/28_loggerpanel_option.png
new file mode 100644
index 00000000000..e7afb8954b2
Binary files /dev/null and b/docs/images/screenshots/changes/2.6/28_loggerpanel_option.png differ
diff --git a/docs/images/screenshots/changes/2.7/01_os_process_sampler.png b/docs/images/screenshots/changes/2.7/01_os_process_sampler.png
new file mode 100644
index 00000000000..920e8cd0a4f
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/01_os_process_sampler.png differ
diff --git a/docs/images/screenshots/changes/2.7/02_os_process_example_results.png b/docs/images/screenshots/changes/2.7/02_os_process_example_results.png
new file mode 100644
index 00000000000..f9727843ab8
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/02_os_process_example_results.png differ
diff --git a/docs/images/screenshots/changes/2.7/03_aggregate_graph_with_new_cols.png b/docs/images/screenshots/changes/2.7/03_aggregate_graph_with_new_cols.png
new file mode 100644
index 00000000000..94e74eb5df7
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/03_aggregate_graph_with_new_cols.png differ
diff --git a/docs/images/screenshots/changes/2.7/04_aggregate_graph_parameters.png b/docs/images/screenshots/changes/2.7/04_aggregate_graph_parameters.png
new file mode 100644
index 00000000000..a121e7d2d55
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/04_aggregate_graph_parameters.png differ
diff --git a/docs/images/screenshots/changes/2.7/05_jmeter_ant_task_report_success.png b/docs/images/screenshots/changes/2.7/05_jmeter_ant_task_report_success.png
new file mode 100644
index 00000000000..8e8b5a5cbcd
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/05_jmeter_ant_task_report_success.png differ
diff --git a/docs/images/screenshots/changes/2.7/06_jmeter_ant_task_report_errors.png b/docs/images/screenshots/changes/2.7/06_jmeter_ant_task_report_errors.png
new file mode 100644
index 00000000000..4f5b7c5ddce
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/06_jmeter_ant_task_report_errors.png differ
diff --git a/docs/images/screenshots/changes/2.7/07_test_action_next_iter.png b/docs/images/screenshots/changes/2.7/07_test_action_next_iter.png
new file mode 100644
index 00000000000..8db01e4ad8f
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/07_test_action_next_iter.png differ
diff --git a/docs/images/screenshots/changes/2.7/08_param_button_detail.png b/docs/images/screenshots/changes/2.7/08_param_button_detail.png
new file mode 100644
index 00000000000..f3498fca5c2
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/08_param_button_detail.png differ
diff --git a/docs/images/screenshots/changes/2.7/09_detail_box.png b/docs/images/screenshots/changes/2.7/09_detail_box.png
new file mode 100644
index 00000000000..ae7d232c960
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/09_detail_box.png differ
diff --git a/docs/images/screenshots/changes/2.7/10_mailer_visualizer_gui.png b/docs/images/screenshots/changes/2.7/10_mailer_visualizer_gui.png
new file mode 100644
index 00000000000..2fb226f1b6f
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/10_mailer_visualizer_gui.png differ
diff --git a/docs/images/screenshots/changes/2.7/11_jms_non_persistent_delivery_mode.png b/docs/images/screenshots/changes/2.7/11_jms_non_persistent_delivery_mode.png
new file mode 100644
index 00000000000..04fd6f1a9f8
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/11_jms_non_persistent_delivery_mode.png differ
diff --git a/docs/images/screenshots/changes/2.7/12_jms_sending_objects.png b/docs/images/screenshots/changes/2.7/12_jms_sending_objects.png
new file mode 100644
index 00000000000..8d82dbdff37
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/12_jms_sending_objects.png differ
diff --git a/docs/images/screenshots/changes/2.7/13_jms_properties.png b/docs/images/screenshots/changes/2.7/13_jms_properties.png
new file mode 100644
index 00000000000..252535907c7
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/13_jms_properties.png differ
diff --git a/docs/images/screenshots/changes/2.7/14_ws_document_cache.png b/docs/images/screenshots/changes/2.7/14_ws_document_cache.png
new file mode 100644
index 00000000000..de56edf5d4a
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/14_ws_document_cache.png differ
diff --git a/docs/images/screenshots/changes/2.7/15_ws_maintain_session.png b/docs/images/screenshots/changes/2.7/15_ws_maintain_session.png
new file mode 100644
index 00000000000..84a400539d2
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/15_ws_maintain_session.png differ
diff --git a/docs/images/screenshots/changes/2.7/16_log_errors_counter.png b/docs/images/screenshots/changes/2.7/16_log_errors_counter.png
new file mode 100644
index 00000000000..e56f555de55
Binary files /dev/null and b/docs/images/screenshots/changes/2.7/16_log_errors_counter.png differ
diff --git a/docs/images/screenshots/changes/2.8/01_http_patch_verb.png b/docs/images/screenshots/changes/2.8/01_http_patch_verb.png
new file mode 100644
index 00000000000..a868114e2d6
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/01_http_patch_verb.png differ
diff --git a/docs/images/screenshots/changes/2.8/02_http_default_hc4.png b/docs/images/screenshots/changes/2.8/02_http_default_hc4.png
new file mode 100644
index 00000000000..dccfc8de77e
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/02_http_default_hc4.png differ
diff --git a/docs/images/screenshots/changes/2.8/03_remove_https_spoofing1.png b/docs/images/screenshots/changes/2.8/03_remove_https_spoofing1.png
new file mode 100644
index 00000000000..24c0442db06
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/03_remove_https_spoofing1.png differ
diff --git a/docs/images/screenshots/changes/2.8/05_http_defaults_url_filter.png b/docs/images/screenshots/changes/2.8/05_http_defaults_url_filter.png
new file mode 100644
index 00000000000..82cb4986e1f
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/05_http_defaults_url_filter.png differ
diff --git a/docs/images/screenshots/changes/2.8/06_os_sampler_stdout-err-in.png b/docs/images/screenshots/changes/2.8/06_os_sampler_stdout-err-in.png
new file mode 100644
index 00000000000..c09a46a603a
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/06_os_sampler_stdout-err-in.png differ
diff --git a/docs/images/screenshots/changes/2.8/07_aggregate_graph_legend_left_right.png b/docs/images/screenshots/changes/2.8/07_aggregate_graph_legend_left_right.png
new file mode 100644
index 00000000000..c14ba44d971
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/07_aggregate_graph_legend_left_right.png differ
diff --git a/docs/images/screenshots/changes/2.8/08_resp_time_graph_settings.png b/docs/images/screenshots/changes/2.8/08_resp_time_graph_settings.png
new file mode 100644
index 00000000000..c1531568e6a
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/08_resp_time_graph_settings.png differ
diff --git a/docs/images/screenshots/changes/2.8/09_resp_time_graph.png b/docs/images/screenshots/changes/2.8/09_resp_time_graph.png
new file mode 100644
index 00000000000..53bb0b4e7d5
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/09_resp_time_graph.png differ
diff --git a/docs/images/screenshots/changes/2.8/10_latency_view_results_table.png b/docs/images/screenshots/changes/2.8/10_latency_view_results_table.png
new file mode 100644
index 00000000000..f53bb881095
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/10_latency_view_results_table.png differ
diff --git a/docs/images/screenshots/changes/2.8/11_hc4_cookie.png b/docs/images/screenshots/changes/2.8/11_hc4_cookie.png
new file mode 100644
index 00000000000..2eb3f861273
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/11_hc4_cookie.png differ
diff --git a/docs/images/screenshots/changes/2.8/12_delay_thread_creation.png b/docs/images/screenshots/changes/2.8/12_delay_thread_creation.png
new file mode 100644
index 00000000000..9c2aab228d9
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/12_delay_thread_creation.png differ
diff --git a/docs/images/screenshots/changes/2.8/13_gnome3_title.png b/docs/images/screenshots/changes/2.8/13_gnome3_title.png
new file mode 100644
index 00000000000..04c52e4d56d
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/13_gnome3_title.png differ
diff --git a/docs/images/screenshots/changes/2.8/14_ctrl_F_shortcut.png b/docs/images/screenshots/changes/2.8/14_ctrl_F_shortcut.png
new file mode 100644
index 00000000000..03ff977b8c3
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/14_ctrl_F_shortcut.png differ
diff --git a/docs/images/screenshots/changes/2.8/15_add_from_clipboard_filter.png b/docs/images/screenshots/changes/2.8/15_add_from_clipboard_filter.png
new file mode 100644
index 00000000000..e414e1ef59a
Binary files /dev/null and b/docs/images/screenshots/changes/2.8/15_add_from_clipboard_filter.png differ
diff --git a/docs/images/screenshots/changes/2.9/01_css_jquery_extractor.png b/docs/images/screenshots/changes/2.9/01_css_jquery_extractor.png
new file mode 100644
index 00000000000..84194037522
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/01_css_jquery_extractor.png differ
diff --git a/docs/images/screenshots/changes/2.9/01_css_jquery_extractor_resul.png b/docs/images/screenshots/changes/2.9/01_css_jquery_extractor_resul.png
new file mode 100644
index 00000000000..a1de1745273
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/01_css_jquery_extractor_resul.png differ
diff --git a/docs/images/screenshots/changes/2.9/02_document_render_view_results_tree.png b/docs/images/screenshots/changes/2.9/02_document_render_view_results_tree.png
new file mode 100644
index 00000000000..4f74b59e919
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/02_document_render_view_results_tree.png differ
diff --git a/docs/images/screenshots/changes/2.9/03_new_options_tcp_sampler.png b/docs/images/screenshots/changes/2.9/03_new_options_tcp_sampler.png
new file mode 100644
index 00000000000..1348cb97850
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/03_new_options_tcp_sampler.png differ
diff --git a/docs/images/screenshots/changes/2.9/04_for_each_new_fields.png b/docs/images/screenshots/changes/2.9/04_for_each_new_fields.png
new file mode 100644
index 00000000000..743ee1a7cf3
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/04_for_each_new_fields.png differ
diff --git a/docs/images/screenshots/changes/2.9/05_result_status_action_handler.png b/docs/images/screenshots/changes/2.9/05_result_status_action_handler.png
new file mode 100644
index 00000000000..8f826ec7608
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/05_result_status_action_handler.png differ
diff --git a/docs/images/screenshots/changes/2.9/06_copy_paste_between_2_jmeter1.png b/docs/images/screenshots/changes/2.9/06_copy_paste_between_2_jmeter1.png
new file mode 100644
index 00000000000..79014a6dc05
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/06_copy_paste_between_2_jmeter1.png differ
diff --git a/docs/images/screenshots/changes/2.9/06_copy_paste_between_2_jmeter2.png b/docs/images/screenshots/changes/2.9/06_copy_paste_between_2_jmeter2.png
new file mode 100644
index 00000000000..d121899239d
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/06_copy_paste_between_2_jmeter2.png differ
diff --git a/docs/images/screenshots/changes/2.9/07_header_panel_add_from_clipboard.png b/docs/images/screenshots/changes/2.9/07_header_panel_add_from_clipboard.png
new file mode 100644
index 00000000000..313f3a881cf
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/07_header_panel_add_from_clipboard.png differ
diff --git a/docs/images/screenshots/changes/2.9/08_module_controller_improvements.png b/docs/images/screenshots/changes/2.9/08_module_controller_improvements.png
new file mode 100644
index 00000000000..d1b5837bba1
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/08_module_controller_improvements.png differ
diff --git a/docs/images/screenshots/changes/2.9/09_proxy_excludes_suggested.png b/docs/images/screenshots/changes/2.9/09_proxy_excludes_suggested.png
new file mode 100644
index 00000000000..9a599032c57
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/09_proxy_excludes_suggested.png differ
diff --git a/docs/images/screenshots/changes/2.9/10_http_proxy_dont_force_http_type.png b/docs/images/screenshots/changes/2.9/10_http_proxy_dont_force_http_type.png
new file mode 100644
index 00000000000..18aa4a0f47e
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/10_http_proxy_dont_force_http_type.png differ
diff --git a/docs/images/screenshots/changes/2.9/11_jms_publisher_bytes.png b/docs/images/screenshots/changes/2.9/11_jms_publisher_bytes.png
new file mode 100644
index 00000000000..e2fd63f99b7
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/11_jms_publisher_bytes.png differ
diff --git a/docs/images/screenshots/changes/2.9/12_jsr223_sampler.png b/docs/images/screenshots/changes/2.9/12_jsr223_sampler.png
new file mode 100644
index 00000000000..8d0fd64bd33
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/12_jsr223_sampler.png differ
diff --git a/docs/images/screenshots/changes/2.9/13_regex_user_params.png b/docs/images/screenshots/changes/2.9/13_regex_user_params.png
new file mode 100644
index 00000000000..c500a6dcfbf
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/13_regex_user_params.png differ
diff --git a/docs/images/screenshots/changes/2.9/14_xpath_assertion.png b/docs/images/screenshots/changes/2.9/14_xpath_assertion.png
new file mode 100644
index 00000000000..149a37fc0d2
Binary files /dev/null and b/docs/images/screenshots/changes/2.9/14_xpath_assertion.png differ
diff --git a/docs/images/screenshots/class_diagram.gif b/docs/images/screenshots/class_diagram.gif
new file mode 100644
index 00000000000..7b594564f60
Binary files /dev/null and b/docs/images/screenshots/class_diagram.gif differ
diff --git a/docs/images/screenshots/comparison_assertion_visualizer.png b/docs/images/screenshots/comparison_assertion_visualizer.png
new file mode 100644
index 00000000000..68058a38711
Binary files /dev/null and b/docs/images/screenshots/comparison_assertion_visualizer.png differ
diff --git a/docs/images/screenshots/counter.png b/docs/images/screenshots/counter.png
new file mode 100644
index 00000000000..6b1e77d7f02
Binary files /dev/null and b/docs/images/screenshots/counter.png differ
diff --git a/docs/images/screenshots/css_extractor_attr.png b/docs/images/screenshots/css_extractor_attr.png
new file mode 100644
index 00000000000..72b37b9e063
Binary files /dev/null and b/docs/images/screenshots/css_extractor_attr.png differ
diff --git a/docs/images/screenshots/css_extractor_noattr.png b/docs/images/screenshots/css_extractor_noattr.png
new file mode 100644
index 00000000000..17af38be853
Binary files /dev/null and b/docs/images/screenshots/css_extractor_noattr.png differ
diff --git a/docs/images/screenshots/csvdatasetconfig.png b/docs/images/screenshots/csvdatasetconfig.png
new file mode 100644
index 00000000000..b05ee5f700a
Binary files /dev/null and b/docs/images/screenshots/csvdatasetconfig.png differ
diff --git a/docs/images/screenshots/debug_postprocessor.png b/docs/images/screenshots/debug_postprocessor.png
new file mode 100644
index 00000000000..20bdfac9e6b
Binary files /dev/null and b/docs/images/screenshots/debug_postprocessor.png differ
diff --git a/docs/images/screenshots/debug_sampler.png b/docs/images/screenshots/debug_sampler.png
new file mode 100644
index 00000000000..b2f8f43a758
Binary files /dev/null and b/docs/images/screenshots/debug_sampler.png differ
diff --git a/docs/images/screenshots/distribution_graph.png b/docs/images/screenshots/distribution_graph.png
new file mode 100644
index 00000000000..eae11e04476
Binary files /dev/null and b/docs/images/screenshots/distribution_graph.png differ
diff --git a/docs/images/screenshots/dns-cache-manager.png b/docs/images/screenshots/dns-cache-manager.png
new file mode 100644
index 00000000000..008c6fd30eb
Binary files /dev/null and b/docs/images/screenshots/dns-cache-manager.png differ
diff --git a/docs/images/screenshots/duration_assertion.png b/docs/images/screenshots/duration_assertion.png
new file mode 100644
index 00000000000..ac72297b4cf
Binary files /dev/null and b/docs/images/screenshots/duration_assertion.png differ
diff --git a/docs/images/screenshots/ftp-config/ftp-request-defaults.png b/docs/images/screenshots/ftp-config/ftp-request-defaults.png
new file mode 100644
index 00000000000..a453e9af39d
Binary files /dev/null and b/docs/images/screenshots/ftp-config/ftp-request-defaults.png differ
diff --git a/docs/images/screenshots/ftptest/ftp-defaults.png b/docs/images/screenshots/ftptest/ftp-defaults.png
new file mode 100644
index 00000000000..644664dc141
Binary files /dev/null and b/docs/images/screenshots/ftptest/ftp-defaults.png differ
diff --git a/docs/images/screenshots/ftptest/ftp-defaults2.png b/docs/images/screenshots/ftptest/ftp-defaults2.png
new file mode 100644
index 00000000000..66f7e14d4ec
Binary files /dev/null and b/docs/images/screenshots/ftptest/ftp-defaults2.png differ
diff --git a/docs/images/screenshots/ftptest/ftp-request.png b/docs/images/screenshots/ftptest/ftp-request.png
new file mode 100644
index 00000000000..14ace11a310
Binary files /dev/null and b/docs/images/screenshots/ftptest/ftp-request.png differ
diff --git a/docs/images/screenshots/ftptest/ftp-request2.png b/docs/images/screenshots/ftptest/ftp-request2.png
new file mode 100644
index 00000000000..adf298935f3
Binary files /dev/null and b/docs/images/screenshots/ftptest/ftp-request2.png differ
diff --git a/docs/images/screenshots/ftptest/ftp-results.png b/docs/images/screenshots/ftptest/ftp-results.png
new file mode 100644
index 00000000000..8b489c773f3
Binary files /dev/null and b/docs/images/screenshots/ftptest/ftp-results.png differ
diff --git a/docs/images/screenshots/ftptest/threadgroup2.png b/docs/images/screenshots/ftptest/threadgroup2.png
new file mode 100644
index 00000000000..543b5d039bc
Binary files /dev/null and b/docs/images/screenshots/ftptest/threadgroup2.png differ
diff --git a/docs/images/screenshots/function_helper_dialog.png b/docs/images/screenshots/function_helper_dialog.png
new file mode 100644
index 00000000000..68cd9f77bd3
Binary files /dev/null and b/docs/images/screenshots/function_helper_dialog.png differ
diff --git a/docs/images/screenshots/grafana_dashboard.png b/docs/images/screenshots/grafana_dashboard.png
new file mode 100644
index 00000000000..28b3b373574
Binary files /dev/null and b/docs/images/screenshots/grafana_dashboard.png differ
diff --git a/docs/images/screenshots/graph_results.png b/docs/images/screenshots/graph_results.png
new file mode 100644
index 00000000000..f895b9b7e97
Binary files /dev/null and b/docs/images/screenshots/graph_results.png differ
diff --git a/docs/images/screenshots/graphfullresults.png b/docs/images/screenshots/graphfullresults.png
new file mode 100644
index 00000000000..462775697e4
Binary files /dev/null and b/docs/images/screenshots/graphfullresults.png differ
diff --git a/docs/images/screenshots/html_link_parser.png b/docs/images/screenshots/html_link_parser.png
new file mode 100644
index 00000000000..d8886575fc3
Binary files /dev/null and b/docs/images/screenshots/html_link_parser.png differ
diff --git a/docs/images/screenshots/http-config/auth-manager-example1a.gif b/docs/images/screenshots/http-config/auth-manager-example1a.gif
new file mode 100644
index 00000000000..013474d5171
Binary files /dev/null and b/docs/images/screenshots/http-config/auth-manager-example1a.gif differ
diff --git a/docs/images/screenshots/http-config/auth-manager-example1b.png b/docs/images/screenshots/http-config/auth-manager-example1b.png
new file mode 100644
index 00000000000..c045ed18f7d
Binary files /dev/null and b/docs/images/screenshots/http-config/auth-manager-example1b.png differ
diff --git a/docs/images/screenshots/http-config/header-manager-example1a.gif b/docs/images/screenshots/http-config/header-manager-example1a.gif
new file mode 100644
index 00000000000..fdf5dc3a51d
Binary files /dev/null and b/docs/images/screenshots/http-config/header-manager-example1a.gif differ
diff --git a/docs/images/screenshots/http-config/header-manager-example1b.png b/docs/images/screenshots/http-config/header-manager-example1b.png
new file mode 100644
index 00000000000..02e5a8387fa
Binary files /dev/null and b/docs/images/screenshots/http-config/header-manager-example1b.png differ
diff --git a/docs/images/screenshots/http-config/http-auth-manager.png b/docs/images/screenshots/http-config/http-auth-manager.png
new file mode 100644
index 00000000000..96989f56da3
Binary files /dev/null and b/docs/images/screenshots/http-config/http-auth-manager.png differ
diff --git a/docs/images/screenshots/http-config/http-cache-manager.png b/docs/images/screenshots/http-config/http-cache-manager.png
new file mode 100644
index 00000000000..1ad53f2b662
Binary files /dev/null and b/docs/images/screenshots/http-config/http-cache-manager.png differ
diff --git a/docs/images/screenshots/http-config/http-config-example.png b/docs/images/screenshots/http-config/http-config-example.png
new file mode 100644
index 00000000000..bd292e8242c
Binary files /dev/null and b/docs/images/screenshots/http-config/http-config-example.png differ
diff --git a/docs/images/screenshots/http-config/http-cookie-manager.png b/docs/images/screenshots/http-config/http-cookie-manager.png
new file mode 100644
index 00000000000..4b763a53a18
Binary files /dev/null and b/docs/images/screenshots/http-config/http-cookie-manager.png differ
diff --git a/docs/images/screenshots/http-config/http-header-manager.png b/docs/images/screenshots/http-config/http-header-manager.png
new file mode 100644
index 00000000000..bb311a816e0
Binary files /dev/null and b/docs/images/screenshots/http-config/http-header-manager.png differ
diff --git a/docs/images/screenshots/http-config/http-request-defaults.png b/docs/images/screenshots/http-config/http-request-defaults.png
new file mode 100644
index 00000000000..1a6c0e0accf
Binary files /dev/null and b/docs/images/screenshots/http-config/http-request-defaults.png differ
diff --git a/docs/images/screenshots/http-request-confirm-raw-body.png b/docs/images/screenshots/http-request-confirm-raw-body.png
new file mode 100644
index 00000000000..ff4f7c0cb03
Binary files /dev/null and b/docs/images/screenshots/http-request-confirm-raw-body.png differ
diff --git a/docs/images/screenshots/http-request-raw-body.png b/docs/images/screenshots/http-request-raw-body.png
new file mode 100644
index 00000000000..09cae548f3c
Binary files /dev/null and b/docs/images/screenshots/http-request-raw-body.png differ
diff --git a/docs/images/screenshots/http-request-raw-single-parameter.png b/docs/images/screenshots/http-request-raw-single-parameter.png
new file mode 100644
index 00000000000..f5816e5813b
Binary files /dev/null and b/docs/images/screenshots/http-request-raw-single-parameter.png differ
diff --git a/docs/images/screenshots/http-request.png b/docs/images/screenshots/http-request.png
new file mode 100644
index 00000000000..1fef8cdbb13
Binary files /dev/null and b/docs/images/screenshots/http-request.png differ
diff --git a/docs/images/screenshots/icons-22x22.jpg b/docs/images/screenshots/icons-22x22.jpg
new file mode 100644
index 00000000000..f15cfb56c5a
Binary files /dev/null and b/docs/images/screenshots/icons-22x22.jpg differ
diff --git a/docs/images/screenshots/icons-32x32.jpg b/docs/images/screenshots/icons-32x32.jpg
new file mode 100644
index 00000000000..0ad10246b8b
Binary files /dev/null and b/docs/images/screenshots/icons-32x32.jpg differ
diff --git a/docs/images/screenshots/icons-48x48.jpg b/docs/images/screenshots/icons-48x48.jpg
new file mode 100644
index 00000000000..be82792ad3c
Binary files /dev/null and b/docs/images/screenshots/icons-48x48.jpg differ
diff --git a/docs/images/screenshots/ifcontroller.png b/docs/images/screenshots/ifcontroller.png
new file mode 100644
index 00000000000..aa1db8aecfb
Binary files /dev/null and b/docs/images/screenshots/ifcontroller.png differ
diff --git a/docs/images/screenshots/includecontroller.png b/docs/images/screenshots/includecontroller.png
new file mode 100644
index 00000000000..1430873d97a
Binary files /dev/null and b/docs/images/screenshots/includecontroller.png differ
diff --git a/docs/images/screenshots/java_defaults.png b/docs/images/screenshots/java_defaults.png
new file mode 100644
index 00000000000..99781413fcc
Binary files /dev/null and b/docs/images/screenshots/java_defaults.png differ
diff --git a/docs/images/screenshots/java_request.png b/docs/images/screenshots/java_request.png
new file mode 100644
index 00000000000..495a95546f5
Binary files /dev/null and b/docs/images/screenshots/java_request.png differ
diff --git a/docs/images/screenshots/jdbc-config/jdbc-conn-config.png b/docs/images/screenshots/jdbc-config/jdbc-conn-config.png
new file mode 100644
index 00000000000..b5461855c17
Binary files /dev/null and b/docs/images/screenshots/jdbc-config/jdbc-conn-config.png differ
diff --git a/docs/images/screenshots/jdbc-config/jdbc-sql-query.png b/docs/images/screenshots/jdbc-config/jdbc-sql-query.png
new file mode 100644
index 00000000000..45844059ae8
Binary files /dev/null and b/docs/images/screenshots/jdbc-config/jdbc-sql-query.png differ
diff --git a/docs/images/screenshots/jdbc-post-processor.png b/docs/images/screenshots/jdbc-post-processor.png
new file mode 100644
index 00000000000..6aa8da66090
Binary files /dev/null and b/docs/images/screenshots/jdbc-post-processor.png differ
diff --git a/docs/images/screenshots/jdbc-pre-processor.png b/docs/images/screenshots/jdbc-pre-processor.png
new file mode 100644
index 00000000000..3f520e3c62f
Binary files /dev/null and b/docs/images/screenshots/jdbc-pre-processor.png differ
diff --git a/docs/images/screenshots/jdbctest/JDBCRequest.png b/docs/images/screenshots/jdbctest/JDBCRequest.png
new file mode 100644
index 00000000000..b578804f7c8
Binary files /dev/null and b/docs/images/screenshots/jdbctest/JDBCRequest.png differ
diff --git a/docs/images/screenshots/jdbctest/JDBCRequest2.png b/docs/images/screenshots/jdbctest/JDBCRequest2.png
new file mode 100644
index 00000000000..9181a802a92
Binary files /dev/null and b/docs/images/screenshots/jdbctest/JDBCRequest2.png differ
diff --git a/docs/images/screenshots/jdbctest/JDBCRequest3.png b/docs/images/screenshots/jdbctest/JDBCRequest3.png
new file mode 100644
index 00000000000..a8b00a9f5d4
Binary files /dev/null and b/docs/images/screenshots/jdbctest/JDBCRequest3.png differ
diff --git a/docs/images/screenshots/jdbctest/jdbc-config.png b/docs/images/screenshots/jdbctest/jdbc-config.png
new file mode 100644
index 00000000000..75ecf8aa9a5
Binary files /dev/null and b/docs/images/screenshots/jdbctest/jdbc-config.png differ
diff --git a/docs/images/screenshots/jdbctest/jdbc-request.png b/docs/images/screenshots/jdbctest/jdbc-request.png
new file mode 100644
index 00000000000..b4f5e5aef38
Binary files /dev/null and b/docs/images/screenshots/jdbctest/jdbc-request.png differ
diff --git a/docs/images/screenshots/jdbctest/jdbc-results.png b/docs/images/screenshots/jdbctest/jdbc-results.png
new file mode 100644
index 00000000000..9d5ca02a1ad
Binary files /dev/null and b/docs/images/screenshots/jdbctest/jdbc-results.png differ
diff --git a/docs/images/screenshots/jdbctest/threadgroup1.png b/docs/images/screenshots/jdbctest/threadgroup1.png
new file mode 100644
index 00000000000..f6f66b0eb5d
Binary files /dev/null and b/docs/images/screenshots/jdbctest/threadgroup1.png differ
diff --git a/docs/images/screenshots/jdbctest/threadgroup2.png b/docs/images/screenshots/jdbctest/threadgroup2.png
new file mode 100644
index 00000000000..fbcdea0f277
Binary files /dev/null and b/docs/images/screenshots/jdbctest/threadgroup2.png differ
diff --git a/docs/images/screenshots/jms/JMS_Point-to-Point.png b/docs/images/screenshots/jms/JMS_Point-to-Point.png
new file mode 100644
index 00000000000..8674c6fd2df
Binary files /dev/null and b/docs/images/screenshots/jms/JMS_Point-to-Point.png differ
diff --git a/docs/images/screenshots/jms/jms_config.png b/docs/images/screenshots/jms/jms_config.png
new file mode 100644
index 00000000000..c46979c70f8
Binary files /dev/null and b/docs/images/screenshots/jms/jms_config.png differ
diff --git a/docs/images/screenshots/jms/jms_messaging.png b/docs/images/screenshots/jms/jms_messaging.png
new file mode 100644
index 00000000000..b8d08b148d1
Binary files /dev/null and b/docs/images/screenshots/jms/jms_messaging.png differ
diff --git a/docs/images/screenshots/jms/jms_pub.png b/docs/images/screenshots/jms/jms_pub.png
new file mode 100644
index 00000000000..8ae48daddc2
Binary files /dev/null and b/docs/images/screenshots/jms/jms_pub.png differ
diff --git a/docs/images/screenshots/jms/jms_sub.png b/docs/images/screenshots/jms/jms_sub.png
new file mode 100644
index 00000000000..533fd2292fe
Binary files /dev/null and b/docs/images/screenshots/jms/jms_sub.png differ
diff --git a/docs/images/screenshots/jmspublisher.png b/docs/images/screenshots/jmspublisher.png
new file mode 100644
index 00000000000..0476282b4bb
Binary files /dev/null and b/docs/images/screenshots/jmspublisher.png differ
diff --git a/docs/images/screenshots/jmssubscriber.png b/docs/images/screenshots/jmssubscriber.png
new file mode 100644
index 00000000000..916dfded867
Binary files /dev/null and b/docs/images/screenshots/jmssubscriber.png differ
diff --git a/docs/images/screenshots/jsr223-sampler.png b/docs/images/screenshots/jsr223-sampler.png
new file mode 100644
index 00000000000..41552c4c57d
Binary files /dev/null and b/docs/images/screenshots/jsr223-sampler.png differ
diff --git a/docs/images/screenshots/junit_sampler.png b/docs/images/screenshots/junit_sampler.png
new file mode 100644
index 00000000000..dc441cec7eb
Binary files /dev/null and b/docs/images/screenshots/junit_sampler.png differ
diff --git a/docs/images/screenshots/keystore_config.png b/docs/images/screenshots/keystore_config.png
new file mode 100644
index 00000000000..05fec53c885
Binary files /dev/null and b/docs/images/screenshots/keystore_config.png differ
diff --git a/docs/images/screenshots/ldap_defaults.png b/docs/images/screenshots/ldap_defaults.png
new file mode 100644
index 00000000000..56dd18740b5
Binary files /dev/null and b/docs/images/screenshots/ldap_defaults.png differ
diff --git a/docs/images/screenshots/ldap_request.png b/docs/images/screenshots/ldap_request.png
new file mode 100644
index 00000000000..9d791a5d81b
Binary files /dev/null and b/docs/images/screenshots/ldap_request.png differ
diff --git a/docs/images/screenshots/ldapext_defaults.png b/docs/images/screenshots/ldapext_defaults.png
new file mode 100644
index 00000000000..b9877fcf23b
Binary files /dev/null and b/docs/images/screenshots/ldapext_defaults.png differ
diff --git a/docs/images/screenshots/ldapext_request.png b/docs/images/screenshots/ldapext_request.png
new file mode 100644
index 00000000000..29b8e248939
Binary files /dev/null and b/docs/images/screenshots/ldapext_request.png differ
diff --git a/docs/images/screenshots/ldaptest/add.png b/docs/images/screenshots/ldaptest/add.png
new file mode 100644
index 00000000000..7da9d1e0e43
Binary files /dev/null and b/docs/images/screenshots/ldaptest/add.png differ
diff --git a/docs/images/screenshots/ldaptest/delete.png b/docs/images/screenshots/ldaptest/delete.png
new file mode 100644
index 00000000000..c7e12b7eefa
Binary files /dev/null and b/docs/images/screenshots/ldaptest/delete.png differ
diff --git a/docs/images/screenshots/ldaptest/extadd.png b/docs/images/screenshots/ldaptest/extadd.png
new file mode 100644
index 00000000000..40c1cd12c63
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extadd.png differ
diff --git a/docs/images/screenshots/ldaptest/extcompare.png b/docs/images/screenshots/ldaptest/extcompare.png
new file mode 100644
index 00000000000..19912435906
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extcompare.png differ
diff --git a/docs/images/screenshots/ldaptest/extdel.png b/docs/images/screenshots/ldaptest/extdel.png
new file mode 100644
index 00000000000..685882ad8b5
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extdel.png differ
diff --git a/docs/images/screenshots/ldaptest/extmod.png b/docs/images/screenshots/ldaptest/extmod.png
new file mode 100644
index 00000000000..1797467a636
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extmod.png differ
diff --git a/docs/images/screenshots/ldaptest/extmoddn.png b/docs/images/screenshots/ldaptest/extmoddn.png
new file mode 100644
index 00000000000..b7f6529d71e
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extmoddn.png differ
diff --git a/docs/images/screenshots/ldaptest/extrequestdefaults.png b/docs/images/screenshots/ldaptest/extrequestdefaults.png
new file mode 100644
index 00000000000..101a9b01425
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extrequestdefaults.png differ
diff --git a/docs/images/screenshots/ldaptest/extsbind.png b/docs/images/screenshots/ldaptest/extsbind.png
new file mode 100644
index 00000000000..5879637995e
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extsbind.png differ
diff --git a/docs/images/screenshots/ldaptest/extsearch.png b/docs/images/screenshots/ldaptest/extsearch.png
new file mode 100644
index 00000000000..13b4d51d8ab
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extsearch.png differ
diff --git a/docs/images/screenshots/ldaptest/extthreadbind.png b/docs/images/screenshots/ldaptest/extthreadbind.png
new file mode 100644
index 00000000000..be5abae50b3
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extthreadbind.png differ
diff --git a/docs/images/screenshots/ldaptest/extthreadgroup.png b/docs/images/screenshots/ldaptest/extthreadgroup.png
new file mode 100644
index 00000000000..1e496d5ee5e
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extthreadgroup.png differ
diff --git a/docs/images/screenshots/ldaptest/extthreadunbind.png b/docs/images/screenshots/ldaptest/extthreadunbind.png
new file mode 100644
index 00000000000..2e7b172d7f0
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extthreadunbind.png differ
diff --git a/docs/images/screenshots/ldaptest/extviewtree.png b/docs/images/screenshots/ldaptest/extviewtree.png
new file mode 100644
index 00000000000..3427f83b1bd
Binary files /dev/null and b/docs/images/screenshots/ldaptest/extviewtree.png differ
diff --git a/docs/images/screenshots/ldaptest/login-config-element.png b/docs/images/screenshots/ldaptest/login-config-element.png
new file mode 100644
index 00000000000..f39053906c4
Binary files /dev/null and b/docs/images/screenshots/ldaptest/login-config-element.png differ
diff --git a/docs/images/screenshots/ldaptest/modify.png b/docs/images/screenshots/ldaptest/modify.png
new file mode 100644
index 00000000000..a21a367c5f9
Binary files /dev/null and b/docs/images/screenshots/ldaptest/modify.png differ
diff --git a/docs/images/screenshots/ldaptest/requestdefaults.png b/docs/images/screenshots/ldaptest/requestdefaults.png
new file mode 100644
index 00000000000..2f4826fb83a
Binary files /dev/null and b/docs/images/screenshots/ldaptest/requestdefaults.png differ
diff --git a/docs/images/screenshots/ldaptest/responseassertion.png b/docs/images/screenshots/ldaptest/responseassertion.png
new file mode 100644
index 00000000000..a3c9117eb14
Binary files /dev/null and b/docs/images/screenshots/ldaptest/responseassertion.png differ
diff --git a/docs/images/screenshots/ldaptest/search.png b/docs/images/screenshots/ldaptest/search.png
new file mode 100644
index 00000000000..eeb77a8b778
Binary files /dev/null and b/docs/images/screenshots/ldaptest/search.png differ
diff --git a/docs/images/screenshots/ldaptest/threadgroup.png b/docs/images/screenshots/ldaptest/threadgroup.png
new file mode 100644
index 00000000000..0b0f1266228
Binary files /dev/null and b/docs/images/screenshots/ldaptest/threadgroup.png differ
diff --git a/docs/images/screenshots/ldaptest/viewtable.png b/docs/images/screenshots/ldaptest/viewtable.png
new file mode 100644
index 00000000000..78028e7899f
Binary files /dev/null and b/docs/images/screenshots/ldaptest/viewtable.png differ
diff --git a/docs/images/screenshots/log_errors_counter.png b/docs/images/screenshots/log_errors_counter.png
new file mode 100644
index 00000000000..83de4757dd5
Binary files /dev/null and b/docs/images/screenshots/log_errors_counter.png differ
diff --git a/docs/images/screenshots/logic-controller/critical-section-controller-tp.png b/docs/images/screenshots/logic-controller/critical-section-controller-tp.png
new file mode 100644
index 00000000000..6ba1ccde18b
Binary files /dev/null and b/docs/images/screenshots/logic-controller/critical-section-controller-tp.png differ
diff --git a/docs/images/screenshots/logic-controller/critical-section-controller.png b/docs/images/screenshots/logic-controller/critical-section-controller.png
new file mode 100644
index 00000000000..e2c0de5f15b
Binary files /dev/null and b/docs/images/screenshots/logic-controller/critical-section-controller.png differ
diff --git a/docs/images/screenshots/logic-controller/foreach-controller.png b/docs/images/screenshots/logic-controller/foreach-controller.png
new file mode 100644
index 00000000000..ac21768c485
Binary files /dev/null and b/docs/images/screenshots/logic-controller/foreach-controller.png differ
diff --git a/docs/images/screenshots/logic-controller/foreach-example.png b/docs/images/screenshots/logic-controller/foreach-example.png
new file mode 100644
index 00000000000..0a80fbd8367
Binary files /dev/null and b/docs/images/screenshots/logic-controller/foreach-example.png differ
diff --git a/docs/images/screenshots/logic-controller/foreach-example2.png b/docs/images/screenshots/logic-controller/foreach-example2.png
new file mode 100644
index 00000000000..b3d2fb7af24
Binary files /dev/null and b/docs/images/screenshots/logic-controller/foreach-example2.png differ
diff --git a/docs/images/screenshots/logic-controller/interleave-controller.png b/docs/images/screenshots/logic-controller/interleave-controller.png
new file mode 100644
index 00000000000..19d3d9d265b
Binary files /dev/null and b/docs/images/screenshots/logic-controller/interleave-controller.png differ
diff --git a/docs/images/screenshots/logic-controller/interleave.png b/docs/images/screenshots/logic-controller/interleave.png
new file mode 100644
index 00000000000..6f8c9e873c4
Binary files /dev/null and b/docs/images/screenshots/logic-controller/interleave.png differ
diff --git a/docs/images/screenshots/logic-controller/interleave2.png b/docs/images/screenshots/logic-controller/interleave2.png
new file mode 100644
index 00000000000..b57e908d6a9
Binary files /dev/null and b/docs/images/screenshots/logic-controller/interleave2.png differ
diff --git a/docs/images/screenshots/logic-controller/interleave3.png b/docs/images/screenshots/logic-controller/interleave3.png
new file mode 100644
index 00000000000..05010350626
Binary files /dev/null and b/docs/images/screenshots/logic-controller/interleave3.png differ
diff --git a/docs/images/screenshots/logic-controller/loop-controller.png b/docs/images/screenshots/logic-controller/loop-controller.png
new file mode 100644
index 00000000000..bc745b41a57
Binary files /dev/null and b/docs/images/screenshots/logic-controller/loop-controller.png differ
diff --git a/docs/images/screenshots/logic-controller/loop-example.png b/docs/images/screenshots/logic-controller/loop-example.png
new file mode 100644
index 00000000000..7a9efa8d92f
Binary files /dev/null and b/docs/images/screenshots/logic-controller/loop-example.png differ
diff --git a/docs/images/screenshots/logic-controller/once-only-controller.png b/docs/images/screenshots/logic-controller/once-only-controller.png
new file mode 100644
index 00000000000..827779e9e0b
Binary files /dev/null and b/docs/images/screenshots/logic-controller/once-only-controller.png differ
diff --git a/docs/images/screenshots/logic-controller/once-only-example.png b/docs/images/screenshots/logic-controller/once-only-example.png
new file mode 100644
index 00000000000..d233c0dbcfd
Binary files /dev/null and b/docs/images/screenshots/logic-controller/once-only-example.png differ
diff --git a/docs/images/screenshots/logic-controller/random-controller.png b/docs/images/screenshots/logic-controller/random-controller.png
new file mode 100644
index 00000000000..b155c07dc17
Binary files /dev/null and b/docs/images/screenshots/logic-controller/random-controller.png differ
diff --git a/docs/images/screenshots/logic-controller/recording-controller.png b/docs/images/screenshots/logic-controller/recording-controller.png
new file mode 100644
index 00000000000..4c856a3a094
Binary files /dev/null and b/docs/images/screenshots/logic-controller/recording-controller.png differ
diff --git a/docs/images/screenshots/logic-controller/simple-controller.png b/docs/images/screenshots/logic-controller/simple-controller.png
new file mode 100644
index 00000000000..ed64774ca76
Binary files /dev/null and b/docs/images/screenshots/logic-controller/simple-controller.png differ
diff --git a/docs/images/screenshots/logic-controller/simple-example.png b/docs/images/screenshots/logic-controller/simple-example.png
new file mode 100644
index 00000000000..23abbc1612b
Binary files /dev/null and b/docs/images/screenshots/logic-controller/simple-example.png differ
diff --git a/docs/images/screenshots/login-config.png b/docs/images/screenshots/login-config.png
new file mode 100644
index 00000000000..3a1d42b5315
Binary files /dev/null and b/docs/images/screenshots/login-config.png differ
diff --git a/docs/images/screenshots/mailervisualizer.png b/docs/images/screenshots/mailervisualizer.png
new file mode 100644
index 00000000000..9d2b293cb4f
Binary files /dev/null and b/docs/images/screenshots/mailervisualizer.png differ
diff --git a/docs/images/screenshots/mailreader_sampler.png b/docs/images/screenshots/mailreader_sampler.png
new file mode 100644
index 00000000000..befee6f4199
Binary files /dev/null and b/docs/images/screenshots/mailreader_sampler.png differ
diff --git a/docs/images/screenshots/mirrorserver.png b/docs/images/screenshots/mirrorserver.png
new file mode 100644
index 00000000000..628c04148b8
Binary files /dev/null and b/docs/images/screenshots/mirrorserver.png differ
diff --git a/docs/images/screenshots/modification.png b/docs/images/screenshots/modification.png
new file mode 100644
index 00000000000..69c863491ca
Binary files /dev/null and b/docs/images/screenshots/modification.png differ
diff --git a/docs/images/screenshots/module_controller.png b/docs/images/screenshots/module_controller.png
new file mode 100644
index 00000000000..25f7682fd03
Binary files /dev/null and b/docs/images/screenshots/module_controller.png differ
diff --git a/docs/images/screenshots/mongodb-script.png b/docs/images/screenshots/mongodb-script.png
new file mode 100644
index 00000000000..6185025a1b3
Binary files /dev/null and b/docs/images/screenshots/mongodb-script.png differ
diff --git a/docs/images/screenshots/mongodb-source-config.png b/docs/images/screenshots/mongodb-source-config.png
new file mode 100644
index 00000000000..45b1c495ff2
Binary files /dev/null and b/docs/images/screenshots/mongodb-source-config.png differ
diff --git a/docs/images/screenshots/monitor_health.png b/docs/images/screenshots/monitor_health.png
new file mode 100644
index 00000000000..bf529949f29
Binary files /dev/null and b/docs/images/screenshots/monitor_health.png differ
diff --git a/docs/images/screenshots/monitor_screencap.png b/docs/images/screenshots/monitor_screencap.png
new file mode 100644
index 00000000000..9a756913da9
Binary files /dev/null and b/docs/images/screenshots/monitor_screencap.png differ
diff --git a/docs/images/screenshots/os_process_sampler.png b/docs/images/screenshots/os_process_sampler.png
new file mode 100644
index 00000000000..ce7da764533
Binary files /dev/null and b/docs/images/screenshots/os_process_sampler.png differ
diff --git a/docs/images/screenshots/parameter_mask.png b/docs/images/screenshots/parameter_mask.png
new file mode 100644
index 00000000000..43cff90ec56
Binary files /dev/null and b/docs/images/screenshots/parameter_mask.png differ
diff --git a/docs/images/screenshots/property_display.png b/docs/images/screenshots/property_display.png
new file mode 100644
index 00000000000..f2bd258f583
Binary files /dev/null and b/docs/images/screenshots/property_display.png differ
diff --git a/docs/images/screenshots/proxy_control.png b/docs/images/screenshots/proxy_control.png
new file mode 100644
index 00000000000..abe66eac448
Binary files /dev/null and b/docs/images/screenshots/proxy_control.png differ
diff --git a/docs/images/screenshots/random_variable.png b/docs/images/screenshots/random_variable.png
new file mode 100644
index 00000000000..ce2ce14dd92
Binary files /dev/null and b/docs/images/screenshots/random_variable.png differ
diff --git a/docs/images/screenshots/randomordercontroller.png b/docs/images/screenshots/randomordercontroller.png
new file mode 100644
index 00000000000..ed977f79af9
Binary files /dev/null and b/docs/images/screenshots/randomordercontroller.png differ
diff --git a/docs/images/screenshots/regex_extractor.png b/docs/images/screenshots/regex_extractor.png
new file mode 100644
index 00000000000..8ab6d33835a
Binary files /dev/null and b/docs/images/screenshots/regex_extractor.png differ
diff --git a/docs/images/screenshots/regex_user_params.png b/docs/images/screenshots/regex_user_params.png
new file mode 100644
index 00000000000..5149736923a
Binary files /dev/null and b/docs/images/screenshots/regex_user_params.png differ
diff --git a/docs/images/screenshots/remote/run-menu00.gif b/docs/images/screenshots/remote/run-menu00.gif
new file mode 100644
index 00000000000..3a5effe2d21
Binary files /dev/null and b/docs/images/screenshots/remote/run-menu00.gif differ
diff --git a/docs/images/screenshots/response_time_graph.png b/docs/images/screenshots/response_time_graph.png
new file mode 100644
index 00000000000..667267247dd
Binary files /dev/null and b/docs/images/screenshots/response_time_graph.png differ
diff --git a/docs/images/screenshots/response_time_graph_settings.png b/docs/images/screenshots/response_time_graph_settings.png
new file mode 100644
index 00000000000..cf06ec3c1b1
Binary files /dev/null and b/docs/images/screenshots/response_time_graph_settings.png differ
diff --git a/docs/images/screenshots/resultstatusactionhandler.png b/docs/images/screenshots/resultstatusactionhandler.png
new file mode 100644
index 00000000000..8a793297435
Binary files /dev/null and b/docs/images/screenshots/resultstatusactionhandler.png differ
diff --git a/docs/images/screenshots/runtimecontroller.png b/docs/images/screenshots/runtimecontroller.png
new file mode 100644
index 00000000000..2ce8839afe6
Binary files /dev/null and b/docs/images/screenshots/runtimecontroller.png differ
diff --git a/docs/images/screenshots/sample_result_config.png b/docs/images/screenshots/sample_result_config.png
new file mode 100644
index 00000000000..6ee98d8aa8b
Binary files /dev/null and b/docs/images/screenshots/sample_result_config.png differ
diff --git a/docs/images/screenshots/save_image.png b/docs/images/screenshots/save_image.png
new file mode 100644
index 00000000000..5e53322d8e6
Binary files /dev/null and b/docs/images/screenshots/save_image.png differ
diff --git a/docs/images/screenshots/savetofile.png b/docs/images/screenshots/savetofile.png
new file mode 100644
index 00000000000..9c260d39f78
Binary files /dev/null and b/docs/images/screenshots/savetofile.png differ
diff --git a/docs/images/screenshots/scoping1.png b/docs/images/screenshots/scoping1.png
new file mode 100644
index 00000000000..0a58fdc5a17
Binary files /dev/null and b/docs/images/screenshots/scoping1.png differ
diff --git a/docs/images/screenshots/scoping2.png b/docs/images/screenshots/scoping2.png
new file mode 100644
index 00000000000..4c5a78a3fd0
Binary files /dev/null and b/docs/images/screenshots/scoping2.png differ
diff --git a/docs/images/screenshots/scoping3.png b/docs/images/screenshots/scoping3.png
new file mode 100644
index 00000000000..4ada01e061a
Binary files /dev/null and b/docs/images/screenshots/scoping3.png differ
diff --git a/docs/images/screenshots/searching/raw-search-result.png b/docs/images/screenshots/searching/raw-search-result.png
new file mode 100644
index 00000000000..786ec5f9996
Binary files /dev/null and b/docs/images/screenshots/searching/raw-search-result.png differ
diff --git a/docs/images/screenshots/searching/raw-search.png b/docs/images/screenshots/searching/raw-search.png
new file mode 100644
index 00000000000..1fc250837e7
Binary files /dev/null and b/docs/images/screenshots/searching/raw-search.png differ
diff --git a/docs/images/screenshots/searching/regexp-search-result.png b/docs/images/screenshots/searching/regexp-search-result.png
new file mode 100644
index 00000000000..193597f2883
Binary files /dev/null and b/docs/images/screenshots/searching/regexp-search-result.png differ
diff --git a/docs/images/screenshots/searching/regexp-search.png b/docs/images/screenshots/searching/regexp-search.png
new file mode 100644
index 00000000000..d9e99de83d9
Binary files /dev/null and b/docs/images/screenshots/searching/regexp-search.png differ
diff --git a/docs/images/screenshots/setup_thread_group.png b/docs/images/screenshots/setup_thread_group.png
new file mode 100644
index 00000000000..97d3be6e55e
Binary files /dev/null and b/docs/images/screenshots/setup_thread_group.png differ
diff --git a/docs/images/screenshots/simple_config_element.png b/docs/images/screenshots/simple_config_element.png
new file mode 100644
index 00000000000..7d88917c714
Binary files /dev/null and b/docs/images/screenshots/simple_config_element.png differ
diff --git a/docs/images/screenshots/simpledatawriter.png b/docs/images/screenshots/simpledatawriter.png
new file mode 100644
index 00000000000..060e67eca2e
Binary files /dev/null and b/docs/images/screenshots/simpledatawriter.png differ
diff --git a/docs/images/screenshots/size_assertion.png b/docs/images/screenshots/size_assertion.png
new file mode 100644
index 00000000000..860d4165389
Binary files /dev/null and b/docs/images/screenshots/size_assertion.png differ
diff --git a/docs/images/screenshots/smtp_sampler.png b/docs/images/screenshots/smtp_sampler.png
new file mode 100644
index 00000000000..9f1821785b4
Binary files /dev/null and b/docs/images/screenshots/smtp_sampler.png differ
diff --git a/docs/images/screenshots/soap_sampler.png b/docs/images/screenshots/soap_sampler.png
new file mode 100644
index 00000000000..01285630c18
Binary files /dev/null and b/docs/images/screenshots/soap_sampler.png differ
diff --git a/docs/images/screenshots/spline_visualizer.png b/docs/images/screenshots/spline_visualizer.png
new file mode 100644
index 00000000000..5e19a96f677
Binary files /dev/null and b/docs/images/screenshots/spline_visualizer.png differ
diff --git a/docs/images/screenshots/summary.png b/docs/images/screenshots/summary.png
new file mode 100644
index 00000000000..03ca2f00e74
Binary files /dev/null and b/docs/images/screenshots/summary.png differ
diff --git a/docs/images/screenshots/summary_report.png b/docs/images/screenshots/summary_report.png
new file mode 100644
index 00000000000..32925461089
Binary files /dev/null and b/docs/images/screenshots/summary_report.png differ
diff --git a/docs/images/screenshots/summary_report_grouped.png b/docs/images/screenshots/summary_report_grouped.png
new file mode 100644
index 00000000000..850e2e7372d
Binary files /dev/null and b/docs/images/screenshots/summary_report_grouped.png differ
diff --git a/docs/images/screenshots/switchcontroller.png b/docs/images/screenshots/switchcontroller.png
new file mode 100644
index 00000000000..1762bd2514d
Binary files /dev/null and b/docs/images/screenshots/switchcontroller.png differ
diff --git a/docs/images/screenshots/table_results.png b/docs/images/screenshots/table_results.png
new file mode 100644
index 00000000000..5a95814d9e5
Binary files /dev/null and b/docs/images/screenshots/table_results.png differ
diff --git a/docs/images/screenshots/tcpsampler.png b/docs/images/screenshots/tcpsampler.png
new file mode 100644
index 00000000000..619baa8d1f0
Binary files /dev/null and b/docs/images/screenshots/tcpsampler.png differ
diff --git a/docs/images/screenshots/tcpsamplerconfig.png b/docs/images/screenshots/tcpsamplerconfig.png
new file mode 100644
index 00000000000..874dce32828
Binary files /dev/null and b/docs/images/screenshots/tcpsamplerconfig.png differ
diff --git a/docs/images/screenshots/tear_down_on_shutdown.png b/docs/images/screenshots/tear_down_on_shutdown.png
new file mode 100644
index 00000000000..6708201a1ae
Binary files /dev/null and b/docs/images/screenshots/tear_down_on_shutdown.png differ
diff --git a/docs/images/screenshots/teardown_thread_group.png b/docs/images/screenshots/teardown_thread_group.png
new file mode 100644
index 00000000000..8a5f66f787d
Binary files /dev/null and b/docs/images/screenshots/teardown_thread_group.png differ
diff --git a/docs/images/screenshots/template_menu.png b/docs/images/screenshots/template_menu.png
new file mode 100644
index 00000000000..85952872bfc
Binary files /dev/null and b/docs/images/screenshots/template_menu.png differ
diff --git a/docs/images/screenshots/template_wizard.png b/docs/images/screenshots/template_wizard.png
new file mode 100644
index 00000000000..50a39c7b794
Binary files /dev/null and b/docs/images/screenshots/template_wizard.png differ
diff --git a/docs/images/screenshots/test_action.png b/docs/images/screenshots/test_action.png
new file mode 100644
index 00000000000..ef250c636d8
Binary files /dev/null and b/docs/images/screenshots/test_action.png differ
diff --git a/docs/images/screenshots/test_fragment.png b/docs/images/screenshots/test_fragment.png
new file mode 100644
index 00000000000..898c925d923
Binary files /dev/null and b/docs/images/screenshots/test_fragment.png differ
diff --git a/docs/images/screenshots/testplan.png b/docs/images/screenshots/testplan.png
new file mode 100644
index 00000000000..48f2dceaf43
Binary files /dev/null and b/docs/images/screenshots/testplan.png differ
diff --git a/docs/images/screenshots/threadgroup.png b/docs/images/screenshots/threadgroup.png
new file mode 100644
index 00000000000..a577ad31b02
Binary files /dev/null and b/docs/images/screenshots/threadgroup.png differ
diff --git a/docs/images/screenshots/throughput_controller.png b/docs/images/screenshots/throughput_controller.png
new file mode 100644
index 00000000000..5a4a2a1a4a6
Binary files /dev/null and b/docs/images/screenshots/throughput_controller.png differ
diff --git a/docs/images/screenshots/timers/beanshell_timer.png b/docs/images/screenshots/timers/beanshell_timer.png
new file mode 100644
index 00000000000..89bef46cba5
Binary files /dev/null and b/docs/images/screenshots/timers/beanshell_timer.png differ
diff --git a/docs/images/screenshots/timers/bsf_timer.png b/docs/images/screenshots/timers/bsf_timer.png
new file mode 100644
index 00000000000..2795881ab95
Binary files /dev/null and b/docs/images/screenshots/timers/bsf_timer.png differ
diff --git a/docs/images/screenshots/timers/constant_throughput_timer.png b/docs/images/screenshots/timers/constant_throughput_timer.png
new file mode 100644
index 00000000000..3fa5cdd69f3
Binary files /dev/null and b/docs/images/screenshots/timers/constant_throughput_timer.png differ
diff --git a/docs/images/screenshots/timers/constant_timer.png b/docs/images/screenshots/timers/constant_timer.png
new file mode 100644
index 00000000000..709a33b1f08
Binary files /dev/null and b/docs/images/screenshots/timers/constant_timer.png differ
diff --git a/docs/images/screenshots/timers/gauss_random_timer.png b/docs/images/screenshots/timers/gauss_random_timer.png
new file mode 100644
index 00000000000..f12b2cb4081
Binary files /dev/null and b/docs/images/screenshots/timers/gauss_random_timer.png differ
diff --git a/docs/images/screenshots/timers/poisson_random_timer.png b/docs/images/screenshots/timers/poisson_random_timer.png
new file mode 100644
index 00000000000..ba08e90d0d8
Binary files /dev/null and b/docs/images/screenshots/timers/poisson_random_timer.png differ
diff --git a/docs/images/screenshots/timers/sync_timer.png b/docs/images/screenshots/timers/sync_timer.png
new file mode 100644
index 00000000000..0918539a35a
Binary files /dev/null and b/docs/images/screenshots/timers/sync_timer.png differ
diff --git a/docs/images/screenshots/timers/uniform_random_timer.png b/docs/images/screenshots/timers/uniform_random_timer.png
new file mode 100644
index 00000000000..bb41346b875
Binary files /dev/null and b/docs/images/screenshots/timers/uniform_random_timer.png differ
diff --git a/docs/images/screenshots/transactioncontroller.png b/docs/images/screenshots/transactioncontroller.png
new file mode 100644
index 00000000000..0448e100aee
Binary files /dev/null and b/docs/images/screenshots/transactioncontroller.png differ
diff --git a/docs/images/screenshots/url_rewrite_example_a.png b/docs/images/screenshots/url_rewrite_example_a.png
new file mode 100644
index 00000000000..aed0fa51d72
Binary files /dev/null and b/docs/images/screenshots/url_rewrite_example_a.png differ
diff --git a/docs/images/screenshots/url_rewrite_example_b.gif b/docs/images/screenshots/url_rewrite_example_b.gif
new file mode 100644
index 00000000000..b4115e5cfe6
Binary files /dev/null and b/docs/images/screenshots/url_rewrite_example_b.gif differ
diff --git a/docs/images/screenshots/url_rewrite_example_b.png b/docs/images/screenshots/url_rewrite_example_b.png
new file mode 100644
index 00000000000..f5e12584560
Binary files /dev/null and b/docs/images/screenshots/url_rewrite_example_b.png differ
diff --git a/docs/images/screenshots/url_rewriter.png b/docs/images/screenshots/url_rewriter.png
new file mode 100644
index 00000000000..ecf6dde2f5b
Binary files /dev/null and b/docs/images/screenshots/url_rewriter.png differ
diff --git a/docs/images/screenshots/user_defined_variables.png b/docs/images/screenshots/user_defined_variables.png
new file mode 100644
index 00000000000..cb5c9f5c32f
Binary files /dev/null and b/docs/images/screenshots/user_defined_variables.png differ
diff --git a/docs/images/screenshots/user_param_modifier.gif b/docs/images/screenshots/user_param_modifier.gif
new file mode 100644
index 00000000000..782ccf79165
Binary files /dev/null and b/docs/images/screenshots/user_param_modifier.gif differ
diff --git a/docs/images/screenshots/user_params.png b/docs/images/screenshots/user_params.png
new file mode 100644
index 00000000000..1be8b825200
Binary files /dev/null and b/docs/images/screenshots/user_params.png differ
diff --git a/docs/images/screenshots/view_results_tree.png b/docs/images/screenshots/view_results_tree.png
new file mode 100644
index 00000000000..18c7f7db87a
Binary files /dev/null and b/docs/images/screenshots/view_results_tree.png differ
diff --git a/docs/images/screenshots/view_results_tree_document.png b/docs/images/screenshots/view_results_tree_document.png
new file mode 100644
index 00000000000..d34009fdb48
Binary files /dev/null and b/docs/images/screenshots/view_results_tree_document.png differ
diff --git a/docs/images/screenshots/view_results_tree_regex.png b/docs/images/screenshots/view_results_tree_regex.png
new file mode 100644
index 00000000000..ede666ef3ea
Binary files /dev/null and b/docs/images/screenshots/view_results_tree_regex.png differ
diff --git a/docs/images/screenshots/view_results_tree_xml.png b/docs/images/screenshots/view_results_tree_xml.png
new file mode 100644
index 00000000000..4e4d682db12
Binary files /dev/null and b/docs/images/screenshots/view_results_tree_xml.png differ
diff --git a/docs/images/screenshots/webservice_sampler.png b/docs/images/screenshots/webservice_sampler.png
new file mode 100644
index 00000000000..8f85196e020
Binary files /dev/null and b/docs/images/screenshots/webservice_sampler.png differ
diff --git a/docs/images/screenshots/webtest/http-defaults1.png b/docs/images/screenshots/webtest/http-defaults1.png
new file mode 100644
index 00000000000..9372f0e3168
Binary files /dev/null and b/docs/images/screenshots/webtest/http-defaults1.png differ
diff --git a/docs/images/screenshots/webtest/http-defaults2.png b/docs/images/screenshots/webtest/http-defaults2.png
new file mode 100644
index 00000000000..9880fa8af05
Binary files /dev/null and b/docs/images/screenshots/webtest/http-defaults2.png differ
diff --git a/docs/images/screenshots/webtest/http-request1.png b/docs/images/screenshots/webtest/http-request1.png
new file mode 100644
index 00000000000..7d9c3fae0bd
Binary files /dev/null and b/docs/images/screenshots/webtest/http-request1.png differ
diff --git a/docs/images/screenshots/webtest/http-request2.png b/docs/images/screenshots/webtest/http-request2.png
new file mode 100644
index 00000000000..e17f33beb17
Binary files /dev/null and b/docs/images/screenshots/webtest/http-request2.png differ
diff --git a/docs/images/screenshots/webtest/http_login.png b/docs/images/screenshots/webtest/http_login.png
new file mode 100644
index 00000000000..fb2e7e88bc0
Binary files /dev/null and b/docs/images/screenshots/webtest/http_login.png differ
diff --git a/docs/images/screenshots/webtest/threadgroup.png b/docs/images/screenshots/webtest/threadgroup.png
new file mode 100644
index 00000000000..6c8d821091d
Binary files /dev/null and b/docs/images/screenshots/webtest/threadgroup.png differ
diff --git a/docs/images/screenshots/webtest/threadgroup2.png b/docs/images/screenshots/webtest/threadgroup2.png
new file mode 100644
index 00000000000..57c72268a84
Binary files /dev/null and b/docs/images/screenshots/webtest/threadgroup2.png differ
diff --git a/docs/images/screenshots/whilecontroller.png b/docs/images/screenshots/whilecontroller.png
new file mode 100644
index 00000000000..76b5aa49276
Binary files /dev/null and b/docs/images/screenshots/whilecontroller.png differ
diff --git a/docs/images/screenshots/workbench.png b/docs/images/screenshots/workbench.png
new file mode 100644
index 00000000000..67e4d87f6cf
Binary files /dev/null and b/docs/images/screenshots/workbench.png differ
diff --git a/docs/images/screenshots/ws_header.png b/docs/images/screenshots/ws_header.png
new file mode 100644
index 00000000000..c2c131ee1e6
Binary files /dev/null and b/docs/images/screenshots/ws_header.png differ
diff --git a/docs/images/screenshots/ws_http_request.png b/docs/images/screenshots/ws_http_request.png
new file mode 100644
index 00000000000..2178bc3fa59
Binary files /dev/null and b/docs/images/screenshots/ws_http_request.png differ
diff --git a/docs/images/screenshots/ws_listener.png b/docs/images/screenshots/ws_listener.png
new file mode 100644
index 00000000000..0953af64d97
Binary files /dev/null and b/docs/images/screenshots/ws_listener.png differ
diff --git a/docs/images/screenshots/ws_template.png b/docs/images/screenshots/ws_template.png
new file mode 100644
index 00000000000..f547f373649
Binary files /dev/null and b/docs/images/screenshots/ws_template.png differ
diff --git a/docs/images/screenshots/xml_assertion.png b/docs/images/screenshots/xml_assertion.png
new file mode 100644
index 00000000000..f7656323358
Binary files /dev/null and b/docs/images/screenshots/xml_assertion.png differ
diff --git a/docs/images/screenshots/xpath_assertion.png b/docs/images/screenshots/xpath_assertion.png
new file mode 100644
index 00000000000..fe27e8c522f
Binary files /dev/null and b/docs/images/screenshots/xpath_assertion.png differ
diff --git a/docs/images/screenshots/xpath_extractor.png b/docs/images/screenshots/xpath_extractor.png
new file mode 100644
index 00000000000..a9735e37288
Binary files /dev/null and b/docs/images/screenshots/xpath_extractor.png differ
diff --git a/docs/images/twitter.png b/docs/images/twitter.png
new file mode 100644
index 00000000000..8256d044a0a
Binary files /dev/null and b/docs/images/twitter.png differ
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 00000000000..d88b1bb1c5a
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,127 @@
+
+Apache JMeter
+ -
+ Apache JMeter™Main content
+ The Apache JMeter™ application is open source software,
+ a 100% pure Java application designed
+ to load test functional behavior and measure performance. It was
+ originally designed for testing Web Applications but has
+ since expanded to other test functions.
+
+
What can I do with it?
+
+ Apache JMeter may be used to test performance both on static and dynamic
+ resources (Webservices (SOAP/REST), Web dynamic languages - PHP, Java, ASP.NET, Files, etc. -, Java Objects, Data Bases and
+ Queries, FTP Servers and more). It can be used to simulate a heavy
+load on a server, group of servers, network or object to test its strength or to analyze
+overall performance under different load types. You can use it to make a
+graphical analysis of performance or to test your server/script/object
+behavior under heavy concurrent load.
+
+
What does it do?
+
Apache JMeter features include:
+
+
Ability to load and performance test many different server/protocol types:
+
+
Web - HTTP, HTTPS
+
SOAP / REST
+
FTP
+
Database via JDBC
+
LDAP
+
Message-oriented middleware (MOM) via JMS
+
Mail - SMTP(S), POP3(S) and IMAP(S)
+
MongoDB (NoSQL)
+
Native commands or shell scripts
+
TCP
+
+
+
Complete portability and 100% Java purity.
+
Full multithreading framework allows concurrent sampling by many threads and
+ simultaneous sampling of different functions by separate thread groups.
+
Careful GUI design allows faster Test Plan building and debugging.
+
Caching and offline analysis/replaying of test results.
Several load statistics may be chosen with pluggable timers.
+
Data analysis and visualization plugins allow great extensibility
+ as well as personalization.
+
Functions can be used to provide dynamic input to a test or provide data manipulation.
+
Scriptable Samplers (BeanShell, BSF-compatible languages and JSR223-compatible languages)
+
+
+
+
JMeter is not a browser
+
+JMeter is not a browser.
+As far as web-services and remote services are concerned, JMeter looks like a browser (or rather, multiple browsers);
+however JMeter does not perform all the actions supported by browsers.
+In particular, JMeter does not execute the Javascript found in HTML pages.
+Nor does it render the HTML pages as a browser does
+(it's possible to view the response as HTML etc, but the timings are not included in any samples, and only one sample in one thread is ever viewed at a time).
+
+JMeter uses Bugzilla for issue tracking, i.e. for reporting bugs and requesting enhancements.
+
+
+Before creating a new issue, please check whether the issue has already been reported by searching Bugzilla.
+It's also worth checking first on the JMeter user mailing list; others may already have a solution.
+
+In most cases it is worth starting a discussion on the mailing list first.
+Bugzilla is good for tracking progress and supplying patches, but is unwieldy for longer discussions.
+
+
+If you have not already done so, you need to register an account first, using the "New Account" link at the top of the
+main Bugzilla page: https://issues.apache.org/bugzilla/.
+
+
+Make sure you read and understand the information on the account creation page before signing up.
+
+
+Once logged in, click "File a bug" and select JMeter from the list
+Please set the severity to "enhancement".
+
+
+Please make sure that you describe the enhancement in sufficient detail. If necessary provide an example use-case.
+
+
+If you are providing a code patch, also provide a test case, and documentation on how to use the new feature (ideally as a documentation patch).
+
+
Raising an Issue
+
+First check that the issue has not already been reported.
+If reporting a bug, are you sure it really is a bug in JMeter, not just a misunderstanding of how JMeter works?
+
+
+If you have not already done so, you need to register an account first, using the "New Account" link at the top of the
+main Bugzilla page: https://issues.apache.org/bugzilla/.
+
+
+Make sure you read and understand the information on the account creation page before signing up.
+
+
+Once logged in, click "File a bug" and select JMeter from the list.
+
+
Required Information for bug reporting
+
+Please make sure you provide sufficient information for others to be able to make use of the report effectively.
+Use the checklist below to guide you.
+
+
+
JMeter version
+
Java version (output from java -version)
+
OS version
+
jmeter.log file (unlikely to contain sensitive information, but check before uploading)
+
JMX file if relevant (redact any sensitive information first), providing a simplified Test Plan (using DEBUG sampler) will ensure BUG is fixed much more rapidely than without it
+
JTL file if relevant (may need to redact sensitive information)
+
For a suspected bug, describe what you did, what happened, and how this differs from what you expected to happen.
+Does it happen every time?.
+
+
Add yourself in CC List to be notified when JMeter Team requires more information (in this case bug will be marked as NEEDINFO)
+
Select accurately the IMPORTANCE level, ENHANCEMENT means it's not a BUG while others mean it's a BUG
+
If you are providing a patch to fix a bug, please ensure it is in unified diff format.
+If using Eclipse, please set the patch root to "Project", not the default "Workspace" which is harder to apply.
+
New source files can be provided as is; please ensure they have the standard Apache License header (as per other JMeter files).
+Please do not use @author tags (credit will be given in the changes file).
+
+
In the case of patches for new features, please also provide documentation patches if at all possible.
+Components are documented in xdocs/usermanual/component_reference.xml.
\ No newline at end of file
diff --git a/docs/jmeter_irc.html b/docs/jmeter_irc.html
new file mode 100644
index 00000000000..1c04f2143f3
--- /dev/null
+++ b/docs/jmeter_irc.html
@@ -0,0 +1,46 @@
+
+Apache JMeter
+ -
+ JMeter on IRCMain content
JMeter developers often hang out on IRC to chat about development issues.
+Users are also welcome to stop by and ask questions, offer feature suggestions,
+or just chit-chat.
+
IRC Server: irc.us.freenode.net
+Room: #jmeter
+
\ No newline at end of file
diff --git a/docs/localising/index.html b/docs/localising/index.html
new file mode 100644
index 00000000000..26a00486148
--- /dev/null
+++ b/docs/localising/index.html
@@ -0,0 +1,147 @@
+
+Apache JMeter
+ -
+ JMeter Localisation (Translator's Guide)Main content
This document describes the process of creating and maintaining translated texts for JMeter in languages
+other than English. English has been tacitly chosen as the project's primary (or "default") language -- despite its
+obvious inadequacy for reasonably unambiguous communication -- as a tribute to the Power of the Empire :-)
+The metropolitan language texts are thus maintained by the software developers, while other project contributors
+(called "translators" in this document) take care of maintaining the texts in the languages of the
+provinces. The process of producing and maintaining the later is called "translation" in this document.
+
+
This document assumes you'll be using i18nEdit as your tool to edit properties files, and instructions will
+be specific to this software, but this is not mandatory: the process should mostly work also if you prefer to use
+another tool, such as or vi or Emacs.
+
+
+
This document describes 6 processes:
+
+
Obtaining the current texts [translators].
+
Providing the current texts to translators [developers].
+
Downloading and running i18nEdit [everyone].
+
Translating [translators].
+
Submitting your translations to the project [translators].
If you want to help with JMeter's translation process, start by reading this document. Then
+send a message to dev@jmeter.apache.org
+stating your intention. The files you need (*.properties and *.metaprop) are included in the source archive.
+But if you are having any difficulty, one of the project contributors will be able to grab the current texts
+from SVN and send them to you. You'll receive a jar, zip, tar or tgz file that you'll need to unpack in your
+local disk.
+
If you are familiar with SVN or you're brave, feel free to anonymously connect to the Apache SVN server
+and obtain the JMeter source yourself, as described in
+http://jmeter.apache.org/svnindex.html
+-- the files necessary to the translation process are all under the jmeter/src directory.
+
+
Once you've unpacked or checked out the files, make sure to find file src/i18nedit.properties in there:
+you'll need to know where it is to start working with i18nEdit.
If you have access to JMeter's SVN repository and you want to pack the files necessary for localisation
+for sending to a translator, just go to the directory above the project root and issue the following command:
+
The runtime for i18nEdit can be obtained from
+http://www.cantamen.com/i18nedit.php.
+Download the binary distribution (i18nedit-1.0.0.jar) and save it locally.
+
To run i18nEdit, just make sure to have a reasonably modern Java Runtime Environment in your PATH, change
+to the directory where you saved i18nedit-1.0.0.jar, then issue the following command:
+
+java -jar i18nedit-1.0.0.jar
+
+
+Then:
+
+
If you've never run i18nEdit before, choose a language. The rest of this document assumes you chose UK English.
+
Select the "Projects" menu, then "Open project...".
+
Navigate to jmeter/src/, select i18nedit.properties, and press the "Open" button.
+
In the window that opens, select the "Project" menu, then "Project settings". Check that your target language
+appears in the list in field "Additional locales (ISO codes)". Otherwise, add it now. Press "Save".
Before you start translating, select the "Project" menu, then "Translation settings". Choose work mode
+"Directed translation (source to target)". Enter "en" (without the quotes) in the "Source localization" field. Enter
+the ISO code of your target language in the "Target localization field".
+
+
Click on one of the editable fields in the right panel ("Comment" or "Content" for your language). Press F2.
+i18nEdit will bring you to the first property that requires your attention, either because a translation does not yet
+exist for it or because the English text has changed since the translation was provided. Enter or fix the text if
+necessary, then press F2 again to repeat the process.
+
+
i18nEdit's on-line help is excellent: read through it for more information and tips.
Once you're done translating, just pack up the whole set of files in jmeter/src in a jar, zip, tar,
+tgz, or alike and attach them to a JMeter bug report
+(follow link to "Known bugs" in JMeter's home page for that).
A mailing list is an electronic discussion forum that anyone can
+subscribe to. When someone sends an email message to the mailing list,
+a copy of that message is broadcast to everyone who is subscribed to
+that mailing list. Mailing lists provide a simple and effective
+communication mechanism. With potentially thousands of subscribers,
+there is a common set of etiquette guidelines that you should observe.
+Please keep on reading.
+
+
+ Respect the mailing list type
+
+ There are generally two types of lists.
+
+
+
+
+
+ The "User" lists where you can send questions and comments about
+ configuration, setup, usage and other "user" types of questions.
+
+
+ The "Developer" lists where you can send questions and
+ comments about the actual software source code and general
+ "development" types of questions.
+
+
+
+
+
Some questions are appropriate for posting on both the "user" and
+the "developer" lists. In this case, pick one and only one. Do not
+cross post.
+
+
Asking a configuration question on the developers list is frowned
+upon because developers' time is as precious as yours. By contacting
+them directly instead of the user base you are abusing resources. In
+fact, it is unlikely that you will get a quicker answer, if at
+all.
+
+
+
+ Join the lists that are appropriate for your discussion.
+
+Please make sure that you are joining the list that is appropriate for the
+topic or product that you would like to discuss. For example,
+please do not join the Regexp mailing list and ask questions about Tomcat.
+Instead, you should join the Tomcat User list and ask your questions
+there.
+
+
+
+
+ Ask smart questions.
+
+Every volunteer project obtains its strength from the people involved
+in it. You are welcome to join any of our mailing lists. You can
+choose to lurk, or actively participate; it's up to you. The level of
+community responsiveness to specific questions is generally directly
+proportional to the amount of effort you spend formulating your
+question. Eric Raymond and Rick Moen have even written an essay entitled "Asking
+Smart Questions" precisely on this topic. Although somewhat
+militant, it is definitely worth reading.
+Note: Please do NOT send your Java problems to the two authors. They welcome feedback on the FAQ's contents, but are simply not a Java help resource. Follow the essay's advice and choose your forum carefully.
+
+
+
+
+ Give feedback when you get a good answer.
+
+If an answer given to you helped you solve your problem then send a mail saying so and don't forget to say THANKS.
+If you fixed the problem yourself then contribute to the mailing list by writing how you solved your issue.
+Giving feedback is useful to people who faced/will face same problems as you and will be your way
+to contribute to the project. Don't forget that people answering your questions are volunteers
+doing so on their personal time.
+
+
+
+
+ Keep your email short and to the point; use a suitable subject line.
+
+If your email is more than about a page of text, chances are that it
+won't get read by very many people. It is much better to try to pack a
+lot of informative information (see above about asking smart questions)
+into as small of an email as possible. If you are replying to a previous
+email, it is a good idea to only quote the parts that you are replying
+to and to remove the unnecessary bits. This makes it easier for people
+to follow a thread as well as making the email archives easier to search
+and read.
+
+
+
+
+ Start a new thread for a new topic
+
+When asing a new question, please start a new thread with an appropriate new subject line.
+This makes it easier to read, and to find later in the archives.
+
+
+
+
+ Do your best to ensure that you are not sending HTML or
+ "Stylelized" email to the list.
+
+If you are using Outlook or Outlook Express or Eudora, chances are that
+you are sending HTML email by default. There is usually a setting that
+will allow you to send "Plain Text" email. If you are using Microsoft
+products to send email, there are several bugs in the software that
+prevent you from turning off the sending of HTML email.
+
+
+
+
+Please don't send attachments or include large chunks of code
+Attachments can be difficult to read and are rarely needed by all recipients.
+Some mailing lists are set up to drop them.
+If you need to send more than a few lines of code, ask first.
+Note that code is often mangled by word-wrapping, so it is better to provide a link to a downloadable file.
+If necessary, arrange with the person(s) responding to the posting how best to give access to the data,
+should it prove necessary.
+
+
+
+
+ Watch where you are sending email.
+
+The majority of our mailing lists have set the Reply-To to go back to the
+list. That means that when you Reply to a message, it will go to the list
+and not to the original author directly. The reason is because it helps
+facilitate discussion on the list for everyone to benefit from. Be careful
+of this as sometimes you may intend to reply to a message directly to someone
+instead of the entire list.
+
+The appropriate contents of the Reply-To header is an age-old debate that
+should not be brought up on the mailing lists. You can
+examine opposing points of view
+condemning
+our convention and
+
+condoning
+it. Bringing this up for debate on a mailing list will add nothing
+new and is considered off-topic.
+
+
+
+
+
+ Do not cross post messages.
+
+In other words, pick a mailing list and send your messages to that mailing
+list only. Do not send your messages to multiple mailing lists. The reason is
+that people may be subscribed to one list and not to the other. Therefore,
+some people will only see part of the conversation.
+
+
Conclusion
+
+Now that you have read the guidelines above, here is the page that gives
+you a listing of the different mailing lists that you can join. If you
+managed to find this without reading the above information, chances
+are you will be sent back here. You might as well read it now and save
+yourself the embarrassment.
+
+
\ No newline at end of file
diff --git a/docs/mail2.html b/docs/mail2.html
new file mode 100644
index 00000000000..497f083839a
--- /dev/null
+++ b/docs/mail2.html
@@ -0,0 +1,153 @@
+
+Apache JMeter
+ -
+ Mailing ListsMain content
+This is the list where users of Apache JMeter meet and discuss issues.
+
+
+Developers are also expected to be lurking on this list to offer support to users of JMeter.
+
+
+This list starts part-way through Nov 2011, when JMeter became an independent Apache project.
+For earlier postings, please see the Jakarta JMeter User list, below.
+
+ The nightly builds are interim builds that are untested and unsupported.
+ Use at your own risk!
+
+ These unreleased builds may not even load, may have undocumented features,
+ known defects, and any number of other issues.
+
+ They are intended for use by developers and others wishing to help with resolving JMeter bugs.
+
+
These builds should not be used in production.
+
Where are the nightly builds?
+
JMeter CI builds are currently run by Jenkins and Buildbot
+Download the _bin and _lib files
+
+Unpack the archives into the same directory structure
+
+The other archives are not needed to run JMeter.
+
+
Building JMeter
+Download the _src, _bin and _lib files
+
+Unpack all the archives into the same directory structure.
+
+
+
+
Warning - please note!
+
+
+ The nightly builds may or may not work properly - or at all.
+
+
+
+ If there is a problem with a particular version,
+ it may be worth reporting this on the JMeter-dev mailing list and/or trying again in a day or two.
+
+
\ No newline at end of file
diff --git a/docs/svnindex.html b/docs/svnindex.html
new file mode 100644
index 00000000000..47af7d131e3
--- /dev/null
+++ b/docs/svnindex.html
@@ -0,0 +1,79 @@
+
+Apache JMeter
+ -
+ Source RepositoriesMain content
Most users of the source code probably don't need to have day to
+day access to the source code as it changes. For these users we
+provide easy to unpack source code downloads via our download page.
+
+
Access the Version Controlled Source Code
+
+
For information on connecting to the ASF Subversion repositories, see the version control
+page.
NOTE:
+When checking out a subproject using Subversion, ensure that you are checking out a tag, a branch or trunk (the main-line) and not all tags and branches to avoid filling up your hard-disk and wasting bandwidth.
The performance of JMeter is being constantly improved, so users are highly encouraged to use the most up to date version.
+Ensure you always read changes list to be aware of new improvements and components.
+You should absolutely avoid using versions that are older than 3 versions before the last one.
+
Your hardware capabilities as well as the Test Plan design will both impact the number of threads you can effectively
+run with JMeter. The number will also depend on how fast your server is (a faster server
+ makes JMeter work harder since it returns a response quicker). As with any Load Testing tool, if you don't correctly size
+ the number of threads, you will face the "Coordinated Omission" problem which can give you wrong or inaccurate results.
+ If you need large-scale load testing, consider running multiple non-GUI JMeter instances on multiple machines
+ using distributed mode (or not). When using distributed mode the result file is combined on the Controller node, if
+ using multiple autonomous instances, the sample result files can be combined for subsequent analysis.
+For testing how JMeter performs on a given platform, the JavaTest sampler can be used.
+It does not require any network access so can give some idea as to the maximum throughput achievable.
+
+
+JMeter versions since 2.8 have an option to delay thread creation until the thread
+starts sampling, i.e. after any thread group delay and the ramp-up time for the thread itself.
+This allows for a very large total number of threads, provided that not too many are active concurrently.
+
Refer to HTTP(S) Test Script Recorder for details on setting up the
+recorder. The most important thing to do is filter out all requests you aren't
+interested in. For instance, there's no point in recording image requests (JMeter can
+be instructed to download all images on a page - see HTTP Request).
+These will just clutter your test plan. Most likely, there is an extension all your files
+share, such as .jsp, .asp, .php, .html or the like. These you should "include" by
+entering ".*\.jsp" as an "Include Pattern".
+
Alternatively, you can exclude images by entering ".*\.gif" as an "Exclude Pattern".
+Depending on your application, this may or may not be a better way to go. You may
+also have to exclude stylesheets, javascript files, and other included files. Test
+out your settings to verify you are recording what you want, and then erase and start
+fresh.
+
+
The HTTP(S) Test Script Recorder expects to find a ThreadGroup element with a Recording Controller
+under it where it will record HTTP Requests to. This conveniently packages all your samples under one
+controller, which can be given a name that describes the test case.
+
Now, go through the steps of a Test Case. If you have no pre-defined test cases, use
+JMeter to record your actions to define your test cases. Once you have finished a
+definite series of steps, save the entire test case in an appropriately named file. Then, wipe
+clean and start a new test case. By doing this, you can quickly record a large number of
+test case "rough drafts".
+
One of the most useful features of the HTTP(S) Test Script Recorder is that you can abstract out
+certain common elements from the recorded samples. By defining some
+user-defined variables at the Test Plan level or in
+User Defined Variables elements, you can have JMeter automatically
+replace values in you recorded samples. For instance, if you are testing an app on
+server "xxx.example.com", then you can define a variable called "server" with the value of
+"xxx.example.com", and anyplace that value is found in your recorded samples will be replaced
+with "${server}".
+
+
Please note that matching is case-sensitive.
+
+
+
+If JMeter does not record any samples, check that the browser really is using the proxy.
+If the browser works OK even if JMeter is not running, then the browser cannot be using the proxy.
+Some browsers ignore proxy settings for localhost or 127.0.0.1; try using the local hostname or IP instead.
+
+
+The error "unknown_ca" probably means that you are trying to record HTTPS, and the browser has not accepted the
+JMeter Proxy server certificate.
+
+Some test plans need to use different values for different users/threads.
+For example, you might want to test a sequence that requires a unique login for each user.
+This is easy to achieve with the facilities provided by JMeter.
+
+
For example:
+
+
Create a text file containing the user names and passwords, separated by commas.
+Put this in the same directory as your test plan.
+
+
+Add a CSV DataSet configuration element to the test plan.
+Name the variables USER and PASS.
+
+
+Replace the login name with ${USER} and the password with ${PASS} on the appropriate
+samplers
+
+
+
The CSV Data Set element will read a new line for each thread.
+
Use non-GUI mode: jmeter -n -t test.jmx -l test.jtl
+
Use as few Listeners as possible; if using the -l flag as above they can all be deleted or disabled.
+
Don't use "View Results Tree" or "View Results in Table" listeners during the load test, use them only during scripting phase to debug your scripts.
+
Rather than using lots of similar samplers,
+use the same sampler in a loop, and use variables (CSV Data Set) to vary the sample.
+[The Include Controller does not help here, as it adds all the test elements in the file to the test plan.]
+
+
Don't use functional mode
+
Use CSV output rather than XML
+
Only save the data that you need
+
Use as few Assertions as possible
+
Use the most performing scripting language (see JSR223 section)
+
+
+If your test needs large amounts of data - particularly if it needs to be randomised - create the test data in a file
+that can be read with CSV Dataset. This avoids wasting resources at run-time.
+
+The BeanShell interpreter has a very useful feature - it can act as a server,
+which is accessible by telnet or http.
+
+
+There is no security. Anyone who can connect to the port can issue any BeanShell commands.
+These can provide unrestricted access to the JMeter application and the host.
+Do not enable the server unless the ports are protected against access, e.g. by a firewall.
+
+
+If you do wish to use the server, define the following in jmeter.properties:
+
+In the above example, the server will be started, and will listen on ports 9000 and 9001.
+Port 9000 will be used for http access. Port 9001 will be used for telnet access.
+The startup.bsh file will be processed by the server, and can be used to define various functions and set up variables.
+The startup file defines methods for setting and printing JMeter and system properties.
+This is what you should see in the JMeter console:
+
+
+Startup script running
+Startup script completed
+Httpd started on port: 9000
+Sessiond started on port: 9001
+
+
+There is a sample script (extras/remote.bsh) you can use to test the server.
+[Have a look at it to see how it works.]
+
+When starting it in the JMeter bin directory
+(adjust paths as necessary if running from elsewhere)
+the output should look like:
+
+$ java -jar ../lib/bshclient.jar localhost 9000 ../extras/remote.bsh
+Connecting to BSH server on localhost:9000
+Reading responses from server ...
+BeanShell 2.0b5 - by Pat Niemeyer (pat@pat.net)
+bsh % remote.bsh starting
+user.home = C:\Documents and Settings\User
+user.dir = D:\eclipseworkspaces\main\JMeter_trunk\bin
+log_level.jmeter = INFO
+log_level.jorphan = INFO
+Setting property 'EXAMPLE' to '0'.
+Setting property 'EXAMPLE' to '1'.
+Setting property 'EXAMPLE' to '2'.
+Setting property 'EXAMPLE' to '3'.
+Setting property 'EXAMPLE' to '4'.
+Setting property 'EXAMPLE' to '5'.
+Setting property 'EXAMPLE' to '6'.
+Setting property 'EXAMPLE' to '7'.
+Setting property 'EXAMPLE' to '8'.
+Setting property 'EXAMPLE' to '9'.
+EXAMPLE = 9
+remote.bsh ended
+bsh % ... disconnected from server.
+
+
+
+As a practical example, assume you have a long-running JMeter test running in non-GUI mode,
+and you want to vary the throughput at various times during the test.
+The test-plan includes a Constant Throughput Timer which is defined in terms of a property,
+e.g. ${__P(throughput)}.
+The following BeanShell commands could be used to change the test:
+
+
+printprop("throughput");
+curr=Integer.decode(args[0]); // Start value
+inc=Integer.decode(args[1]); // Increment
+end=Integer.decode(args[2]); // Final value
+secs=Integer.decode(args[3]); // Wait between changes
+while(curr <= end){
+ setprop("throughput",curr.toString()); // Needs to be a string here
+ Thread.sleep(secs*1000);
+ curr += inc;
+}
+printprop("throughput");
+
+
The script can be stored in a file (throughput.bsh, say), and sent to the server using bshclient.jar.
+For example:
+
+Each BeanShell test element has its own copy of the interpreter (for each thread).
+If the test element is repeatedly called, e.g. within a loop, then the interpreter is retained
+between invocations unless the "Reset bsh.Interpreter before each call" option is selected.
+For intensive load testing, it is recommended to use a JSR223 scripting language whose ScriptingEngine implements Compilable,
+see JSR223 section below for more details.
+
+
+Some long-running tests may cause the interpreter to use lots of memory; if this is the case try using the reset option.
+
+
+You can test BeanShell scripts outside JMeter by using the command-line interpreter:
+
+$ java -cp bsh-xxx.jar[;other jars as needed] bsh.Interperter file.bsh [parameters]
+or
+$ java -cp bsh-xxx.jar bsh.Interperter
+bsh% source("file.bsh");
+bsh% exit(); // or use EOF key (e.g. ^Z or ^D)
+
+Variables can be defined in startup (initialisation) scripts.
+These will be retained across invocations of the test element, unless the reset option is used.\
+
+
+Scripts can also access JMeter variables using the get() and put() methods of the "vars" variable,
+for example: vars.get("HOST"); vars.put("MSG","Successful");.
+The get() and put() methods only support variables with String values,
+but there are also getObject() and putObject() methods which can be used for arbitrary objects.
+JMeter variables are local to a thread, but can be used by all test elements (not just Beanshell).
+
+
+If you need to share variables between threads, then JMeter properties can be used:
+
+The sample .bshrc files contain sample definitions of getprop() and setprop() methods.
+
+
+Another possible method of sharing variables is to use the "bsh.shared" shared namespace.
+For example:
+
+if (bsh.shared.myObj == void){
+ // not yet defined, so create it:
+ myObj=new AnyObject();
+}
+bsh.shared.myObj.process();
+
+Rather than creating the object in the test element, it can be created in the startup file
+defined by the JMeter property "beanshell.init.file". This is only processed once.
+
+
+
16.10 Developing script functions in BeanShell, Javascript or Jexl etc.¶
+
+It's quite hard to write and test scripts as functions.
+However, JMeter has the JSR223, BSF (and BeanShell) samplers which can be used instead.
+
+
+Create a simple Test Plan containing the JSR223 or BSF Sampler and Tree View Listener.
+Code the script in the sampler script pane, and test it by running the test.
+If there are any errors, these will show up in the Tree View.
+Also the result of running the script will show up as the response.
+
+
+Once the script is working properly, it can be stored as a variable on the Test Plan.
+The script variable can then be used to create the function call.
+For example, suppose a BeanShell script is stored in the variable RANDOM_NAME.
+The function call can then be coded as ${__BeanShell(${RANDOM_NAME})}.
+There is no need to escape any commas in the script,
+because the function call is parsed before the variable's value is interpolated.
+
+Often it is useful to be able to re-run the same test with different settings.
+For example, changing the number of threads or loops, or changing a hostname.
+
+
+One way to do this is to define a set of variables on the Test Plan, and then use those variables in the test elements.
+For example, one could define the variable LOOPS=10, and refer to that in the Thread Group as ${LOOPS}.
+To run the test with 20 loops, just change the value of the LOOPS variable on the Test Plan.
+
+
+This quickly becomes tedious if you want to run lots of tests in non-GUI mode.
+One solution to this is to define the Test Plan variable in terms of a property,
+for example LOOPS=${__P(loops,10))}.
+This uses the value of the property "loops", defaulting to 10 if the property is not found.
+The "loops" property can then be defined on the JMeter command-line:
+jmeter ... -Jloops=12 ....
+If there are a lot of properties that need to be changed together,
+then one way to achieve this is to use a set of property files.
+The appropriate property file can be passed in to JMeter using the -q command-line option.
+
+For intensive load testing, the recommended scripting language is one whose ScriptingEngine implements the Compilable interface.
+Groovy scripting engine implements Compilable. However neither Beanshell nor Javascript do so as of release date of JMeter 2.13, so it is
+recommended to avoid them for intensive load testing.
+[Note: Beanshell implements the Compilable interface but it has not been coded - the method just throws an Exception.
+JMeter has an explicit work-round for this bug.]
+
+When using JSR 223 elements, always set caching key to a unique value to ensure the script compilation is cached if underlying language supports it.
+Ensure the script does not use any variable using ${varName} as caching would take only first value of ${varName}. Instead use :
+
+vars.get("varName")
+
+
+
+You can also pass them as Parameters to the script and use them this way.
+
+
16.13 Sharing variables between threads and thread groups¶
+
+Variables are local to a thread; a variable set in one thread cannot be read in another.
+This is by design. For variables that can be determined before a test starts, see
+Parameterising Tests (above).
+If the value is not known until the test starts, there are various options:
+
+
Store the variable as a property - properties are global to the JMeter instance
When you need to modify jmeter properties, ensure you don't modify jmeter.properties file, instead copy the property from jmeter.properties and modify its value in user.properties file.
+Doing so will ease you migration to the next version of JMeter.
+Note that in the documentation jmeter.properties is frequently mentioned but this should be understood as "Copy from jmeter.properties to user.properties the property you want to modify and do so in the latter file".
+
user.properties file superseeds the properties defined in jmeter.properties
\ No newline at end of file
diff --git a/docs/usermanual/boss.html b/docs/usermanual/boss.html
new file mode 100644
index 00000000000..48361ea2029
--- /dev/null
+++ b/docs/usermanual/boss.html
@@ -0,0 +1,213 @@
+
+Apache JMeter
+ -
+ User's Manual: My boss wants me to...Main content
17. Help! My boss wants me to load test our application!¶
+
This is a fairly open-ended proposition. There are a number of questions to
+be asked first, and additionally a number of resources that will be needed. You
+will need some hardware to run the benchmarks/load-tests from. A number of
+tools will prove useful. There are a number of products to consider. And finally,
+why is Java a good choice to implement a load-testing/Benchmarking product.
+
What is our anticipated average number of users (normal load) ?
+
+
What is our anticipated peak number of users ?
+
+
When is a good time to load-test our application (i.e. off-hours or week-ends),
+bearing in mind that this may very well crash one or more of our servers ?
+
+
Does our application have state ? If so, how does our application manage it
+(cookies, session-rewriting, or some other method) ?
+
The following resources will prove very helpful. Bear in mind that if you
+cannot locate these resources, you 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.
+
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 ?
+
Who knows how our application functions ? The normal sequence is
+
+
test (low-volume - can we benchmark our application?)
+
benchmark (the average number of users)
+
load-test (the maximum number of users)
+
test destructively (what is our hard limit?)
+
+ The test 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.
+
+
+
17.3 What platform should I use to run the benchmarks/load-tests ?¶
+
This should be a widely-used piece of hardware, with a standard
+(i.e. vanilla) software installation. Remember, if you publish your results,
+the first thing your clients will do is hire a graduate student to verify them.
+You might as well make it as easy for this person as you possibly can.
+
+
For Windows, Windows XP Professional should be a minimum (the others
+do not multi-thread past 50-60 connections, and you probably anticipate
+more users than that).
+
+
Good free platforms include the linuxes, the BSDs, and Solaris Intel. If
+you have a little more money, there are commercial linuxes.
+This may be worth it if you need the support.
+
+
+For non-Windows platforms, investigate "ulimit -n unlimited" with a view to
+including it in your user account startup scripts (.bashrc or .cshrc scripts
+for the testing account).
+
+
As you progress to larger-scale benchmarks/load-tests, this platform
+will become the limiting factor. So it's worth using the best hardware and
+software that you have available. Remember to include the hardware/software
+configuration in your published benchmarks.
+
+
When you need a lot of machines or want to test the network latency, Cloud can help you.
+JMeter can easily be installed on Cloud instances as it runs on nearly any architecture available in the Cloud.
+JMeter is also supported within Commercial Cloud PAAS if you don't want to manage it yourself.
+
+
Don't forget JMeter batch (NON-GUI) mode. This mode should be used during load testing for many reasons:
+
+
If you have a powerful server that supports Java but perhaps does not have a fast graphics implementation, or where you need to login remotely.
+
Batch (non-GUI) mode can reduce the network traffic compared with using a remote display or client-server mode.
+
Java AWT Thread used for GUI mode can alter injection behaviour by blocking sometimes
+
+The batch log file can then be loaded into JMeter on a workstation for analysis, or you can
+use CSV output and import the data into a spreadsheet.
+
Remember GUI mode is for Script creation and debugging, not for load testing
The following tools will all prove useful. It is definitely worthwhile to
+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).
+
+ 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'.
+
+ While the user will normally use a human-readable internet
+ address, you 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.
+
+ 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.
+
This non official plugin allows you to capture reports from JMeter and JUnit.
+ Jenkins will generate graphic charts with the trend report of performance and robustness.
+ It includes the feature of setting the final build status as good, unstable or failed, based on the reported error percentage.
+
Well, Perl might be a very good choice except that the Benchmark package
+seems to give fairly fuzzy results. Also, simulating multiple users with
+Perl is a tricky proposition (multiple connections can be simulated by forking
+many processes from a shell script, but these will not be threads, they will
+be processes). However, the Perl community is very large. If you find that
+someone has already written something that seems useful, this could be a very
+good solution.
+
+
C, of course, is a very good choice (check out the Apache ab tool).
+But be prepared to write all of the custom networking, threading, and state
+management code that you will need to benchmark your application.
+
+
Java gives you (for free) the custom networking, threading, and state
+management code that you will need to benchmark your application. Java is
+aware of HTTP, FTP, and HTTPS - as well as RMI, IIOP, and JDBC (not to mention
+cookies, URL-encoding, and URL-rewriting). In addition Java gives you automatic
+garbage-collection, and byte-code level security.
+
\ No newline at end of file
diff --git a/docs/usermanual/build-adv-web-test-plan.html b/docs/usermanual/build-adv-web-test-plan.html
new file mode 100644
index 00000000000..cb808282fe8
--- /dev/null
+++ b/docs/usermanual/build-adv-web-test-plan.html
@@ -0,0 +1,75 @@
+
+Apache JMeter
+ -
+ User's Manual: Building an Advanced Web Test PlanMain content
If your web application uses URL rewriting rather than cookies to save session information,
+then you'll need to do a bit of extra work to test your site.
+
To respond correctly to URL rewriting, JMeter needs to parse the HTML
+received from the server and retrieve the unique session ID. Use the appropriate HTTP URL Re-writing Modifier
+to accomplish this. Simply enter the name of your session ID parameter into the modifier, and it
+will find it and add it to each request. If the request already has a value, it will be replaced.
+If "Cache Session Id?" is checked, then the last found session id will be saved,
+and will be used if the previous HTTP sample does not contain a session id.
+
Download this example. In Figure 1 is shown a
+test plan using URL rewriting. Note that the URL Re-writing modifier is added to the SimpleController,
+thus assuring that it will only affect requests under that SimpleController.
+Figure 1 - Test Tree
+
In Figure 2, we see the URL Re-writing modifier GUI, which just has a field for the user to specify
+the name of the session ID parameter. There is also a checkbox for indicating that the session ID should
+be part of the path (separated by a ";"), rather than a request parameter
The HTTP Header Manager lets you customize what information
+JMeter sends in the HTTP request header. This header includes properties like "User-Agent",
+"Pragma", "Referer", etc.
+
The HTTP Header Manager, like the HTTP Cookie Manager,
+should probably be added at the Thread Group level, unless for some reason you wish to
+specify different headers for the different HTTP Request objects in
+your test.
\ No newline at end of file
diff --git a/docs/usermanual/build-db-test-plan.html b/docs/usermanual/build-db-test-plan.html
new file mode 100644
index 00000000000..bcf6772634a
--- /dev/null
+++ b/docs/usermanual/build-db-test-plan.html
@@ -0,0 +1,198 @@
+
+Apache JMeter
+ -
+ User's Manual: Building a Simple Database Test PlanMain content
In this section, you will learn how to create a basic
+Test Plan to test a database server.
+You will create fifty users that send 2 SQL requests to the database server.
+Also, you will tell the users to run their tests 100 times. So, the total number
+of requests is (50 users) x (2 requests) x (repeat 100 times) = 10'000 JDBC requests.
+To construct the Test Plan, you will use the following elements:
+Thread Group,
+JDBC Request, Summary Report.
+
+
This example uses the MySQL database driver.
+To use this driver, its containing .jar file (ex. mysql-connector-java-X.X.X-bin.jar) must be copied to the JMeter
+./lib directory (see JMeter's Classpath
+for more details).
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.
+
+
Go ahead and add the ThreadGroup element by first selecting the Test Plan,
+clicking your right mouse button to get the Add menu, and then select
+Add --> ThreadGroup.
+
+
You should now see the Thread Group element under Test Plan. If you do not
+see the element, then "expand" the Test Plan tree by clicking on the
+Test Plan element.
+
+
Next, you need to modify the default properties. Select the Thread Group element
+in the tree, if you have not already selected it. You should now see the Thread
+Group Control Panel in the right section of the JMeter window (see Figure 7.1
+below)
+
+
+Figure 7.1. Thread Group with Default Values
+
+
Start by providing a more descriptive name for our Thread Group. In the name
+field, enter JDBC Users.
+
+
You will need a valid database, database table, and user-level access to that
+table. In the example shown here, the database is 'cloud' and the table name is
+'vm_instance'.
+
+
Next, increase the number of users to 50.
+
+
In the next field, the Ramp-Up Period, leave the the value of 10
+seconds. This property tells JMeter how long to delay between starting each
+user. For example, if you enter a Ramp-Up Period of 10 seconds, JMeter will
+finish starting all of your users by the end of the 10 seconds. So, if we have
+50 users and a 10 second Ramp-Up Period, then the delay between starting users
+would be 200 milliseconds (10 seconds / 50 users = 0.2 user per second). If you set the
+value to 0, then JMeter will immediately start all of your users.
+
+
Finally, enter a value of 100 in
+the Loop Count field. This property tells JMeter how many times to repeat your
+test. To have JMeter repeatedly run your Test Plan, select the Forever
+checkbox.
+
+
In most applications, you have to manually accept
+changes you make in a Control Panel. However, in JMeter, the Control Panel
+automatically accepts your changes as you make them. If you change the
+name of an element, the tree will be updated with the new text after you
+leave the Control Panel (for example, when selecting another tree element).
+
+
See Figure 7.2 for the completed JDBC Users Thread Group.
Now that we have defined our users, it is time to define the tasks that they
+will be performing. In this section, you will specify the JDBC requests to
+perform.
+
+
Begin by selecting the JDBC Users element. Click your right mouse button
+to get the wAdd menu, and then select Add --> Config Element --> JDBC Connection Configuration.
+Then, select this new element to view its Control Panel (see Figure 7.3).
+
+
Set up the following fields (these assume we will be using a MySQL database called 'cloud'):
+
+
Variable name (here: myDatabase) bound to pool. This needs to uniquely identify the configuration. It is used by the JDBC Sampler to identify the configuration to be used.
The other fields on the screen can be left as the defaults.
+
JMeter creates a database connection pool with the configuration settings as specified in the Control Panel.
+The pool is referred to in JDBC Requests in the 'Variable Name' field.
+Several different JDBC Configuration elements can be used, but they must have unique names.
+Every JDBC Request must refer to a JDBC Configuration pool.
+More than one JDBC Request can refer to the same pool.
+
+
+Figure 7.3. JDBC Configuration
+
+
Selecting the JDBC Users element again. Click your right mouse button
+to get the Add menu, and then select Add --> Sampler --> JDBC Request.
+Then, select this new element to view its Control Panel (see Figure 7.4).
+
+
+Figure 7.4. JDBC Request
+
+
In our Test Plan, we will make two JDBC requests. The first one is for
+select all 'Running' VM instances, and the second is to select 'Expunging' VM instance (obviously you should
+change these to examples appropriate for your particular database). These
+are illustrated below.
+
+
JMeter sends requests in the order that you add them to the tree.
+
+
Start by editing the following properties (see Figure 7.5):
+
+
Change the Name to 'VM Running'.
+
Enter the Pool Name: 'myDatabase' (same as in the configuration element)
+
Enter the SQL Query String field.
+
Enter the Parameter values field with 'Running' value.
+
Enter the Parameter types with 'VARCHAR'.
+
+
+
+
+Figure 7.5. JDBC Request for the first SQL request
+
+
Next, add the second JDBC Request and edit the following properties (see
+Figure 7.6):
+
+
Change the Name to 'VM Expunging'.
+
Change the value of Parameter values to 'Expunging'.
+
+
+
+
+Figure 7.6. JDBC Request for the second request
+
+
7.3 Adding a Listener to View/Store the Test Results¶
+
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 JDBC requests in a file
+and presenting the results.
+
+
Select the JDBC Users element and add a Summary Report
+listener (Add --> Listener --> Summary Report).
+
+
Save the test plan, and run the test with the menu Run --> Start or Ctrl+R
\ No newline at end of file
diff --git a/docs/usermanual/build-ftp-test-plan.html b/docs/usermanual/build-ftp-test-plan.html
new file mode 100644
index 00000000000..bb6225c2a82
--- /dev/null
+++ b/docs/usermanual/build-ftp-test-plan.html
@@ -0,0 +1,194 @@
+
+Apache JMeter
+ -
+ User's Manual: Building an FTP Test PlanMain content
In this section, you will learn how to create a basic
+Test Plan to test an FTP site. You will
+create four users that send requests for two files on a FTP site.
+Also, you will tell the users to run their tests twice. So, the total number of
+requests is (4 users) x (2 requests) x (repeat 2 times) = 16 FTP requests.
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.
+
+
Go ahead and add the Thread Group element by first selecting the Test Plan,
+clicking your right mouse button to get the Add menu, and then select
+Add --> ThreadGroup.
+
+
You should now see the Thread Group element under Test Plan. If you do not
+see the element, then "expand" the Test Plan tree by clicking on the
+Test Plan element.
+
+
Next, you need to modify the default properties. Select the Thread Group element
+in the tree, if you have not already selected it. You should now see the Thread
+Group Control Panel in the right section of the JMeter window (see Figure 8.1
+below)
+
+
+Figure 8.1. Thread Group with Default Values
+
+
Start by providing a more descriptive name for our Thread Group. In the name
+field, enter 'FTP Users'.
+
+
Next, increase the number of users to 4.
+
+
In the next field, the Ramp-Up Period, leave the the default value of 0
+seconds. This property tells JMeter how long to delay between starting each
+user. For example, if you enter a Ramp-Up Period of 5 seconds, JMeter will
+finish starting all of your users by the end of the 5 seconds. So, if we have
+5 users and a 5 second Ramp-Up Period, then the delay between starting users
+would be 1 second (5 users / 5 seconds = 1 user per second). If you set the
+value to 0, then JMeter will immediately start all of your users.
+
+
Finally, enter a value of 2 in
+the Loop Count field. This property tells JMeter how many times to repeat your
+test. To have JMeter repeatedly run your Test Plan, select the Forever
+checkbox.
+
+
In most applications, you have to manually accept
+changes you make in a Control Panel. However, in JMeter, the Control Panel
+automatically accepts your changes as you make them. If you change the
+name of an element, the tree will be updated with the new text after you
+leave the Control Panel (for example, when selecting another tree element).
+
+
See Figure 8.2 for the completed FTP Users Thread Group.
Now that we have defined our users, it is time define the tasks that they
+will be performing. In this section, you will specify the default settings
+for your FTP requests. And then, in section 8.3, you will add FTP Request
+elements which use some of the default settings you specified here.
+
+
Begin by selecting the FTP Users element. Click your right mouse button
+to get the Add menu, and then select Add --> Config Element --> FTP Request
+Defaults. Then, select this new element to view its Control Panel (see Figure 8.3).
+
+
+
+Figure 8.3. FTP Request Defaults
+
+
+Like most JMeter elements, the FTP Request Defaults Control
+Panel has a name field that you can modify. In this example, leave this field with
+the default value.
+
+
Skip to the next field, which is the FTP Server's Server Name/IP. For the
+Test Plan that you are building, all FTP requests will be sent to the same
+FTP server, ftp.domain.com in this case. Enter this domain name into the field.
+This is the only field that we will specify a default, so leave the remaining
+fields with their default values.
+
+
The FTP Request Defaults element does not tell JMeter
+to send an FTP request. It simply defines the default values that the
+FTP Request elements use.
+
+
See Figure 8.4 for the completed FTP Request Defaults element
+
+
+Figure 8.4. FTP Defaults for our Test Plan
+
+
In our Test Plan, we need to make two FTP requests.
+
+
JMeter sends requests in the order that they appear in the tree.
+
+
Start by adding the first FTP Request
+to the FTP Users element (Add --> Sampler --> FTP Request).
+Then, select the FTP Request element in the tree and edit the following properties
+(see Figure 8.5):
+
+
Change the Name to "File1".
+
Change the Remote File field to "/directory/file1.txt".
+
Change the Username field to "anonymous".
+
Change the Password field to "anonymous@test.com".
+
+
+
+
You do not have to set the Server Name field because you already specified
+this value in the FTP Request Defaults element.
+
+
+Figure 8.5. FTP Request for file1
+
+
Next, add the second FTP Request and edit the following properties (see
+Figure 8.6:
+
+
Change the Name to "File2".
+
Change the Remote File field to "/directory/file2.txt".
+
Change the Username field to "anonymous".
+
Change the Password field to "anonymous@test.com".
+
+
+
+
+Figure 8.6. FTP Request for file2
+
+
8.4 Adding a Listener to View/Store the Test Results¶
+
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 FTP requests in a file and presenting
+a visual model of the data.
+
+
Select the FTP Users element and add a View Results in Table
+listener (Add --> Listener --> View Results in Table).
\ No newline at end of file
diff --git a/docs/usermanual/build-jms-point-to-point-test-plan.html b/docs/usermanual/build-jms-point-to-point-test-plan.html
new file mode 100644
index 00000000000..a7a771293ee
--- /dev/null
+++ b/docs/usermanual/build-jms-point-to-point-test-plan.html
@@ -0,0 +1,219 @@
+
+Apache JMeter
+ -
+ User's Manual: Building a JMS (Java Messaging Service) Point-to-Point Test PlanMain content
+ Make sure the required jar files are in JMeter's lib directory. If they are not, shutdown JMeter,
+ copy the jar files over and restart JMeter.
+ See Getting Started for details.
+
+
+
In this section, you will learn how to create a
+ Test Plan to test a JMS Point-to-Point messaging solution.
+The setup of the test is 1 threadgroup with 5 threads sending 4 messages each through a request queue.
+A fixed reply queue will be used for monitoring the reply messages.
+To construct the Test Plan, you will use the
+following elements:
+ Thread Group,
+ JMS Point-to-Point, and
+ Graph Results.
+
+
+
General notes on JMS: There are currently two JMS samplers. One uses JMS topics
+and the other uses queues. Topic messages are commonly known as pub/sub messaging.
+Topic messaging is generally used in cases where a message is published by a producer and
+consumed by multiple subscribers. A JMS sampler needs the JMS implementation jar files;
+for example, from Apache ActiveMQ. See here for the list
+of jars provided by ActiveMQ 3.0.
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.
+
+
+
Go ahead and add the ThreadGroup element by first selecting the Test Plan,
+clicking your right mouse button to get the Add menu, and then select
+Add --> ThreadGroup.
+
+
You should now see the Thread Group element under Test Plan. If you do not
+see the element, then "expand" the Test Plan tree by clicking on the
+Test Plan element.
+
+
Next, you need to modify the default properties. Select the Thread Group element
+in the tree, if you have not already selected it. You should now see the Thread
+Group Control Panel in the right section of the JMeter window (see Figure 11.1
+below)
+
+
+Figure 11.1. Thread Group with Default Values
+
+
Start by providing a more descriptive name for our Thread Group. In the name
+field, enter Point-to-Point.
+
+
Next, increase the number of users (called threads) to 5.
+
+
In the next field, the Ramp-Up Period, leave set the value to 0
+seconds. This property tells JMeter how long to delay between starting each
+user. For example, if you enter a Ramp-Up Period of 5 seconds, JMeter will
+finish starting all of your users by the end of the 5 seconds. So, if we have
+5 users and a 5 second Ramp-Up Period, then the delay between starting users
+would be 1 second (5 users / 5 seconds = 1 user per second). If you set the
+value to 0, then JMeter will immediately start all of your users.
+
+
Clear the checkbox labeled "Forever", and enter a value of 4 in the Loop
+Count field. This property tells JMeter how many times to repeat your test.
+If you enter a loop count value of 0, then JMeter will run your test only
+once. To have JMeter repeatedly run your Test Plan, select the Forever
+checkbox.
+
+
In most applications, you have to manually accept
+changes you make in a Control Panel. However, in JMeter, the Control Panel
+automatically accepts your changes as you make them. If you change the
+name of an element, the tree will be updated with the new text after you
+leave the Control Panel (for example, when selecting another tree element).
Start by adding the sampler JMS Point-to-Point
+to the Point-to-Point element (Add --> Sampler --> JMS Point-to-Point).
+Then, select the JMS Point-to-Point sampler element in the tree.
+ In building the example a configuration will be provided that works with ActiveMQ 3.0.
+
+
+
+
+
+
Name
+
Value
+
Description
+
+
+
+
JMS Resources
+
+
+
QueueuConnectionFactory
+
ConnectionFactory
+
This is the default JNDI entry for the connection factory within active mq.
+
+
+
JNDI Name Request Queue
+
Q.REQ
+
This is equal to the JNDI name defined in the JNDI properties.
+
+
+
JNDI Name Reply Queue
+
Q.RPL
+
This is equal to the JNDI name defined in the JNDI properties.
+
+
+
Message Properties
+
+
+
Communication Style
+
Request Response
+
This means that you need at least a service running outside of JMeter and that will respond to the requests.
+ This service must listen to the Request Queue and send messages to the queue referenced by the message.getJMSReplyTo()
This defines a JNDI name Q.REQ for the request queue that points to the queue example.A
+
+
+
queue.Q.RPL
+
example.B
+
This defines a JNDI name Q.RPL for the reply queue that points to the queue example.B
+
+
+
Provider URL
+
+
+
Provider URL
+
tcp://localhost:61616
+
This defines the URL of the active mq messaging system.
+
+
+
+
+
11.3 Adding a Listener to View Store the Test Results¶
+
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 JMS requests in a file and presenting
+a visual model of the data.
+
+
+
Select the Thread Group element and add a
+ Graph Results listener (Add --> Listener
+--> Graph Results). Next, you need to specify a directory and filename of the
+output file. You can either type it into the filename field, or select the
+Browse button and browse to a directory and then enter a filename.
+
\ No newline at end of file
diff --git a/docs/usermanual/build-jms-topic-test-plan.html b/docs/usermanual/build-jms-topic-test-plan.html
new file mode 100644
index 00000000000..437d9437127
--- /dev/null
+++ b/docs/usermanual/build-jms-topic-test-plan.html
@@ -0,0 +1,204 @@
+
+Apache JMeter
+ -
+ User's Manual: Building a JMS (Java Messaging Service) Test PlanMain content
+JMS requires some optional jars to be downloaded. Please refer to Getting Started for full details.
+
+
In this section, you will learn how to create a
+Test Plan to test JMS Providers. You will
+create five subscribers and one publisher. You will create 2 thread groups and set
+each one to 10 iterations. The total messages is (6 threads) x (1 message) x
+(repeat 10 times) = 60 messages. To construct the Test Plan, you will use the
+following elements:
+Thread Group,
+JMS Publisher,
+JMS Subscriber, and
+Graph Results.
+
+
General notes on JMS: There are currently two JMS samplers. One uses JMS topics
+and the other uses queues. Topic messages are commonly known as pub/sub messaging.
+Topic messaging is generally used in cases where a message is published by a producer and
+consumed by multiple subscribers. Queue messaging is generally used for transactions
+where the sender expects a response. Messaging systems are quite different from
+normal HTTP requests. In HTTP, a single user sends a request and gets a response.
+Messaging system can work in sychronous and asynchronous mode. A JMS sampler needs
+the JMS implementation jar files; for example, from Apache ActiveMQ.
+See here for the list of jars provided by ActiveMQ 3.0.
The first step is 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 how many requests they should
+send.
+
+
Go ahead and add the ThreadGroup element by first selecting the Test Plan,
+clicking your right mouse button to get the Add menu, and then select
+Add --> ThreadGroup.
+
+
You should now see the Thread Group element under Test Plan. If you do not
+see the element, then "expand" the Test Plan tree by clicking on the
+Test Plan element.
+
+
Next, you need to modify the default properties. Select the Thread Group element
+in the tree, if you have not already selected it. You should now see the Thread
+Group Control Panel in the right section of the JMeter window (see Figure 12.1
+below)
+
+
+Figure 12.1. Thread Group with Default Values
+
+
Start by providing a more descriptive name for our Thread Group. In the name
+field, enter Subscribers.
+
+
Next, increase the number of users (called threads) to 5.
+
+
In the next field, the Ramp-Up Period, set the value to 0
+seconds. This property tells JMeter how long to delay between starting each
+user. For example, if you enter a Ramp-Up Period of 5 seconds, JMeter will
+finish starting all of your users by the end of the 5 seconds. So, if we have
+5 users and a 5 second Ramp-Up Period, then the delay between starting users
+would be 1 second (5 users / 5 seconds = 1 user per second). If you set the
+value to 0, JMeter will immediately start all users.
+
+
Clear the checkbox labeled "Forever", and enter a value of 10 in the Loop
+Count field. This property tells JMeter how many times to repeat your test.
+If you enter a loop count value of 0, then JMeter will run your test only
+once. To have JMeter repeatedly run your Test Plan, select the Forever
+checkbox.
+
+
Repeat the process and add another thread group. For the second thread
+group, enter "Publisher" in the name field, set the number of threads to 1,
+and set the iteration to 10.
+
+
+
In most applications, you have to manually accept
+changes you make in a Control Panel. However, in JMeter, the Control Panel
+automatically accepts your changes as you make them. If you change the
+name of an element, the tree will be updated with the new text after you
+leave the Control Panel (for example, when selecting another tree element).
Make sure the required jar files are in JMeter's lib directory. If they are
+not, shutdown JMeter, copy the jar files over and restart JMeter.
+
+
Start by adding the sampler JMS Subscriber
+to the Subscribers element (Add --> Sampler --> JMS Subscriber).
+Then, select the JMS Subscriber element in the tree and edit the following properties:
+
+
+
Change the Name field to "Sample Subscriber"
+
If the JMS provider uses the jndi.properties file, check the box
+
Enter the name of the InitialContextFactory class. For example, with ActiveMQ 5.4, the value is "org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+
Enter the provider URL. This is the URL for the JNDI server, if there is one. For example, with ActiveMQ 5.4 on local machine with default port, the value is "tcp://localhost:61616"
+
Enter the name of the connection factory. Please refer to the documentation
+of the JMS provider for the information. For ActiveMQ, the default is "ConnectionFactory"
+
Enter the name of the message topic. For ActiveMQ Dynamic Topics (create topics dynamically), example value is "dynamicTopics/MyStaticTopic1"
+Note: Setup at startup mean that JMeter starting to listen on the Destination at beginning of test without name change possibility.
+Setup on Each sample mean that JMeter (re)starting to listen before run each JMS Subscriber sample,
+this last option permit to have Destination name with some JMeter variables
+
If the JMS provider requires authentication, check "required" and enter the
+username and password. For example, Orion JMS requires authentication, while ActiveMQ
+and MQSeries does not
+
Enter 10 in "Number of samples to aggregate". For performance reasons, the sampler
+will aggregate messages, since small messages will arrive very quickly. If the sampler
+didn't aggregate the messages, JMeter wouldn't be able to keep up.
+
If you want to read the response, check the box
+
There are two client implementations for subscribers. If the JMS provider
+exhibits zombie threads with one client, try the other.
+
+
+
+
+Figure 12.2. JMS Subscriber
+
+
Next add the sampler JMS Publisher
+to the Publisher element (Add --> Sampler --> JMS Subscriber).
+Then, select the JMS Publisher element in the tree and edit the following properties:
+
+
+
+
Change the Name field to "Sample Publisher".
+
If the JMS provider uses the jndi.properties file, check the box
+
Enter the name of the InitialContextFactory class. For example, with ActiveMQ 5.4, the value is "org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+
Enter the provider URL. This is the URL for the JNDI server, if there is one. For example, with ActiveMQ 5.4 on local machine with default port, the value is "tcp://localhost:61616"
+
Enter the name of the connection factory. Please refer to the documentation
+of the JMS provider for the information. For ActiveMQ, the default is "ConnectionFactory"
+
Enter the name of the message topic. For ActiveMQ Dynamic Topics (create topics dynamically), example value is "dynamicTopics/MyStaticTopic1".
+Note: Setup at startup mean that JMeter starting connection with the Destination at beginning of test without name change possibility.
+Setup on Each sample mean that JMeter (re)starting the connection before run each JMS Publisher sample,
+this last option permit to have Destination name with some JMeter variables
+
If the JMS provider requires authentication, check "required" and enter the
+username and password. For example, Orion JMS requires authentication, while ActiveMQ
+and MQSeries does not
+
Enter 10 in "Number of samples to aggregate". For performance reasons, the sampler
+will aggregate messages, since small messages will arrive very quickly. If the sampler
+didn't aggregate the messages, JMeter wouldn't be able to keep up.
+
Select the appropriate configuration for getting the message to publish. If you
+want the sampler to randomly select the message, place the messages in a directory
+and select the directory using browse.
+
Select the message type. If the message is in object format or map message, make sure the
+message is generated correctly.
+
+
+
+Figure 12.3. JMS Publisher
+
+
+
12.3 Adding a Listener to View Store the Test Results¶
+
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 HTTP requests in a file and presenting
+a visual model of the data.
+
+
Select the Test Plan element and add a Graph Results listener (Add --> Listener
+--> Graph Results). Next, you need to specify a directory and filename of the
+output file. You can either type it into the filename field, or select the
+Browse button and browse to a directory and then enter a filename.
\ No newline at end of file
diff --git a/docs/usermanual/build-ldap-test-plan.html b/docs/usermanual/build-ldap-test-plan.html
new file mode 100644
index 00000000000..5be4079bfc5
--- /dev/null
+++ b/docs/usermanual/build-ldap-test-plan.html
@@ -0,0 +1,171 @@
+
+Apache JMeter
+ -
+ User's Manual: Building an LDAP Test PlanMain content
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 4 times. So, the total number of requests is (4 users) x (4 requests) x
+repeat 4 times) = 40 LDAP requests. To construct the Test Plan, you will use the following elements:
+Thread Group,
+LDAP Request,
+LDAP Request Defaults, and
+View Results in Table
+.
+
This example assumes that the LDAP Server is available at ldap.test.com.
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.
+
Go ahead and add the ThreadGroup element by first selecting the Test Plan, clicking your
+right mouse button to get the Add menu, and then select Add>ThreadGroup. You should now see the
+Thread Group element under Test Plan. If you do not see the element, then "expand" the Test Plan tree by
+clicking on the Test Plan element.
+
+Figure 9a.1. Thread Group and final test tree
+
+
Begin by selecting the LDAP 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.
+
Like most JMeter elements, the Login Config Element's Control Panel has a name
+field that you can modify. In this example, leave this field with the default value.
+
+
+ Figure 9a.2 Login Config Element for our Test Plan
+
+
Enter Username field to "your LDAP Username",
+ The password field to "your LDAP Passowrd"
Begin by selecting the LDAP 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.
+
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.
+
+
+
+ Figure 9a.3 LDAP Defaults for our Test Plan
+
+
Enter DN field to "your LDAP Root Distinguished Name".
+ Enter LDAP Server's Servername field to "ldap.test.com".
+ The port to 389.
+ These values are default for the LDAP Requests.
In our Test Plan, we need to make four LDAP requests.
+
+
Inbuilt Add Test
+
Inbuilt Search Test
+
Inbuilt Modify Test
+
Inbuilt Delete Test
+
+
+
JMeter sends requests in the order that you add them to the tree.
+Start by adding the first LDAP Request to the LDAP Users element (Add>
+Sampler>LDAP Request). Then, select the LDAP Request element in the tree
+and edit the following properties
+
+
Rename to "Add" this element
+
Select the Add Test radio button in Test Configuration group
+
+
+ Figure 9a.4.1 LDAP Request for Inbuilt Add test
+
+
+
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.
+
Next, add the second LDAP Request and edit the following
+properties
+
+
Rename to "Search" this element
+
Select the Search Test radio button in Test Configuration group
+
+ Next, add the Third LDAP Request and edit the following properties
+
+ Figure 9a.4.2 LDAP Request for Inbuilt Search test
+
+
+
Rename to "Modify" this element
+
Select the Modify Test radio button in Test Configuration group
+
+ Next, add the fourth LDAP Request and edit the following properties
+
+
+ Figure 9a.4.3 LDAP Request for Inbuilt Modify test
+
+
+
Rename to "Delete" this element
+
Select the Delete Test radio button in Test Configuration group
+
+
+ Figure 9a.4.4 LDAP Request for Inbuilt Delete test
+
+
You can add a Response Assertion element.
+ This element will check the received response data by verifying if the response text is "successful".
+ (Add>Assertion>Response Assertion). Note: A this position in the tree,
+ the Response Assertion will be executed for each LDAP Request.
+
+
Select Text Response Radio button in Response Field to Test group
+
Select Substring Radio button in Pattern Matching Rules group
+
Click on Add button and add the string "successful" in Pattern to Test field
+
+
+ Figure 9a.5 LDAP Response Assertion
+
9a.6 Adding a Listener to View/Store the Test Results¶
+
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 LDAP
+Users element and add a View Results in Table (Add>Listener>View Results in Table)
\ No newline at end of file
diff --git a/docs/usermanual/build-ldapext-test-plan.html b/docs/usermanual/build-ldapext-test-plan.html
new file mode 100644
index 00000000000..42b7dc17627
--- /dev/null
+++ b/docs/usermanual/build-ldapext-test-plan.html
@@ -0,0 +1,486 @@
+
+Apache JMeter
+ -
+ User's Manual: Building an Extended LDAP Test PlanMain content
+In this section, you will learn how to create a basic Test Plan to test an LDAP
+server.
+
+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.
+
+This example assumes that the LDAP Server is available at ldap.test.com.
+
+
+For the less experienced LDAP users, I build a small
+LDAP tutorial which shortly explains
+the several LDAP operations that can be used in building a complex testplan.
+
+
+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.
+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
+cn=c:\\\\log.txt to add an entry with a name like cn=c:\log.txt
+
+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.
+
+
+Go ahead and add the Thread Group element by first selecting the Test Plan, clicking your
+right mouse button to get the Add menu, and then select Add>Threads (Users)>Thread Group.
+You should now see the Thread Group element under Test Plan. If you do not see the element, then "expand" the Test Plan tree by
+clicking on the Test Plan element.
+
+
+
+Figure 9b.1. Thread Group with Default Values
+
+
+Begin by selecting the LDAP Ext Users element. Click your right mouse button
+to get the Add menu, and then select Add >Config Element>LDAP Extended Request Defaults. Then,
+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.
+
+
+ Figure 9b.2 LDAP Defaults for our Test Plan
+
+
+ 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 value is entered which is necesarry for a test, the test will fail in an unpredictable way!
+
+ 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.
+
+In our Test Plan, we want to use all 9 LDAP requests.
+
+
+
+Thread bind
+
+
+Search Test
+
+
+Compare Test
+
+
+Single bind/unbind Test
+
+
+Add Test
+
+
+Modify Test
+
+
+Rename entry (moddn)
+
+
+Delete Test
+
+
+Thread unbind
+
+
+
+JMeter sends requests in the order that you add them to the tree.
+
+
+Adding a requests always start by:
+Adding the LDAP Extended Request to the LDAP Ext Users element (Add>
+Sampler>LDAP Ext Request). Then, select the LDAP Ext Request element in the tree
+and edit the following properties.
+Enter the hostname value from the LDAP server in the Servername field
+
+
+Enter the portnumber from the LDAP server (636 : ldap over SSL) in the port field
+
+
+(Optional) Enter the baseDN in the DN field, this baseDN will be used as thestarting point for searches, add, deletes etc.
+take care that this must be the uppermost shared level for all your request, eg When all information is stored under ou=Users, dc=test, dc=com, you can use this value in the basedn.
+
+
+(Optional) Enter the distinghuised name from the user you want to use for authentication.
+When this field is kept empty, an anonymous bind will be established.
+
+
+(Optional) Enter the password for the user you want to authenticate with, an empty password will also lead to an anonymous bind.
+
+
+(Optional) Enter a value for the connection timeout with LDAP
+
+
+(Optional) Check the box Use Secure LDAP Protocol if you access with LDAP over SSL (ldaps)
+
+(Optional) enter the searchbase under which you want to perform the search, relative to the basedn, used in the thread bind request.
+When left empty, the basedn is used as a search base, this files is important if you want to use a "base-entry" or "one-level" search (see below)
+
+
+Enter the searchfilter, any decent LDAP serach filter will do, but for now, use something simple, like (sn=Doe) or (cn=*)
+
+
+(Optional) Enter the scope in the scope field, it has three options:
+
+
baseobject search only the given searchbase is used, only for checking attributes or existence.
+
+
onelevel search Only search in one level below given searchbase is used
+
+
subtree search Searches for object at any point below the given basedn
+
+
+
+(Optional) Size limit, specifies the maximun number of returned entries,
+
+
+(Optional) Time limit, specifies the maximum number of miliseconds, the SERVER can use for performing the search. it is NOT the maximun time the application will wait.
+When a very large returnset is returned, from a very fast server, over a very slow line, you may have to wait for ages for the completion of the search request, but this parameter will not influence this.
+
+
(Optional) Attributes you want in the search answer. This can be used to limit the size of the answer, especially when an onject has very large attributes (like jpegPhoto). There are three possibilities:
+
Leave empty (the default setting must also be empty) This will return all attributes.
+
+
Put in one empty value (""), it will request a non-existent attributes, so in reality it returns no attributes
+
+
Put in the attributes, seperated by a semi-colon. It will return only the requested attributes
+
+
+(Optional) Return object. Checked will return all java-object attributes, it will add these to the requested attributes, as specified above.
+Unchecked will mean no java-object attributes will be returned.
+
+
+(Optional) Dereference aliases. Checked will mean it will follow references, Unchecked says it will not.
+
+
+(Optional) Parse the search results?. Checked will mean it gets all results in response data, Unchecked says it will not.
+
+Rename the element: "4. Single bind/unbind Test"
+
+
+Select the "Single bind/unbind" button.
+
+
+Enter the FULL distinghuised name from the user you want to use for authentication.
+eg. cn=jdoe,ou=Users,dc=test,dc=com
+When this field is kept empty, an anonymous bind will be established.
+
+
+Enter the password for the user you want to authenticate with, an empty password will also lead to an anonymous bind.
+
+
+Take care: This single bind/unbind is in reality two seperate operations but cannot easily be split!
+
+Enter the distinghuised name for the object to add, relative to the basedn.
+
+
+Add a line in the "add test" table, fill in the attribute and value.
+When you need the same attribute more than once, just add a new line, add the attribute again, and a different value.
+All necessary attributes and values must be specified to pass the test, see picture!
+(sometimes the server adds the attribute "objectClass=top", this might give a problem.
+
+Enter the distinghuised name for the object to modify, relative to the basedn.
+
+
+Add a line in the "modify test" table, with the "add" button.
+
+
+You need to enter the attribute you want to modify, (optional) a value, and the opcode. The meaning of this opcode:
+
add this will mean that the attribute value (not optional in this case) willbe added to the attribute.
+When the attribute is not existing, it will be created and the value added
+When it is existing, and defined multi-valued, the new value is added.
+when it is existing, but single valued, it will fail.
+
replace
+This will overwrite the attribute with the given new value (not optional here)
+When the attribute is not existing, it will be created and the value added
+When it is existing, old values are removed, the new value is added.
+
delete
+When no value is given, all values will be removed
+When a value is given, only that value will be removed
+ when the given value is not existing, the test will fail
+
+
+
+(Optional) Add more modifications in the "modify test" table.
+All modifications which are specified must succeed, to let the modification test pass. When one modification fails,
+NO modifications at all will be made and the entry will remain unchanged.
+
+Enter the name of the entry, relative to the baseDN, in the "old entry name-Field".
+that is, if you want to rename "cn=Little John Doe,ou=Users", and you set the baseDN to "dc=test,dc=com",
+you need to enter "cn=John Junior Doe,ou=Users" in the old entry name-field.
+
+
+Enter the new name of the entry, relative to the baseDN, in the "new distinghuised name-Field".
+when you only change the RDN, it will simply rename the entry
+when you also add a different subtree, eg you change from cn=john doe,ou=Users to cn=john doe,ou=oldusers, it will move the entry.
+You can also move a complete subtree (If your LDAP server supports this!), eg ou=Users,ou=retired, to ou=oldusers,ou=users,
+this will move the complete subtee, plus all retired people in the subtree to the new place in the tree.
+
+Enter the name of the entry, relative to the baseDN, in the Delete-Field.
+that is, if you want to remove "cn=John Junior Doe,ou=Users,dc=test,dc=com", and you set the baseDN to "dc=test,dc=com",
+you need to enter "cn=John Junior Doe,ou=Users" in the Delete-field.
+
+Select the "Thread unbind" button.
+This will be enough as it just closes the current connection.
+The information which is needed is already known by the system
+
+
+
+
+Figure 9b.3.9. Unbind example
+
+
+
+
+
9b.4 Adding a Listener to View/Store the Test Results¶
+
+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 Thread group
+element and add a View Results Tree (Add>Listener>View Results Tree)
+
+
+
+Figure 9b.4. View Result Tree Listener
+
+
+In this listener you have three tabs to view, the sampler result, the request and the response data.
+
+
+The sampler result just contains the response time, the returncode and return message
+
+
+The request gives a short description of the request that was made, in practice no relevant information
+is contained here.
+
+
+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.
+The full description can be found here.
+
\ No newline at end of file
diff --git a/docs/usermanual/build-monitor-test-plan.html b/docs/usermanual/build-monitor-test-plan.html
new file mode 100644
index 00000000000..03001f60813
--- /dev/null
+++ b/docs/usermanual/build-monitor-test-plan.html
@@ -0,0 +1,158 @@
+
+Apache JMeter
+ -
+ User's Manual: Building a Monitor Test PlanMain content
In this section, you will learn how to create a
+Test Plan to monitor webservers. Monitors
+are useful for a stress testing and system management. Used with stress
+testing, the monitor provides additional information about server performance.
+It also makes it easier to see the relationship between server performance
+and response time on the client side. As a system administration tool, the
+monitor provides an easy way to monitor multiple servers from one console.
+The monitor was designed to work with the status servlet in Tomcat 5. In
+theory, any servlet container that supports JMX (Java Management Extension)
+can port the status servlet to provide the same information.
+
For those who want to use the monitor with other servlet or EJB containers,
+Tomcat's status servlet should work with other containers for the memory
+statistics without any modifications. To get thread information, you will
+need to change the MBeanServer lookup to retrieve the correct MBeans.
The first step is to add a Thread Group
+element. The Thread Group tells JMeter the number of threads you want. Always use
+1, since we are using JMeter as a monitor. This is very important for those not
+familiar with server monitors. As a general rule, using multiple threads for a
+single server is bad and can create significant stress.
+
+
+
Go ahead and add the ThreadGroup element by first selecting the Test Plan,
+clicking your right mouse button to get the Add menu, and then select
+Add --> ThreadGroup.
+
+
You should now see the Thread Group element under Test Plan. If you do not
+see the element, "expand" the Test Plan tree by clicking on the Test Plan element.
+
+
+Figure 13.1. Thread Group with Default Values
+
+
Change the loop count to forever (or some large number) so that enough samples are generated.
Add the HTTP Authorization Manager to the Thread Group element
+(Add --> Config element --> HTTP Authorization Manager). Enter the username
+and password for your webserver. Important note: the monitor only works with
+Tomcat5 build 5.0.19 and newer. For instructions on how to setup Tomcat, please
+refer to tomcat 5 documentation.
Add the HTTP Request to the Thread Group element
+(Add --> Sampler --> HTTP Request). Then, select the HTTP Request element
+in the tree and edit the following properties):
+
+
Change the Name field to "Server Status".
+
Enter the IP address or Hostname
+
Enter the port number
+
Set the Path field to "/manager/status" if you're using Tomcat.
+
Add a request parameter named "XML" in uppercase. Give it a value of
+"true" in lowercase.
+
Check "Use as Monitor" at the bottom of the sampler
Add a timer to this thread group (Add --> Timer --> Constant Timer).
+Enter 5000 milliseconds in the "Thread Delay" box. In general, using intervals shorter
+than 5 seconds will add stress to your server. Find out what is an acceptable interval
+before you deploy the monitor in your production environment.
If you want to save the raw results from the server, add a simple data
+ Listener. If you want to save the
+ calculated statistics, enter a filename in the listener. If you want to save both
+ the raw data and statistics, make sure you use different filenames.
+
+
Select the thread group element and add a Simple Data Writer listener
+(Add --> Listener --> Simple Data Writer). Next, you need to specify a directory
+and filename of the output file. You can either type it into the filename field, or
+select the Browse button and browse to a directory and then enter a filename.
Add the Listener by selecting the
+test plan element (Add --> Listener -- > Monitor Results).
+
+By default, the Listener will select the results from the first connector in the sample response.
+The Connector prefix field can be used to select a different connector.
+If specified, the Listener will choose the first connector which matches the prefix.
+If no match is found, then the first connector is selected.
+
+
There are two tabs in
+the monitor results listener. The first is the "Health", which displays the status of
+the last sample the monitor received. The second tab is "Performance", which shows a
+historical view of the server's performance.
+
+
+
+
A quick note about how health is calculated. Typically, a server will crash if
+it runs out of memory, or reached the maximum number of threads. In the case of
+Tomcat 5, once the threads are maxed out, requests are placed in a queue until a
+thread is available. The relative importance of threads vary between containers, so
+the current implementation uses 50/50 to be conservative. A container that is more
+efficient with thread management might not see any performance degradation, but
+the used memory definitely will show an impact.
+
+
The performance graph shows four different lines. The free memory line shows how
+much free memory is left in the current allocated block. Tomcat 5 returns the maximum
+memory, but it is not graphed. In a well tuned environment, the server should never
+reach the maximum memory.
+
Note the graph has captions on both sides of the graph. On the left is percent and
+the right is dead/healthy. If the memory line spikes up and down rapidly, it could
+indicate memory thrashing. In those situations, it is a good idea to profile the
+application with Borland OptimizeIt or JProbe. What you want to see is a regular
+pattern for load, memory and threads. Any erratic behavior usually indicates poor
+performance or a bug of some sort.
\ No newline at end of file
diff --git a/docs/usermanual/build-test-plan.html b/docs/usermanual/build-test-plan.html
new file mode 100644
index 00000000000..93aafc89bd7
--- /dev/null
+++ b/docs/usermanual/build-test-plan.html
@@ -0,0 +1,159 @@
+
+Apache JMeter
+ -
+ User's Manual: Building a Test PlanMain content
A test plan describes a series of steps JMeter will execute when run. A complete
+test plan will consist of one or more Thread Groups, logic controllers, sample generating
+controllers, listeners, timers, assertions, and configuration elements.
+
Adding elements to a test plan can be done by right-clicking on an element in the
+tree, and choosing a new element from the "add" list. Alternatively, elements can
+be loaded from file and added by choosing the "merge" or "open" option.
+
+
To remove an element, make sure the element is selected, right-click on the element,
+and choose the "remove" option.
To load an element from file, right click on the existing tree elements to which
+you want to add the loaded element, and select the "merge" option. Choose the file where
+your elements are saved. JMeter will merge the elements into the tree.
+
+
To save tree elements, right click on an element and choose the "Save Selection As ..." option.
+JMeter will save the element selected, plus all child elements beneath it. In this way,
+you can save test tree fragments and individual elements for later use.
+
+
The workbench is not automatically saved with the test plan, but it can be saved separately as above.
Any element in the test tree will present controls in JMeter's right-hand frame. These
+controls allow you to configure the behavior of that particular test element. What can be
+configured for an element depends on what type of element it is.
+
+
The Test Tree itself can be manipulated by dragging and dropping components around the test tree.
Although it is not required, we recommend that you save the Test Plan to a
+file before running it. To save the Test Plan, select "Save" or "Save Test Plan As ..." from the
+File menu (with the latest release, it is no longer necessary to select the
+Test Plan element first).
+
+
JMeter allows you to save the entire Test Plan tree or
+only a portion of it. To save only the elements located in a particular "branch"
+of the Test Plan tree, select the Test Plan element in the tree from which to start
+the "branch", and then click your right mouse button to access the "Save Selection As ..." menu item.
+Alternatively, select the appropriate Test Plan element and then select "Save Selection As ..." from
+the Edit menu.
+
To run your test plan, choose "Start" (Control + r) from the "Run" menu item.
+When JMeter is running, it shows a small green box at the right hand end of the section just under the menu bar.
+You can also check the "Run" menu.
+If "Start" is disabled, and "Stop" is enabled,
+then JMeter is running your test plan (or, at least, it thinks it is).
+
+The numbers to the left of the green box are the number of active threads / total number of threads.
+These only apply to a locally run test; they do not include any threads started on remote systems when using client-server mode.
+
+There are two types of stop command available from the menu:
+
+
Stop (Control + '.') - stops the threads immediately if possible.
+In Versions of JMeter after 2.3.2, many samplers are now Interruptible which means that active samples can be terminated early.
+The stop command will check that all threads have stopped within the default timeout, which is 5000 ms = 5 seconds.
+[This can be changed using the JMeter property jmeterengine.threadstop.wait]
+If the threads have not stopped, then a message is displayed.
+The Stop command can be retried, but if it fails, then it is necessary to exit JMeter to clean up.
+
+
Shutdown (Control + ',')- requests the threads to stop at the end of any current work.
+Will not interrupt any active samples.
+The modal shutdown dialog box will remain active until all threads have stopped.
+
+Versions of JMeter after 2.3.2 allow a Stop to be initiated if Shutdown is taking too long.
+Close the Shutdown dialog box and select Run/Stop, or just press Control + '.'.
+
+
+When running JMeter in non-GUI mode, there is no Menu, and JMeter does not react to keystrokes such as Control + '.'.
+So in versions after 2.3.2, JMeter non-GUI mode will listen for commands on a specific port
+(default 4445, see the JMeter property jmeterengine.nongui.port).
+In versions after 2.4, JMeter supports automatic choice of an alternate port if the default port is being used
+(for example by another JMeter instance). In this case, JMeter will try the next higher port, continuing until
+it reaches the JMeter property jmeterengine.nongui.maxport) which defaults to 4455.
+If maxport is less than or equal to port, port scanning will not take place.
+Note that JMeter 2.4 and earlier did not set up the listener for non-GUI clients, only non-GUI standalone tests;
+this has been fixed.
+
+The chosen port is displayed in the console window.
+
+The commands currently supported are:
+
+
Shutdown - graceful shutdown
+
StopTestNow - immediate shutdown
+
+These commands can be sent by using the shutdown[.cmd|.sh] or stoptest[.cmd|.sh] script
+respectively. The scripts are to be found in the JMeter bin directory.
+The commands will only be accepted if the script is run from the same host.
+
+
+JMeter reports warnings and errors to the jmeter.log file, as well as some information on the test run itself.
+JMeter shows at the right hand end of its window, the number of warnings/errors found in jmeter.log file next to the warning icon.
+Click on the warning icon to show the jmeter.log file at the bottom of JMeter's window.
+Just occasionally there may be some errors that JMeter is unable to trap and log; these will appear on the command console.
+If a test is not behaving as you expect, please check the log file in case any errors have been reported (e.g. perhaps a syntax error in a function call).
+
+
+Sampling errors (e.g. HTTP 404 - file not found) are not normally reported in the log file.
+Instead these are stored as attributes of the sample result.
+The status of a sample result can be seen in the various different Listeners.
+
\ No newline at end of file
diff --git a/docs/usermanual/build-web-test-plan.html b/docs/usermanual/build-web-test-plan.html
new file mode 100644
index 00000000000..2f36bfb5890
--- /dev/null
+++ b/docs/usermanual/build-web-test-plan.html
@@ -0,0 +1,227 @@
+
+Apache JMeter
+ -
+ User's Manual: Building a Web Test PlanMain content
In this section, you will learn how to create a basic
+Test Plan to test a Web site. You will
+create five users that send requests to two pages on the JMeter Web site.
+Also, you will tell the users to run their tests twice. So, the total number of
+requests is (5 users) x (2 requests) x (repeat 2 times) = 20 HTTP requests. To
+construct the Test Plan, you will use the following elements:
+Thread Group,
+HTTP Request,
+HTTP Request Defaults, and
+Graph Results.
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.
+
+
Go ahead and add the ThreadGroup element by first selecting the Test Plan,
+clicking your right mouse button to get the Add menu, and then select
+Add --> ThreadGroup.
+
+
You should now see the Thread Group element under Test Plan. If you do not
+see the element, then "expand" the Test Plan tree by clicking on the
+Test Plan element.
+
+
Next, you need to modify the default properties. Select the Thread Group element
+in the tree, if you have not already selected it. You should now see the Thread
+Group Control Panel in the right section of the JMeter window (see Figure 5.1
+below)
+
+
+Figure 5.1. Thread Group with Default Values
+
+
Start by providing a more descriptive name for our Thread Group. In the name
+field, enter JMeter Users.
+
+
Next, increase the number of users (called threads) to 5.
+
+
In the next field, the Ramp-Up Period, leave the the default value of 1
+seconds. This property tells JMeter how long to delay between starting each
+user. For example, if you enter a Ramp-Up Period of 5 seconds, JMeter will
+finish starting all of your users by the end of the 5 seconds. So, if we have
+5 users and a 5 second Ramp-Up Period, then the delay between starting users
+would be 1 second (5 users / 5 seconds = 1 user per second). If you set the
+value to 0, then JMeter will immediately start all of your users.
+
+
Finally enter a value of 2 in
+the Loop Count field. This property tells JMeter how many times to repeat your
+test. If you enter a loop count value of 1, then JMeter will run your test only
+once. To have JMeter repeatedly run your Test Plan, select the Forever
+checkbox.
+
+
In most applications, you have to manually accept
+changes you make in a Control Panel. However, in JMeter, the Control Panel
+automatically accepts your changes as you make them. If you change the
+name of an element, the tree will be updated with the new text after you
+leave the Control Panel (for example, when selecting another tree element).
+
+
See Figure 5.2 for the completed JMeter Users Thread Group.
Now that we have defined our users, it is time to define the tasks that they
+will be performing. In this section, you will specify the default settings
+for your HTTP requests. And then, in section 5.3, you will add HTTP Request
+elements which use some of the default settings you specified here.
+
+
Begin by selecting the JMeter Users (Thread Group) element. Click your right mouse button
+to get the Add menu, and then select Add --> Config Element --> HTTP Request
+Defaults. Then, select this new element to view its Control Panel (see Figure 5.3).
+
+
+
+Figure 5.3. HTTP Request Defaults
+
+
+Like most JMeter elements, the HTTP Request Defaults Control
+Panel has a name field that you can modify. In this example, leave this field with
+the default value.
+
+
Skip to the next field, which is the Web Server's Server Name/IP. For the
+Test Plan that you are building, all HTTP requests will be sent to the same
+Web server, jmeter.apache.org. Enter this domain name into the field.
+This is the only field that we will specify a default, so leave the remaining
+fields with their default values.
+
+
The HTTP Request Defaults element does not tell JMeter
+to send an HTTP request. It simply defines the default values that the
+HTTP Request elements use.
+
+
See Figure 5.4 for the completed HTTP Request Defaults element
+
+
+Figure 5.4. HTTP Defaults for our Test Plan
+
+
Nearly all web testing should use cookie support, unless your application
+specifically doesn't use cookies. To add cookie support, simply add an
+HTTP Cookie Manager to each Thread
+Group in your test plan. This will ensure that each thread gets its own
+cookies, but shared across all HTTP Request objects.
+
+
To add the HTTP Cookie Manager, simply select the
+Thread Group, and choose Add -->
+Config Element --> HTTP
+Cookie Manager, either from the Edit Menu, or from the right-click pop-up menu.
In our Test Plan, we need to make two HTTP requests. The first one is for the
+JMeter home page (http://jmeter.apache.org/), and the second one is for the
+Changes page (http://jmeter.apache.org/changes.html).
+
+
JMeter sends requests in the order that they appear in the tree.
+
+
Start by adding the first HTTP Request
+to the JMeter Users element (Add --> Sampler --> HTTP Request).
+Then, select the HTTP Request element in the tree and edit the following properties
+(see Figure 5.5):
+
+
Change the Name field to "Home Page".
+
Set the Path field to "/". Remember that you do not have to set the Server
+Name field because you already specified this value in the HTTP Request Defaults
+element.
+
+
+
+
+Figure 5.5. HTTP Request for JMeter Home Page
+
+
Next, add the second HTTP Request and edit the following properties (see
+Figure 5.6:
+
5.5 Adding a Listener to View Store the Test Results¶
+
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 HTTP requests in a file and presenting
+a visual model of the data.
+
+
Select the JMeter Users element and add a Graph Results listener (Add --> Listener
+--> Graph Results). Next, you need to specify a directory and filename of the
+output file. You can either type it into the filename field, or select the
+Browse button and browse to a directory and then enter a filename.
+It's not the case here, but some web-sites require you to login before permitting you to perform certain actions.
+In a web-browser, the login will be shown as a form for the user name and password,
+and a button to submit the form.
+The button generates a POST request, passing the values of the form items as parameters.
+
+
+To do this in JMeter, add an HTTP Request, and set the method to POST.
+You'll need to know the names of the fields used by the form, and the target page.
+These can be found out by inspecting the code of the login page.
+[If this is difficult to do, you can use the JMeter Proxy Recorder to record the login sequence.]
+Set the path to the target of the submit button.
+Click the Add button twice and enter the username and password details.
+Sometimes the login form contains additional hidden fields.
+These will need to be added as well.
+
\ No newline at end of file
diff --git a/docs/usermanual/build-ws-test-plan.html b/docs/usermanual/build-ws-test-plan.html
new file mode 100644
index 00000000000..d58e9b7b6fb
--- /dev/null
+++ b/docs/usermanual/build-ws-test-plan.html
@@ -0,0 +1,161 @@
+
+Apache JMeter
+ -
+ User's Manual: Building a SOAP WebService Test PlanMain content
In this section, you will learn how to create a
+Test Plan to test a WebService. You will
+create five users that send requests to One page.
+Also, you will tell the users to run their tests twice. So, the total number of
+requests is (5 users) x (1 requests) x (repeat 2 times) = 10 HTTP requests. To
+construct the Test Plan, you will use the following elements:
+Thread Group,
+HTTP Request, and
+Aggregate Graph.
+
+
If the sampler appears to be getting an error from the webservice, double check the
+SOAP message and make sure the format is correct. In particular, make sure the
+xmlns attributes are exactly the same as the WSDL. If the xml namespace is
+different, the webservice will likely return an error.
In our Test Plan, we will use a .NET webservice. We won't go into the details of writing a
+webservice. If you don't know how to write a webservice, google for
+webservice and familiarize yourself with writing webservices for
+Java and .NET. It should be noted there is a significant difference
+between how .NET and Java implement webservices. The topic is too
+broad to cover in the user manual. Please refer to other sources to
+get a better idea of the differences.
+
+
JMeter sends requests in the order that they appear in the tree.
+
+
Start by using menu File > "Templates..." and select template "Building a SOAP Webservice Test Plan".
+Then, click "Create" button.
+
+
+Figure 10.1.0. Webservice Template
+Change the following:
+
+
In "HTTP Request Defaults" change "Server Name of IP"
+
In "Soap Request", change "Path:"
+Figure 10.1.1 Webservice Path
+
+
+
+
+
Next, select "HTTP Header Manager" and update "SOAPAction" header to match your webservice.
+Some webservices may not use SOAPAction in this case remove it.
+Currently, only .NET uses SOAPAction, so it is normal to have a blank SOAPAction for all other webservices. The list includes JWSDP, Weblogic, Axis, The Mind Electric Glue, and gSoap.
+
+Figure 10.1.2 Webservice Headers
+
+
The last step is to paste the SOAP message in the "Body Data"
+text area.
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.
+
+
Select the Thread Group element
+in the tree, if you have not already selected it. You should now see the Thread
+Group Control Panel in the right section of the JMeter window (see Figure 10.2
+below)
+
+
+Figure 10.2. Thread Group with Default Values
+
+
Start by providing a more descriptive name for our Thread Group. In the name
+field, enter JMeter Users.
+
+
Next, increase the number of users (called threads) to 10.
+
+
In the next field, the Ramp-Up Period, leave the the default value of 0
+seconds. This property tells JMeter how long to delay between starting each
+user. For example, if you enter a Ramp-Up Period of 5 seconds, JMeter will
+finish starting all of your users by the end of the 5 seconds. So, if we have
+5 users and a 5 second Ramp-Up Period, then the delay between starting users
+would be 1 second (5 users / 5 seconds = 1 user per second). If you set the
+value to 0, then JMeter will immediately start all of your users.
+
+
Finally, clear the checkbox labeled "Forever", and enter a value of 2 in
+the Loop Count field. This property tells JMeter how many times to repeat your
+test. If you enter a loop count value of 0, then JMeter will run your test only
+once. To have JMeter repeatedly run your Test Plan, select the Forever
+checkbox.
+
+
In most applications, you have to manually accept
+changes you make in a Control Panel. However, in JMeter, the Control Panel
+automatically accepts your changes as you make them. If you change the
+name of an element, the tree will be updated with the new text after you
+leave the Control Panel (for example, when selecting another tree element).
+
+
See Figure 10.2 for the completed JMeter Users Thread Group.
+
+
+Figure 10.3. JMeter Users Thread Group
+
10.3 Adding a Listener to View Store the Test Results¶
+
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 HTTP requests in a file and presenting
+a visual model of the data.
+
+
Select the JMeter Users element and add a Aggregate Graph listener (Add --> Listener
+--> Aggregate Graph). Next, you need to specify a directory and filename of the
+output file. You can either type it into the filename field, or select the
+Browse button and browse to a directory and then enter a filename.
+ Several test elements use JMeter properties to control their behaviour.
+ These properties are normally resolved when the class is loaded.
+ This generally occurs before the test plan starts, so it's not possible to change the settings by using the __setProperty() function.
+
+ Samplers perform the actual work of JMeter.
+ Each sampler (except Test Action) generates one or more sample results.
+ The sample results have various attributes (success/fail, elapsed time, data size etc) and can be viewed in the various listeners.
+
+This controller lets you send an FTP "retrieve file" or "upload file" request to an FTP server.
+If you are going to send multiple requests to the same FTP server, consider
+using a FTP Request Defaults Configuration
+Element so you do not have to enter the same information for each FTP Request Generative
+Controller. When downloading a file, it can be stored on disk (Local File) or in the Response Data, or both.
+
+Latency is set to the time it takes to login (versions of JMeter after 2.3.1).
+
This sampler lets you send an HTTP/HTTPS request to a web server. It
+ also lets you control whether or not JMeter parses HTML files for images and
+ other embedded resources and sends HTTP requests to retrieve them.
+ The following types of embedded resource are retrieved:
+
+
images
+
applets
+
stylesheets
+
external scripts
+
frames, iframes
+
background images (body, table, TD, TR)
+
background sound
+
+
+ The default parser is htmlparser.
+ This can be changed by using the property "htmlparser.classname" - see jmeter.properties for details.
+
+
If you are going to send multiple requests to the same web server, consider
+ using an HTTP Request Defaults
+ Configuration Element so you do not have to enter the same information for each
+ HTTP Request.
+
+
Or, instead of manually adding HTTP Requests, you may want to use
+ JMeter's HTTP(S) Test Script Recorder to create
+ them. This can save you time if you have a lot of HTTP requests or requests with many
+ parameters.
+
+
There are two different test elements used to define the samplers:
+
+
AJP/1.3 Sampler - uses the Tomcat mod_jk protocol (allows testing of Tomcat in AJP mode without needing Apache httpd)
+ The AJP Sampler does not support multiple file upload; only the first file will be used.
+
+
HTTP Request - this has an implementation drop-down box, which selects the HTTP protocol implementation to be used:
+
+
Java - uses the HTTP implementation provided by the JVM.
+ This has some limitations in comparison with the HttpClient implementations - see below.
+
HTTPClient3.1 - uses Apache Commons HttpClient 3.1.
+ This is no longer being developed, and support for this may be dropped in a future JMeter release.
Blank Value - does not set implementation on HTTP Samplers, so relies on HTTP Request Defaults if present or on jmeter.httpsampler property defined in jmeter.properties
+
+
+
+
The Java HTTP implementation has some limitations:
+
+
There is no control over how connections are re-used.
+ When a connection is released by JMeter, it may or may not be re-used by the same thread.
+
The API is best suited to single-threaded usage - various settings
+ are defined via system properties, and therefore apply to all connections.
+
There is a bug in the handling of HTTPS via a Proxy (the CONNECT is not handled correctly).
+ See Java bugs 6226610 and 6208335.
+
+
It does not support virtual hosts.
+
It does not support the following methods: COPY, LOCK, MKCOL, MOVE, PATCH, PROPFIND, PROPPATCH, UNLOCK, REPORT, MKCALENDAR.
+
It does not support client based certificate testing with Keystore Config.
+
+
Note: the FILE protocol is intended for testing purposes only.
+ It is handled by the same code regardless of which HTTP Sampler is used.
+
If the request requires server or proxy login authorization (i.e. where a browser would create a pop-up dialog box),
+ you will also have to add an HTTP Authorization Manager Configuration Element.
+ For normal logins (i.e. where the user enters login information in a form), you will need to work out what the form submit button does,
+ and create an HTTP request with the appropriate method (usually POST)
+ and the appropriate parameters from the form definition.
+ If the page uses HTTP, you can use the JMeter Proxy to capture the login sequence.
+
+
+ In versions of JMeter up to 2.2, only a single SSL context was used for all threads and samplers.
+ This did not generate the proper load for multiple users.
+ A separate SSL context is now used for each thread.
+ To revert to the original behaviour, set the JMeter property:
+
+https.sessioncontext.shared=true
+
+ By default, the SSL context is retained for the duration of the test.
+ In versions of JMeter from 2.5.1, the SSL session can be optionally reset for each test iteration.
+ To enable this, set the JMeter property:
+
+https.use.cached.ssl.context=false
+
+ Note: this does not apply to the Java HTTP implementation.
+
+
+ JMeter defaults to the SSL protocol level TLS.
+ If the server needs a different level, e.g. SSLv3, change the JMeter property, for example:
+
+https.default.protocol=SSLv3
+
+
+
+ JMeter also allows one to enable additional protocols, by changing the property https.socket.protocols.
+
+
If the request uses cookies, then you will also need an
+ HTTP Cookie Manager. You can
+ add either of these elements to the Thread Group or the HTTP Request. If you have
+ more than one HTTP Request that needs authorizations or cookies, then add the
+ elements to the Thread Group. That way, all HTTP Request controllers will share the
+ same Authorization Manager and Cookie Manager elements.
+
+
If the request uses a technique called "URL Rewriting" to maintain sessions,
+ then see section
+ 6.1 Handling User Sessions With URL Rewriting
+ for additional configuration steps.
Descriptive name for this sampler that is shown in the tree.
No
+
Server
+ Domain name or IP address of the web server. e.g. www.example.com. [Do not include the http:// prefix.]
+ Note: in JMeter 2.5 (and later) if the "Host" header is defined in a Header Manager, then this will be used
+ as the virtual host name.
+
Yes, unless provided by HTTP Request Defaults
+
Port
Port the web server is listening to. Default: 80
No
+
Connect Timeout
Connection Timeout. Number of milliseconds to wait for a connection to open.
No
+
Response Timeout
Response Timeout. Number of milliseconds to wait for a response.
+ Note that this applies to each wait for a response. If the server response is sent in several chunks, the overall
+ elapsed time may be longer than the timeout.
+ A Duration Assertion can be used to detect responses that take too long to complete.
+
No
+
Server (proxy)
Hostname or IP address of a proxy server to perform request. [Do not include the http:// prefix.]
No
+
Port
Port the proxy server is listening to.
No, unless proxy hostname is specified
+
Username
(Optional) username for proxy server.
No
+
Password
(Optional) password for proxy server. (N.B. this is stored unencrypted in the test plan)
No
+
Implementation
Java, HttpClient3.1, HttpClient4.
+ If not specified (and not defined by HTTP Request Defaults), the default depends on the value of the JMeter property
+ jmeter.httpsampler, failing that, the HttpClient4 implementation is used.
No
+
Protocol
HTTP, HTTPS or FILE. Default: HTTP
No
+
Method
GET, POST, HEAD, TRACE, OPTIONS, PUT, DELETE, PATCH (not supported for
+ JAVA implementation). With HttpClient4, the following methods related to WebDav are also allowed: COPY, LOCK, MKCOL, MOVE,
+ PROPFIND, PROPPATCH, UNLOCK, REPORT, MKCALENDAR.
Yes
+
Content Encoding
+ Content encoding to be used (for POST, PUT, PATCH and FILE).
+ This the the character encoding to be used, and is not related to the Content-Encoding HTTP header.
+
No
+
Redirect Automatically
+ Sets the underlying http protocol handler to automatically follow redirects,
+ so they are not seen by JMeter, and thus will not appear as samples.
+ Should only be used for GET and HEAD requests.
+ The HttpClient sampler will reject attempts to use it for POST or PUT.
+ Warning: see below for information on cookie and header handling.
+
No
+
Follow Redirects
+ This only has any effect if "Redirect Automatically" is not enabled.
+ If set, the JMeter sampler will check if the response is a redirect and follow it if so.
+ The initial redirect and further responses will appear as additional samples.
+ The URL and data fields of the parent sample will be taken from the final (non-redirected)
+ sample, but the parent byte count and elapsed time include all samples.
+ The latency is taken from the initial response (versions of JMeter after 2.3.4 - previously it was zero).
+ Note that the HttpClient sampler may log the following message:
+ "Redirect requested but followRedirects is disabled"
+ This can be ignored.
+
+ In versions after 2.3.4, JMeter will collapse paths of the form '/../segment' in
+ both absolute and relative redirect URLs. For example http://host/one/../two => http://host/two.
+ If necessary, this behaviour can be suppressed by setting the JMeter property
+ httpsampler.redirect.removeslashdotdot=false
+
No
+
Use KeepAlive
JMeter sets the Connection: keep-alive header. This does not work properly with the default HTTP implementation, as connection re-use is not under user-control.
+ It does work with the Apache HttpComponents HttpClient implementations.
No
+
Use multipart/form-data for HTTP POST
+ Use a multipart/form-data or application/x-www-form-urlencoded post request
+
No
+
Browser-compatible headers
+ When using multipart/form-data, this suppresses the Content-Type and
+ Content-Transfer-Encoding headers; only the Content-Disposition header is sent.
+
No
+
Path
The path to resource (for example, /servlets/myServlet). If the
+resource requires query string parameters, add them below in the
+"Send Parameters With the Request" section.
+
+As a special case, if the path starts with "http://" or "https://" then this is used as the full URL.
+
+In this case, the server, port and protocol fields are ignored; parameters are also ignored for GET and DELETE methods.
+Also please note that the path is not encoded - apart from replacing spaces with %20 -
+so unsafe characters may need to be encoded to avoid errors such as URISyntaxException.
+
Yes
+
Send Parameters With the Request
The query string will
+ be generated from the list of parameters you provide. Each parameter has a name and
+ value, 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 or DELETE, the query string will be
+ appended to the URL, if POST or PUT, 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
+ multipart form specifications.
+ See below for some further information on parameter handling.
+
+ Additionally, you can specify whether each parameter should be URL encoded. If you are not sure what this
+ means, it is probably best to select it. If your values contain characters such as the following then encoding is usually required.:
+
+
ASCII Control Chars
+
Non-ASCII characters
+
Reserved characters:URLs use some characters for special use in defining their syntax. When these characters are not used in their special role inside a URL, they need to be encoded, example : '$', '&', '+', ',' , '/', ':', ';', '=', '?', '@'
+
Unsafe characters: Some characters present the possibility of being misunderstood within URLs for various reasons. These characters should also always be encoded, example : ' ', '<', '>', '#', '%', ...
+
+
+
No
+
File Path:
Name of the file to send. If left blank, JMeter
+ does not send a file, if filled in, JMeter automatically sends the request as
+ a multipart form request.
+
+ If it is a POST or PUT or PATCH request and there is a single file whose 'Parameter name' attribute (below) is omitted,
+ then the file is sent as the entire body
+ of the request, i.e. no wrappers are added. This allows arbitrary bodies to be sent. This functionality is present for POST requests
+ after version 2.2, and also for PUT requests after version 2.3.
+ See below for some further information on parameter handling.
+
+
No
+
Parameter name:
Value of the "name" web request parameter.
No
+
MIME Type
MIME type (for example, text/plain).
+ If it is a POST or PUT or PATCH request and either the 'name' attribute (below) are omitted or the request body is
+ constructed from parameter values only, then the value of this field is used as the value of the
+ content-type request header.
+
No
+
Retrieve All Embedded Resources from HTML Files
Tell JMeter to parse the HTML file
+and send HTTP/HTTPS requests for all images, Java applets, JavaScript files, CSSs, etc. referenced in the file.
+ See below for more details.
+
+ If this is selected, then the response is not stored in the sample result.
+ Instead, the 32 character MD5 hash of the data is calculated and stored instead.
+ This is intended for testing large amounts of data.
+
No
+
Embedded URLs must match:
+ If present, this must be a regular expression that is used to match against any embedded URLs found.
+ So if you only want to download embedded resources from http://example.com/, use the expression:
+ http://example\.com/.*
+
No
+
Use concurrent pool
Use a pool of concurrent connections to get embedded resources.
No
+
Size
Pool size for concurrent connections used to get embedded resources.
No
+
Source address type
+ [Only for HTTP Request with HTTPClient implementation]
+ To distinguish the source address value, select the type of these:
+
+
Select IP/Hostname to use a specific IP address or a (local) hostname
+
Select Device to pick the first available address for that interface which
+ this may be either IPv4 or IPv6
+
Select Device IPv4To select the IPv4 address of the device name (like eth0, lo, em0, etc.)
+
Select Device IPv6To select the IPv6 address of the device name (like eth0, lo, em0, etc.)
+
+
No
+
Source address field
+ [Only for HTTP Request with HTTPClient implementation]
+ This property is used to enable IP Spoofing.
+ It override the default local IP address for this sample.
+ The JMeter host must have multiple IP addresses (i.e. IP aliases, network interfaces, devices).
+ The value can be a host name, IP address, or a network interface device such as "eth0" or "lo" or "wlan0".
+ If the property httpclient.localaddress is defined, that is used for all HttpClient requests.
+
No
+
+
+N.B. when using Automatic Redirection, cookies are only sent for the initial URL.
+This can cause unexpected behaviour for web-sites that redirect to a local server.
+E.g. if www.example.com redirects to www.example.co.uk.
+In this case the server will probably return cookies for both URLs, but JMeter will only see the cookies for the last
+host, i.e. www.example.co.uk. If the next request in the test plan uses www.example.com,
+rather than www.example.co.uk, it will not get the correct cookies.
+Likewise, Headers are sent for the initial request, and won't be sent for the redirect.
+This is generally only a problem for manually created test plans,
+as a test plan created using a recorder would continue from the redirected URL.
+
+
+Parameter Handling:
+For the POST and PUT method, if there is no file to send, and the name(s) of the parameter(s) are omitted,
+then the body is created by concatenating all the value(s) of the parameters.
+Note that the values are concatenated without adding any end-of-line characters.
+These can be added by using the __char() function in the value fields.
+This allows arbitrary bodies to be sent.
+The values are encoded if the encoding flag is set (versions of JMeter after 2.3).
+See also the MIME Type above how you can control the content-type request header that is sent.
+
+For other methods, if the name of the parameter is missing,
+then the parameter is ignored. This allows the use of optional parameters defined by variables.
+(versions of JMeter after 2.3)
+
+
+
Since JMeter 2.6, you have the option to switch to Post Body when a request has only unnamed parameters
+(or no parameters at all).
+This option is useful in the following cases (amongst others):
+
+
GWT RPC HTTP Request
+
JSON REST HTTP Request
+
XML REST HTTP Request
+
SOAP HTTP Request
+
+Note that once you leave the Tree node, you cannot switch back to the parameter tab unless you clear the Post Body tab of data.
+
+
+In Post Body mode, each line will be sent with CRLF appended, apart from the last line.
+To send a CRLF after the last line of data, just ensure that there is an empty line following it.
+(This cannot be seen, except by noting whether the cursor can be placed on the subsequent line.)
+
+Figure 1 - HTTP Request with one unnamed parameter
+Figure 2 - Confirm dialog to switch
+Figure 3 - HTTP Request using Body Data
+
+
+Method Handling:
+The POST, PUT and PATCH request methods work similarly, except that the PUT and PATCH methods do not support multipart requests
+or file upload.
+The PUT and PATCH method body must be provided as one of the following:
+
+
define the body as a file with empty Parameter name field; in which case the MIME Type is used as the Content-Type
+
define the body as parameter value(s) with no name
+
use the Post Body tab
+
+If you define any parameters with a name in either the sampler or Http
+defaults then nothing is sent.
+PUT and PATCH require a Content-Type.
+If not using a file, attach a Header Manager to the sampler and define the Content-Type there.
+The GET and DELETE request methods work similarly to each other.
+
+
Upto and including JMeter 2.1.1, only responses with the content-type "text/html" were scanned for
+embedded resources. Other content-types were assumed to be something other than HTML.
+JMeter 2.1.2 introduces the a new property HTTPResponse.parsers, which is a list of parser ids,
+ e.g. htmlParser and wmlParser. For each id found, JMeter checks two further properties:
+
+
id.types - a list of content types
+
id.className - the parser to be used to extract the embedded resources
+
+
See jmeter.properties file for the details of the settings.
+ If the HTTPResponse.parser property is not set, JMeter reverts to the previous behaviour,
+ i.e. only text/html responses will be scanned
+Emulating slow connections:
+HttpClient31, HttpClient4 and Java Sampler support emulation of slow connections; see the following entries in jmeter.properties:
+
+# Define characters per second > 0 to emulate slow connections
+#httpclient.socket.http.cps=0
+#httpclient.socket.https.cps=0
+
+
Response size calculation
+Optional properties to allow change the method to get response size:
+
Gets the real network size in bytes for the body response
+
sampleresult.getbytes.body_real_size=true
+
Add HTTP headers to full response size
+
sampleresult.getbytes.headers_size=true
+
+
+The Java and HttpClient3 inplementations do not include transport overhead such as
+chunk headers in the response body size.
+The HttpClient4 implementation does include the overhead in the response body size,
+so the value may be greater than the number of bytes in the response content.
+
+
+
Versions of JMeter before 2.5 returns only data response size (uncompressed if request uses gzip/defate mode).
+ To return to settings before version 2.5, set the two properties to false.
+
+
+Retry handling
+In version 2.5 of JMeter, the HttpClient4 and Commons HttpClient 3.1 samplers used the default retry count, which was 3.
+In later versions, the retry count has been set to 1, which is what the Java implementation appears to do.
+The retry count can be overridden by setting the relevant JMeter property, for example:
+
+Note: Certificates does not conform to algorithm constraints
+You may encounter the following error: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
+ if you run a HTTPS request on a web site with a SSL certificate (itself or one of SSL certificates in its chain of trust) with a signature
+ algorithm using MD2 (like md2WithRSAEncryption) or with a SSL certificate with a size lower than 1024 bits.
+
+This error is related to increased security in Java 7 version u16 (MD2) and version u40 (Certificate size lower than 1024 bits), and Java 8 too.
+
+To allow you to perform your HTTPS request, you can downgrade the security of your Java installation by editing
+the Java jdk.certpath.disabledAlgorithms property. Remove the MD2 value or the constraint on size, depending on your case.
+
+If the Variable Names list is provided, then for each row returned by a Select statement, the variables are set up
+with the value of the corresponding column (if a variable name is provided), and the count of rows is also set up.
+For example, if the Select statement returns 2 rows of 3 columns, and the variable list is A,,C,
+then the following variables will be set up:
+
+If the Select statement returns zero rows, then the A_# and C_# variables would be set to 0, and no other variables would be set.
+
+
+Old variables are cleared if necessary - e.g. if the first select retrieves 6 rows and a second select returns only 3 rows,
+the additional variables for rows 4, 5 and 6 will be removed.
+
+
+Note: The latency time is set from the time it took to acquire a connection.
+
Descriptive name for this sampler that is shown in the tree.
No
+
Variable Name
+ Name of the JMeter variable that the connection pool is bound to.
+ This must agree with the 'Variable Name' field of a JDBC Connection Configuration.
+
Yes
+
Query Type
Set this according to the statement type:
+
+
Select Statement
+
Update Statement - use this for Inserts and Deletes as well
+
Callable Statement
+
Prepared Select Statement
+
Prepared Update Statement - use this for Inserts and Deletes as well
+
Commit
+
Rollback
+
Autocommit(false)
+
Autocommit(true)
+
Edit - this should be a variable reference that evaluates to one of the above
+
+
+ When "Prepared Select Statement", "Prepared Update Statement" or "Callable Statement" types are selected, a Statement Cache per connection is used by JDBC Request.
+ It stores by default up to 100 PreparedStatements per connection, this can impact your database (Open Cursors).
+
+
Yes
+
SQL Query
+ SQL query.
+ Do not enter a trailing semi-colon.
+ There is generally no need to use { and } to enclose Callable statements;
+ however they mey be used if the database uses a non-standard syntax.
+ [The JDBC driver automatically converts the statement if necessary when it is enclosed in {}].
+ For example:
+
+ The second example assumes you are using Apache Derby.
+
+
Yes
+
Parameter values
+ Comma-separated list of parameter values. Use ]NULL[ to indicate a NULL parameter.
+ (If required, the null string can be changed by defining the property "jdbcsampler.nullmarker".)
+
+ The list must be enclosed in double-quotes if any of the values contain a comma or double-quote,
+ and any embedded double-quotes must be doubled-up, for example:
+
"Dbl-Quote: "" and Comma: ,"
+
There must be as many values as there are placeholders in the statement even if your parameters are OUT ones, be sure to set a value even if the value will not be used (for example in a CallableStatement).
+
Yes, if a prepared or callable statement has parameters
+
Parameter types
+ Comma-separated list of SQL parameter types (e.g. INTEGER, DATE, VARCHAR, DOUBLE) or integer values of Constants when for example you use custom database types proposed by driver (-10 for OracleTypes.CURSOR for example).
+ These are defined as fields in the class java.sql.Types, see for example:
+ Javadoc for java.sql.Types.
+ [Note: JMeter will use whatever types are defined by the runtime JVM,
+ so if you are running on a different JVM, be sure to check the appropriate document]
+ If the callable statement has INOUT or OUT parameters, then these must be indicated by prefixing the
+ appropriate parameter types, e.g. instead of "INTEGER", use "INOUT INTEGER".
+ If not specified, "IN" is assumed, i.e. "DATE" is the same as "IN DATE".
+
+ If the type is not one of the fields found in java.sql.Types, versions of JMeter after 2.3.2 also
+ accept the corresponding integer number, e.g. since OracleTypes.CURSOR == -10, you can use "INOUT -10".
+
+ There must be as many types as there are placeholders in the statement.
+
Yes, if a prepared or callable statement has parameters
+
Variable Names
Comma-separated list of variable names to hold values returned by Select statements, Prepared Select Statements or CallableStatement.
+ Note that when used with CallableStatement, list of variables must be in the same sequence as the OUT parameters returned by the call.
+ If there are less variable names than OUT parameters only as many results shall be stored in the thread-context variables as variable names were supplied.
+ If more variable names than OUT parameters exist, the additional variables will be ignored
No
+
Result Variable Name
+ If specified, this will create an Object variable containing a list of row maps.
+ Each map contains the column name as the key and the column data as the value. Usage:
+ columnValue = vars.getObject("resultObject").get(0).get("Column Name");
+
No
+
Handle ResultSet
Defines how ResultSet returned from callable statements be handled:
+
+
Store As String (default) - All variables on Variable Names list are stored as strings, will not iterate through a ResultSets when present on the list.
+
Store As Object - Variables of ResultSet type on Variables Names list will be stored as Object and can be accessed in subsequent tests/scripts and iterated, will not iterate through the ResultSet
+
Count Records - Variables of ResultSet types will be iterated through showing the count of records as result. Variables will be stored as Strings.
This sampler lets you control a java class that implements the
+org.apache.jmeter.protocol.java.sampler.JavaSamplerClient interface.
+By writing your own implementation of this interface,
+you can use JMeter to harness multiple threads, input parameter control, and
+data collection.
+
The pull-down menu provides the list of all such implementations found by
+JMeter in its classpath. The parameters can then be specified in the
+table below - as defined by your implementation. Two simple examples (JavaTest and SleepTest) are provided.
+
+
+The JavaTest example sampler can be useful for checking test plans, because it allows one to set
+values in almost all the fields. These can then be used by Assertions, etc.
+The fields allow variables to be used, so the values of these can readily be seen.
+
+
+
+
Since JMeter 2.8, if the method teardownTest is not overriden by a subclass of AbstractJavaSamplerClient, its teardownTest method will not be called.
+This reduces JMeter memory requirements.
+This will not have any impact on existing Test plans.
+
+
The Add/Delete buttons don't serve any purpose at present.
If provided, sets the SampleResult ResponseMessage.
No
+
Status
If provided, sets the SampleResult Status. If this equals "OK" (ignoring case) then the status is set to success, otherwise the sample is marked as failed.
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.
+To change the "Content-type" from the default of "text/xml", use a HeaderManager.
+Note that the sampler will use all the headers from the HeaderManager.
+If a SOAP action is specified, that will override any SOAPaction in the HeaderManager.
+The primary difference between the soap sampler and
+webservice sampler, is the soap sampler uses raw post and does not require conformance to
+SOAP 1.1.
+
For versions of JMeter later than 2.2, the sampler no longer uses chunked encoding by default.
+For screen input, it now always uses the size of the data.
+File input uses the file length as determined by Java.
+On some OSes this may not work for all files, in which case add a child Header Manager
+with Content-Length set to the actual length of the file.
+Or set Content-Length to -1 to force chunked encoding.
+
+ *** This element is deprecated. Use
+ HTTP_Request
+ instead ***
+
+
This sampler has been tested with IIS Webservice running .NET 1.0 and .NET 1.1.
+ It has been tested with SUN JWSDP, IBM webservices, Axis and gSoap toolkit for C/C++.
+ 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 does not provide support for it. Both IBM
+ and SUN provide WSDL drivers. There are 3 options for the post data: text area,
+ external file, or directory. If you want the sampler to randomly select a message,
+ use the directory. Otherwise, use the text area or a file. The if either the
+ file or path are set, it will not use the message in the text area. If you need
+ to test a soap service that uses different encoding, use the file or path. If you
+ paste the message in to text area, it will not retain the encoding and will result
+ in errors. Save your message to a file with the proper encoding, and the sampler
+ will read it as java.io.FileInputStream.
+
An important note on the sampler is it will automatically use the proxy host
+ and port passed to JMeter from command line, if those fields in the sampler are
+ left blank. If a sampler has values in the proxy host and port text field, it
+ will use the ones provided by the user. This behavior may not be what users
+ expect.
+
By default, the webservice sampler sets SOAPHTTPConnection.setMaintainSession
+ (true). If you need to maintain the session, add a blank Header Manager. The
+ sampler uses the Header Manager to store the SOAPHTTPConnection object, since
+ the version of apache soap does not provide a easy way to get and set the cookies.
+
Note: If you are using CSVDataSet, do not check "Memory Cache". If memory
+ cache is checked, it will not iterate to the next value. That means all the requests
+ will use the first value.
+
Make sure you use <soap:Envelope rather than <Envelope. For example:
The SOAP library that is used does not support SOAP 1.2, only SOAP 1.1.
+Also the library does not provide access to the HTTP response code (e.g. 200) or message (e.g. OK).
+To get round this, versions of JMeter after 2.3.2 check the returned message length.
+If this is zero, then the request is marked as failed.
+
Descriptive name for this sampler
+ that is shown in the tree.
No
+
WSDL URL
The WSDL URL with the service description.
+ Versions of JMeter after 2.3.1 support the file: protocol for local WSDL files.
+
No
+
Web Methods
Will be populated from the WSDL when the Load WSDL button is pressed.
+ Select one of the methods and press the Configure button to populate the Protocol, Server, Port, Path and SOAPAction fields.
+
No
+
Protocol
HTTP or HTTPS are acceptable protocol.
Yes
+
Server Name or IP
The hostname or IP address.
Yes
+
Port Number
Port Number.
Yes
+
Timeout
Connection timeout.
No
+
Path
Path for the webservice.
Yes
+
SOAPAction
The SOAPAction defined in the webservice description or WSDL.
Yes
+
Soap/XML-RPC Data
The Soap XML message
Yes
+
Soap file
File containing soap message
No
+
Message(s) Folder
Folder containing soap files. Files are choose randomly during test.
No
+
Memory cache
+ When using external files, setting this causes the file to be processed once and caches the result.
+ This may use a lot of memory if there are many different large files.
+
Yes
+
Read SOAP Response
Read the SOAP reponse (consumes performance). Permit to have assertions or post-processors
No
+
Use HTTP Proxy
Check box if http proxy should be used
No
+
Server Name or IP
Proxy hostname
No
+
Port Number
Proxy host port
No
+
+
+
+Webservice Soap Sampler assumes that empty response means failure.
+
This Sampler lets you send a different Ldap request(Add, Modify, Delete and Search) to an LDAP server.
+
If you are going to send multiple requests to the same LDAP server, consider
+ using an LDAP Request Defaults
+ Configuration Element so you do not have to enter the same information for each
+ LDAP Request.
There are two ways to create test cases for testing an LDAP Server.
+
Inbuilt Test cases.
+
User defined Test cases.
+
+
There are four test scenarios of testing LDAP. The tests are given below:
+
+
Add Test
+
Inbuilt test :
+
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.
+
User defined test :
+
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.
+
+
Modify Test
+
Inbuilt test :
+
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.
+
User defined test
+
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.
+
+
Search Test
+
Inbuilt test :
+
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.
+
User defined test
+
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.
+
+
Delete Test
+
Inbuilt test :
+
This will create a pre-defined entry first, then it will be deleted
+ from the LDAP Server. The execution time is calculated.
+
+
User defined test
+
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.
Descriptive name for this sampler that is shown in the tree.
No
+
Server Name or IP
Domain name or IP address of the LDAP server.
+ JMeter assumes the LDAP server is listening on the default port(389).
Yes
+
Port
default port(389).
Yes
+
root DN
DN for the server to communicate
Yes
+
Username
LDAP server username.
Usually
+
Password
LDAP server password. (N.B. this is stored unencrypted in the test plan)
Usually
+
Entry DN
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
+
Yes
+
Delete
the name of the context to Delete; may not be empty
Yes
+
Search base
the name of the context or object to search
Yes
+
Search filter
the filter expression to use for the search; may not be null
Yes
+
add test
this name, value pair to added in the given context object
Yes
+
modify test
this name, value pair to add or modify in the given context object
This Sampler can send all 8 different LDAP request to an LDAP server. It is an extended version of the LDAP sampler,
+ therefore it is harder to configure, but can be made much closer resembling a real LDAP session.
+
If you are going to send multiple requests to the same LDAP server, consider
+ using an LDAP Extended Request Defaults
+ Configuration Element so you do not have to enter the same information for each
+ LDAP Request.
+
+
There are nine test operations defined. These operations are given below:
+
+
Thread bind
+
Any LDAP request is part of an LDAP session, so the first thing that should be done is starting a session to the LDAP server.
+ For starting this session a thread bind is used, which is equal to the LDAP "bind" operation.
+ The user is requested to give a username (Distinguished name) and password,
+ which will be used to initiate a session.
+ When no password, or the wrong password is specified, an anonymous session is started. Take care,
+ omitting the password will not fail this test, a wrong password will.
+ (N.B. this is stored unencrypted in the test plan)
+
+ Parameters
+
Attribute
Description
Required
+
Name
Descriptive name for this sampler that is shown in the tree.
No
+
Servername
The name (or IP-address) of the LDAP server.
Yes
+
Port
The port number that the LDAP server is listening to. If this is omitted
+ JMeter assumes the LDAP server is listening on the default port(389).
No
+
DN
The distinguished name of the base object that will be used for any subsequent operation.
+ It can be used as a starting point for all operations. You cannot start any operation on a higher level than this DN!
No
+
Username
Full distinguished name of the user as which you want to bind.
No
+
Password
Password for the above user. If omitted it will result in an anonymous bind.
+ If is is incorrect, the sampler will return an error and revert to an anonymous bind. (N.B. this is stored unencrypted in the test plan)
No
+
+
+
Thread unbind
+
This is simply the operation to end a session.
+ It is equal to the LDAP "unbind" operation.
+
+ Parameters
+
Attribute
Description
Required
+
Name
Descriptive name for this sampler that is shown in the tree.
No
+
+
+
+
Single bind/unbind
+
This is a combination of the LDAP "bind" and "unbind" operations.
+ It can be used for an authentication request/password check for any user. It will open an new session, just to
+ check the validity of the user/password combination, and end the session again.
+
+ Parameters
+
Attribute
Description
Required
+
Name
Descriptive name for this sampler that is shown in the tree.
No
+
Username
Full distinguished name of the user as which you want to bind.
Yes
+
Password
Password for the above user. If omitted it will result in an anonymous bind.
+ If is is incorrect, the sampler will return an error. (N.B. this is stored unencrypted in the test plan)
No
+
+
+
+
Rename entry
+
This is the LDAP "moddn" operation. It can be used to rename an entry, but
+ also for moving an entry or a complete subtree to a different place in
+ the LDAP tree.
+
+ Parameters
+
Attribute
Description
Required
+
Name
Descriptive name for this sampler that is shown in the tree.
No
+
Old entry name
The current distinguished name of the object you want to rename or move,
+ relative to the given DN in the thread bind operation.
Yes
+
New distinguished name
The new distinguished name of the object you want to rename or move,
+ relative to the given DN in the thread bind operation.
Yes
+
+
+
+
Add test
+
This is the ldap "add" operation. It can be used to add any kind of
+ object to the LDAP server.
+
+ Parameters
+
Attribute
Description
Required
+
Name
Descriptive name for this sampler that is shown in the tree.
No
+
Entry DN
Distinguished name of the object you want to add, relative to the given DN in the thread bind operation.
Yes
+
Add test
A list of attributes and their values you want to use for the object.
+ If you need to add a multiple value attribute, you need to add the same attribute with their respective
+ values several times to the list.
Yes
+
+
+
+
Delete test
+
This is the LDAP "delete" operation, it can be used to delete an
+ object from the LDAP tree
+
+ Parameters
+
Attribute
Description
Required
+
Name
Descriptive name for this sampler that is shown in the tree.
No
+
Delete
Distinguished name of the object you want to delete, relative to the given DN in the thread bind operation.
Yes
+
+
+
+
Search test
+
This is the LDAP "search" operation, and will be used for defining searches.
+
+ Parameters
+
Attribute
Description
Required
+
Name
Descriptive name for this sampler that is shown in the tree.
No
+
Search base
Distinguished name of the subtree you want your
+ search to look in, relative to the given DN in the thread bind operation.
No
+
Search Filter
searchfilter, must be specified in LDAP syntax.
Yes
+
Scope
Use 0 for baseobject-, 1 for onelevel- and 2 for a subtree search. (Default=0)
No
+
Size Limit
Specify the maximum number of results you want back from the server. (default=0, which means no limit.) When the sampler hits the maximum number of results, it will fail with errorcode 4
No
+
Time Limit
Specify the maximum amount of (cpu)time (in miliseconds) that the server can spend on your search. Take care, this does not say anything about the responsetime. (default is 0, which means no limit)
No
+
Attributes
Specify the attributes you want to have returned, seperated by a semicolon. An empty field will return all attributes
No
+
Return object
Whether the object will be returned (true) or not (false). Default=false
No
+
Dereference aliases
If true, it will dereference aliases, if false, it will not follow them (default=false)
No
+
+
+
+
Modification test
+
This is the LDAP "modify" operation. It can be used to modify an object. It
+ can be used to add, delete or replace values of an attribute.
+
+ Parameters
+
Attribute
Description
Required
+
Name
Descriptive name for this sampler that is shown in the tree.
No
+
Entry name
Distinguished name of the object you want to modify, relative
+ to the given DN in the thread bind operation
Yes
+
Modification test
The attribute-value-opCode triples. The opCode can be any
+ valid LDAP operationCode (add, delete/remove or replace). If you don't specify a value with a delete operation,
+ all values of the given attribute will be deleted. If you do specify a value in a delete operation, only
+ the given value will be deleted. If this value is non-existent, the sampler will fail the test.
Yes
+
+
+
+
Compare
+
This is the LDAP "compare" operation. It can be used to compare the value
+ of a given attribute with some already known value. In reality this is mostly
+ used to check whether a given person is a member of some group. In such a case
+ you can compare the DN of the user as a given value, with the values in the
+ attribute "member" of an object of the type groupOfNames.
+ If the compare operation fails, this test fails with errorcode 49.
+
+ Parameters
+
Attribute
Description
Required
+
Name
Descriptive name for this sampler that is shown in the tree.
No
+
Entry DN
The current distinguished name of the object of
+ which you want to compare an attribute, relative to the given DN in the thread bind operation.
AccessLogSampler was designed to read access logs and generate http requests.
+For those not familiar with the access log, it is the log the webserver maintains of every
+request it accepted. This means every image, css file, javascript file, html file....
+The current implementation is complete, but some features have not been enabled.
+There is a filter for the access log parser, but I haven't figured out how to link to the pre-processor.
+Once I do, changes to the sampler will be made to enable that functionality.
+
Tomcat uses the common format for access logs. This means any webserver that uses the
+common log format can use the AccessLogSampler. Server that use common log format include:
+Tomcat, Resin, Weblogic, and SunOne. Common log format looks
+like this:
The current implementation of the parser only looks at the text within the quotes that contains one of the HTTP protocol methods (GET, PUT, POST, DELETE...).
+Everything else is stripped out and ignored. For example, the response code is completely
+ignored by the parser.
+
For the future, it might be nice to filter out entries that
+do not have a response code of 200. Extending the sampler should be fairly simple. There
+are two interfaces you have to implement:
The current implementation of AccessLogSampler uses the generator to create a new
+HTTPSampler. The servername, port and get images are set by AccessLogSampler. Next,
+the parser is called with integer 1, telling it to parse one entry. After that,
+HTTPSampler.sample() is called to make the request.
+
+Classes implementing Generator interface should provide concrete implementation
+for all the methods. For an example of how to implement either interface, refer to
+StandardGenerator and TCLogParser.
+
+
Descriptive name for this sampler that is shown in the tree.
No
+
Server
Domain name or IP address of the web server.
Yes
+
Port
Port the web server is listening to.
No (defaults to 80)
+
Log parser class
The log parser class is responsible for parsing the logs.
Yes (default provided)
+
Filter
The filter class is used to filter out certain lines.
No
+
Location of log file
The location of the access log file.
Yes
+
+
+The TCLogParser processes the access log independently for each thread.
+The SharedTCLogParser and OrderPreservingLogParser share access to the file,
+i.e. each thread gets the next entry in the log.
+
+
+The SessionFilter is intended to handle Cookies across threads.
+It does not filter out any entries, but modifies the cookie manager so that the cookies for a given IP are
+processed by a single thread at a time. If two threads try to process samples from the same client IP address,
+then one will be forced to wait until the other has completed.
+
+
+The LogFilter is intended to allow access log entries to be filtered by filename and regex,
+as well as allowing for the replacement of file extensions. However, it is not currently possible
+to configure this via the GUI, so it cannot really be used.
+
This sampler allows you to write a sampler using the BeanShell scripting language.
+
+For full details on using BeanShell, please see the BeanShell website.
+
+
+The test element supports the ThreadListener and TestListener interface methods.
+These must be defined in the initialisation file.
+See the file BeanShellListeners.bshrc for example definitions.
+
+
+From JMeter version 2.5.1, the BeanShell sampler also supports the Interruptible interface.
+The interrupt() method can be defined in the script or the init file.
+
Descriptive name for this sampler that is shown in the tree.
+ The name is stored in the script variable Label
No
+
Reset bsh.Interpreter before each call
+ If this option is selected, then the interpreter will be recreated for each sample.
+ This may be necessary for some long running scripts.
+ For further information, see Best Practices - BeanShell scripting.
+
Yes
+
Parameters
Parameters to pass to the BeanShell script.
+ This is intended for use with script files; for scripts defined in the GUI, you can use whatever
+ variable and function references you need within the script itself.
+ The parameters are stored in the following variables:
+
+
Parameters - string containing the parameters as a single variable
+
bsh.args - String array containing parameters, split on white-space
+
No
+
Script file
A file containing the BeanShell script to run.
+ The file name is stored in the script variable FileName
No
+
Script
The BeanShell script to run.
+ The return value (if not null) is stored as the sampler result.
Yes (unless script file is provided)
+
+
+N.B. Each Sampler instance has its own BeanShell interpeter,
+and Samplers are only called from a single thread
+
+If the property "beanshell.sampler.init" is defined, it is passed to the Interpreter
+as the name of a sourced file.
+This can be used to define common methods and variables.
+There is a sample init file in the bin directory: BeanShellSampler.bshrc.
+
+If a script file is supplied, that will be used, otherwise the script will be used.
+
+JMeter processes function and variable references before passing the script field to the interpreter,
+so the references will only be resolved once.
+Variable and function references in script files will be passed
+verbatim to the interpreter, which is likely to cause a syntax error.
+In order to use runtime variables, please use the appropriate props methods,
+e.g. props.get("START.HMS"); props.put("PROP1","1234");
+
+BeanShell does not currently support Java 5 syntax such as generics and the enhanced for loop.
+
+
Before invoking the script, some variables are set up in the BeanShell interpreter:
+
+
The contents of the Parameters field is put into the variable "Parameters".
+ The string is also split into separate tokens using a single space as the separator, and the resulting list
+ is stored in the String array bsh.args.
+
The full list of BeanShell variables that is set up is as follows:
+
+
log - the Logger
+
Label - the Sampler label
+
FileName - the file name, if any
+
Parameters - text from the Parameters field
+
bsh.args - the parameters, split as described above
+
SampleResult - pointer to the current SampleResult
vars - JMeterVariables - e.g. vars.get("VAR1"); vars.put("VAR2","value"); vars.remove("VAR3"); vars.putObject("OBJ1",new Object());
+
props - JMeterProperties (class java.util.Properties)- e.g. props.get("START.HMS"); props.put("PROP1","1234");
+
+
When the script completes, control is returned to the Sampler, and it copies the contents
+ of the following script variables into the corresponding variables in the SampleResult:
+
+
ResponseCode - for example 200
+
ResponseMessage - for example "OK"
+
IsSuccess - true/false
+
+
The SampleResult ResponseData is set from the return value of the script.
+ Since version 2.1.2, if the script returns null, it can set the response directly, by using the method
+ SampleResult.setResponseData(data), where data is either a String or a byte array.
+ The data type defaults to "text", but can be set to binary by using the method
+ SampleResult.setDataType(SampleResult.BINARY).
+
+
The SampleResult variable gives the script full access to all the fields and
+ methods in the SampleResult. For example, the script has access to the methods
+ setStopThread(boolean) and setStopTest(boolean).
+
+ Here is a simple (not very useful!) example script:
+
+
+if (bsh.args[0].equalsIgnoreCase("StopThread")) {
+ log.info("Stop Thread detected!");
+ SampleResult.setStopThread(true);
+}
+return "Data from sample with Label "+Label;
+//or, since version 2.1.2
+SampleResult.setResponseData("My data");
+return null;
+
+
Another example: ensure that the property beanshell.sampler.init=BeanShellSampler.bshrc is defined in jmeter.properties.
+The following script will show the values of all the variables in the ResponseData field:
+
+
+return getVariables();
+
+
+For details on the methods available for the various classes (JMeterVariables, SampleResult etc) please check the Javadoc or the source code.
+Beware however that misuse of any methods can cause subtle faults that may be difficult to find ...
+
This sampler allows you to write a sampler using a BSF scripting language.
+ See the Apache Bean Scripting Framework
+ website for details of the languages supported.
+ You may need to download the appropriate jars for the language; they should be put in the JMeter lib directory.
+
+
+ The BSF API has been largely superseded by JSR-223, which is included in Java 6 onwards.
+ Most scripting languages now include support for JSR-223; please use the JSR223 Sampler instead.
+ The BSF Sampler should only be needed for supporting legacy languages/test scripts.
+
+
By default, JMeter supports the following languages:
+
+
javascript
+
jexl (JMeter version 2.3.2 and later)
+
xslt
+
+
Unlike the BeanShell sampler, the interpreter is not saved between invocations.
Descriptive name for this sampler that is shown in the tree.
No
+
Scripting Language
Name of the BSF scripting language to be used.
+ N.B. Not all the languages in the drop-down list are supported by default.
+ The following are supported: jexl, javascript, xslt.
+ Others may be available if the appropriate jar is installed in the JMeter lib directory.
+
Yes
+
Script File
Name of a file to be used as a BSF script, if a relative file path is used, then it will be relative to directory referenced by "user.dir" System property
No
+
Parameters
List of parameters to be passed to the script file or the script.
No
+
Script
Script to be passed to BSF language
Yes (unless script file is provided)
+
+
+If a script file is supplied, that will be used, otherwise the script will be used.
+
+JMeter processes function and variable references before passing the script field to the interpreter,
+so the references will only be resolved once.
+Variable and function references in script files will be passed
+verbatim to the interpreter, which is likely to cause a syntax error.
+In order to use runtime variables, please use the appropriate props methods,
+e.g. props.get("START.HMS"); props.put("PROP1","1234");
+
+
+Before invoking the script, some variables are set up.
+Note that these are BSF variables - i.e. they can be used directly in the script.
+
+
+
log - the Logger
+
Label - the Sampler label
+
FileName - the file name, if any
+
Parameters - text from the Parameters field
+
args - the parameters, split as described above
+
SampleResult - pointer to the current SampleResult
vars - JMeterVariables - e.g. vars.get("VAR1"); vars.put("VAR2","value"); vars.remove("VAR3"); vars.putObject("OBJ1",new Object());
+
props - JMeterProperties (class java.util.Properties) - e.g. props.get("START.HMS"); props.put("PROP1","1234");
+
OUT - System.out - e.g. OUT.println("message")
+
+
+The SampleResult ResponseData is set from the return value of the script.
+If the script returns null, it can set the response directly, by using the method
+SampleResult.setResponseData(data), where data is either a String or a byte array.
+The data type defaults to "text", but can be set to binary by using the method
+SampleResult.setDataType(SampleResult.BINARY).
+
+
+The SampleResult variable gives the script full access to all the fields and
+methods in the SampleResult. For example, the script has access to the methods
+setStopThread(boolean) and setStopTest(boolean).
+
+
+Unlike the BeanShell Sampler, the BSF Sampler does not set the ResponseCode, ResponseMessage and sample status via script variables.
+Currently the only way to changes these is via the SampleResult methods:
+
+The JSR223 Sampler allows JSR223 script code to be used to perform a sample.
+
+
+The JSR223 test elements have a feature (compilation) that can significantly increase performance.
+To benefit from this feature:
+
+
Use Script files instead of inlining them. This will make JMeter compile them if this feature is available on ScriptEngine and cache them.
+
Or Use Script Text and fill in script cache key property, ensure it is unique across Test Plan as JMeter will use it to cache result of compilation.
+
When using this feature, ensure you script code does not use JMeter variables directly in script code as caching would only cache first replacement. Instead use script parameters.
+
To benefit fomr Caching and compilation, language engine used for scripting must implement JSR223 Compilable interface (Groovy is one of these, java, beanshell and javascript are not)
+
+
+Cache size is controlled by the following jmeter property (jmeter.properties):
+
Unlike the BeanShell sampler, the interpreter is not saved between invocations.
+
+Since JMeter 2.8, JSR223 Test Elements using Script file or Script text + cache key are now Compiled if ScriptEngine supports this feature, this enables great performance enhancements.
+
+
+
+JMeter processes function and variable references before passing the script field to the interpreter,
+so the references will only be resolved once.
+Variable and function references in script files will be passed
+verbatim to the interpreter, which is likely to cause a syntax error.
+In order to use runtime variables, please use the appropriate props methods,
+e.g. props.get("START.HMS"); props.put("PROP1","1234");
+
+ The TCP Sampler opens a TCP/IP connection to the specified server.
+ It then sends the text, and waits for a response.
+
+ If "Re-use connection" is selected, connections are shared between Samplers in the same thread,
+ provided that the exact same host name string and port are used.
+ Different hosts/port combinations will use different connections, as will different threads.
+ If both of "Re-use connection" and "Close connection" are selected, the socket will be closed after running the sampler.
+ On the next sampler, another socket will be created. You may want to close a socket at the end of each thread loop.
+
+ If an error is detected - or "Re-use connection" is not selected - the socket is closed.
+ Another socket will be reopened on the next sample.
+
+ The following properties can be used to control its operation:
+
+
+
tcp.status.prefix - text that precedes a status number
+
tcp.status.suffix - text that follows a status number
+
tcp.status.properties - name of property file to convert status codes to messages
+
tcp.handler - Name of TCP Handler class (default TCPClientImpl) - only used if not specified on the GUI
+
+ The class that handles the connection is defined by the GUI, failing that the property tcp.handler.
+ If not found, the class is then searched for in the package org.apache.jmeter.protocol.tcp.sampler.
+
+ Users can provide their own implementation.
+ The class must extend org.apache.jmeter.protocol.tcp.sampler.TCPClient.
+
+
+ The following implementations are currently provided.
+
+
TCPClientImpl
+
BinaryTCPClientImpl
+
LengthPrefixedBinaryTCPClientImpl
+
+ The implementations behave as follows:
+
+
TCPClientImpl
+ This implementation is fairly basic.
+ When reading the response, it reads until the end of line byte, if this is defined
+ by setting the property tcp.eolByte, otherwise until the end of the input stream.
+ You can control charset encoding by setting tcp.charset, which will default to Platform default encoding.
+
+
BinaryTCPClientImpl
+ This implementation converts the GUI input, which must be a hex-encoded string, into binary,
+ and performs the reverse when reading the response.
+ When reading the response, it reads until the end of message byte, if this is defined
+ by setting the property tcp.BinaryTCPClient.eomByte, otherwise until the end of the input stream.
+
+
LengthPrefixedBinaryTCPClientImpl
+ This implementation extends BinaryTCPClientImpl by prefixing the binary message data with a binary length byte.
+ The length prefix defaults to 2 bytes.
+ This can be changed by setting the property tcp.binarylength.prefix.length.
+
+
Timeout handling
+ If the timeout is set, the read will be terminated when this expires.
+ So if you are using an eolByte/eomByte, make sure the timeout is sufficiently long,
+ otherwise the read will be terminated early.
+
+
Response handling
+
+ If tcp.status.prefix is defined, then the response message is searched for the text following
+ that up to the suffix. If any such text is found, it is used to set the response code.
+ The response message is then fetched from the properties file (if provided).
+
+ For example, if the prefix = "[" and the suffix = "]", then the following repsonse:
+
+ [J28] XI123,23,GBP,CR
+
+ would have the response code J28.
+
+ Response codes in the range "400"-"499" and "500"-"599" are currently regarded as failures;
+ all others are successful. [This needs to be made configurable!]
+
+
The login name/password are not used by the supplied TCP implementations.
+
+ Sockets are disconnected at the end of a test run.
+
Descriptive name for this element that is shown in the tree.
+
TCPClient classname
Name of the TCPClient class. Defaults to the property tcp.handler, failing that TCPClientImpl.
No
+
ServerName or IP
Name or IP of TCP server
Yes
+
Port Number
Port to be used
Yes
+
Re-use connection
If selected, the connection is kept open. Otherwise it is closed when the data has been read.
Yes
+
Close connection
If selected, the connection will be closed after running the sampler.
Yes
+
SO_LINGER
Enable/disable SO_LINGER with the specified linger time in seconds when a socket is created. If you set "SO_LINGER" value as 0, you may prevent large numbers of sockets sitting around with a TIME_WAIT status.
No
+
End of line(EOL) byte value
Byte value for end of line, set this to a value outside the range -128 to +127 to skip eol checking. You may set this in jmeter.properties file as well with eolByte property. If you set this in TCP Sampler Config and in jmeter.properties file at the same time, the setting value in the TCP Sampler Config will be used.
No
+
Connect Timeout
Connect Timeout (milliseconds, 0 disables).
No
+
Response Timeout
Response Timeout (milliseconds, 0 disables).
No
+
Set Nodelay
See java.net.Socket.setTcpNoDelay().
+ If selected, this will disable Nagle's algorithm, otherwise Nagle's algorithm will be used.
Yes
+
Text to Send
Text to be sent
Yes
+
Login User
User Name - not used by default implementation
No
+
Password
Password - not used by default implementation (N.B. this is stored unencrypted in the test plan)
+ JMS Publisher will publish messages to a given destination (topic/queue). For those not
+ familiar with JMS, it is the J2EE specification for messaging. There are
+ numerous JMS servers on the market and several open source options.
+
+
+
JMeter does not include any JMS implementation jar; this must be downloaded from the JMS provider and put in the lib directory
Descriptive name for this element that is shown in the tree.
+
use JNDI properties file
use jndi.properties.
+ Note that the file must be on the classpath - e.g. by updating the user.classpath JMeter property.
+ If this option is not selected, JMeter uses the "JNDI Initial Context Factory" and "Provider URL" fields
+ to create the connection.
+
Yes
+
JNDI Initial Context Factory
Name of the context factory
No
+
Provider URL
The URL for the jms provider
Yes, unless using jndi.properties
+
Destination
The message destination (topic or queue name)
Yes
+
Setup
The destination setup type. With At startup, the destination name is static (i.e. always same name during the test), with Each sample, the destination name is dynamic and is evaluate at each sample (i.e. the destination name may be a variable)
Yes
+
Authentication
Authentication requirement for the JMS provider
Yes
+
User
User Name
No
+
Password
Password (N.B. this is stored unencrypted in the test plan)
No
+
Expiration
+ The expiration time (in milliseconds) of the message before it becomes obsolete.
+ If you do not specify an expiration time, the default value is 0 (never expires).
+
No
+
Priority
+ The priority level of the message. There are ten priority levels from 0 (lowest) to 9 (highest).
+ If you do not specify a priority level, the default level is 4.
+
No
+
Number of samples to aggregate
Number of samples to aggregate
Yes
+
Message source
Where to obtain the message:
+
+
From File : means the referenced file will be read and reused by all samples
+
Random File from folder specified below : means a random file will be selected from folder specified below, this folder must contain either files with extension .dat for Bytes Messages, or files with extension .txt or .obj for Object or Text messages
+
Text area : The Message to use either for Text or Object message
+
+
Yes
+
Message type
Text, Map, Object message or Bytes Message
Yes
+
Use non-persistent delivery mode?
+ Whether to set DeliveryMode.NON_PERSISTENT (defaults to false)
+
No
+
JMS Properties
+ The JMS Properties are properties specific for the underlying messaging system.
+ You can setup the name, the value and the class (type) of value. Default type is String.
+ For example: for WebSphere 5.1 web services you will need to set the JMS Property targetService to test
+ webservices through JMS.
+
No
+
+
+
+For the MapMessage type, JMeter reads the source as lines of text.
+Each line must have 3 fields, delimited by commas.
+The fields are:
+
+
Name of entry
+
Object class name, e.g. "String" (assumes java.lang package if not specified)
+
Object string value
+
+For each entry, JMeter adds an Object with the given name.
+The value is derived by creating an instance of the class, and using the valueOf(String) method to convert the value if necessary.
+For example:
+
+name,String,Example
+size,Integer,1234
+
+This is a very simple implementation; it is not intended to support all possible object types.
+
+
+
+The Object message is implemented since 2.7 and works as follow:
+
+
Put the JAR that contains your object and its dependencies in jmeter_home/lib/ folder
+
Serialize your object as XML using XStream
+
Either put result in a file suffixed with .txt or .obj or put XML content direclty in Text Area
+
+Note that if message is in a file, replacement of properties will not occur while it will if you use Text Area.
+
+
+
+
+The following table shows some values which may be useful when configuring JMS:
+
+ JMS Publisher will subscribe to messages in a given destination (topic or queue). For those not
+ familiar with JMS, it is the J2EE specification for messaging. There are
+ numerous JMS servers on the market and several open source options.
+
+
+
JMeter does not include any JMS implementation jar; this must be downloaded from the JMS provider and put in the lib directory
Descriptive name for this element that is shown in the tree.
+
use JNDI properties file
use jndi.properties.
+ Note that the file must be on the classpath - e.g. by updating the user.classpath JMeter property.
+ If this option is not selected, JMeter uses the "JNDI Initial Context Factory" and "Provider URL" fields
+ to create the connection.
+
Yes
+
JNDI Initial Context Factory
Name of the context factory
No
+
Provider URL
The URL for the jms provider
No
+
Destination
the message destination (topic or queue name)
Yes
+
Durable Subscription ID
The ID to use for a durable subscription. On first
+ use the respective queue will automatically be generated by the JMS provider if it does not exist yet.
No
+
Client ID
The Client ID to use when you you use a durable subscription.
+ Be sure to add a variable like ${__threadNum} when you have more than one Thread.
No
+
JMS Selector
Message Selector as defined by JMS specification to extract only
+ messages that respect the Selector condition. Syntax uses subpart of SQL 92.
No
+
Setup
The destination setup type. With At startup, the destination name is static (i.e. always same name during the test), with Each sample, the destination name is dynamic and is evaluate at each sample (i.e. the destination name may be a variable)
Yes
+
Authentication
Authentication requirement for the JMS provider
Yes
+
User
User Name
No
+
Password
Password (N.B. this is stored unencrypted in the test plan)
No
+
Number of samples to aggregate
number of samples to aggregate
Yes
+
Read response
should the sampler read the response. If not, only the response length is returned.
Yes
+
Timeout
Specify the timeout to be applied, in milliseconds. 0=none.
+ This is the overall aggregate timeout, not per sample.
Yes
+
Client
Which client implementation to use.
+ Both of them create connections which can read messages. However they use a different strategy, as described below:
+
+
MessageConsumer.receive() - calls receive() for every requested message.
+ Retains the connection between samples, but does not fetch messages unless the sampler is active.
+ This is best suited to Queue subscriptions.
+
+
MessageListener.onMessage() - establishes a Listener that stores all incoming messages on a queue.
+ The listener remains active after the sampler completes.
+ This is best suited to Topic subscriptions.
+
+
Yes
+
Stop between samples?
+ If selected, then JMeter calls Connection.stop() at the end of each sample (and calls start() before each sample).
+ This may be useful in some cases where multiple samples/threads have connections to the same queue.
+ If not selected, JMeter calls Connection.start() at the start of the thread, and does not call stop() until the end of the thread.
+
Yes
+
Separator
+ Separator used to separate messages when there is more than one (related to setting Number of samples to aggregate).
+ Note that \n, \r, \t are accepted.
+
No
+
+
+NOTE: JMeter 2.3.4 and earlier used a different strategy for the MessageConsumer.receive() client.
+Previously this started a background thread which polled for messages. This thread continued when the sampler
+completed, so the net effect was similar to the MessageListener.onMessage() strategy.
+
+ This sampler sends and optionally receives JMS Messages through point-to-point connections (queues).
+ It is different from pub/sub messages and is generally used for handling transactions.
+
+
+ Request Only will typically used to put load on a JMS System.
+ Request Response will be used when you want to test response time of a JMS service that processes messages sent to the Request Queue as this mode will wait for the response on the Reply queue sent by this service.
+
+
+ Versions of JMeter after 2.3.2 use the properties java.naming.security.[principal|credentials] - if present -
+ when creating the Queue Connection. If this behaviour is not desired, set the JMeter property
+ JMSSampler.useSecurity.properties=false
+
+
+
JMeter does not include any JMS implementation jar; this must be downloaded from the JMS provider and put in the lib directory
Descriptive name for this element that is shown in the tree.
+
QueueConnection Factory
+ The JNDI name of the queue connection factory to use for connecting to the messaging system.
+
Yes
+
JNDI Name Request queue
+ This is the JNDI name of the queue to which the messages are sent.
+
Yes
+
JNDI Name Reply queue
+ The JNDI name of the receiving queue. If a value is provided here and the communication style is Request Response
+ this queue will be monitored for responses to the requests sent.
+
No
+
JMS Selector
+ Message Selector as defined by JMS specification to extract only
+ messages that respect the Selector condition. Syntax uses subpart of SQL 92.
+
No
+
Communication style
+ The Communication style can be Request Only (also known as Fire and Forget) or Request Response:
+
+
Request Only will only send messages and will not monitor replies. As such it can be used to put load on a system.
+
Request Response will send messages and monitor the replies it receives. Behaviour depends on the value of the JNDI Name Reply Queue.
+ If JNDI Name Reply Queue has a value, this queue is used to monitor the results. Matching of request and reply is done with
+ the message id of the request and the correlation id of the reply. If the JNDI Name Reply Queue is empty, then
+ temporary queues will be used for the communication between the requestor and the server.
+ This is very different from the fixed reply queue. With temporary queues the sending thread will block until the reply message has been received.
+ With Request Response mode, you need to have a Server that listens to messages sent to Request Queue and sends replies to
+ queue referenced by message.getJMSReplyTo().
+
+
Yes
+
Use alternate fields for message correlation
+ These check-boxes select the fields which will be used for matching the response message with the original request.
+
+
Use Request Message Id - if selected, the request JMSMessageID will be used,
+ otherwise the request JMSCorrelationID will be used.
+ In the latter case the correlation id must be specified in the request.
+
Use Response Message Id - if selected, the response JMSMessageID will be used,
+ otherwise the response JMSCorrelationID will be used.
+
+
+ There are two frequently used JMS Correlation patterns:
+
+
JMS Correlation ID Pattern -
+ i.e. match request and response on their correlation Ids
+ => deselect both checkboxes, and provide a correlation id.
+
JMS Message ID Pattern -
+ i.e. match request message id with response correlation id
+ => select "Use Request Message Id" only.
+
+
+ In both cases the JMS application is responsible for populating the correlation ID as necessary.
+
if the same queue is used to send and receive messages,
+ then the response message will be the same as the request message.
+ In which case, either provide a correlation id and clear both checkboxes;
+ or select both checkboxes to use the message Id for correlation.
+ This can be useful for checking raw JMS throughput.
+
Yes
+
Timeout
+ The timeout in milliseconds for the reply-messages. If a reply has not been received within the specified
+ time, the specific testcase failes and the specific reply message received after the timeout is discarded.
+ Default value is 2000 ms.
+
Yes
+
Expiration
+ The expiration time (in milliseconds) of the message before it becomes obsolete.
+ If you do not specify an expiration time, the default value is 0 (never expires).
+
No
+
Priority
+ The priority level of the message. There are ten priority levels from 0 (lowest) to 9 (highest).
+ If you do not specify a priority level, the default level is 4.
+
No
+
Use non-persistent delivery mode?
+ Whether to set DeliveryMode.NON_PERSISTENT.
+
Yes
+
Content
+ The content of the message.
+
No
+
JMS Properties
+ The JMS Properties are properties specific for the underlying messaging system.
+ You can setup the name, the value and the class (type) of value. Default type is String.
+ For example: for WebSphere 5.1 web services you will need to set the JMS Property targetService to test
+ webservices through JMS.
+
No
+
Initial Context Factory
+ The Initial Context Factory is the factory to be used to look up the JMS Resources.
+
No
+
JNDI properties
+ The JNDI Properties are the specific properties for the underlying JNDI implementation.
+
+The current implementation supports standard Junit convention and extensions. It also
+includes extensions like oneTimeSetUp and oneTimeTearDown. The sampler works like the
+JavaSampler with some differences.
+
+
rather than use Jmeter's test interface, it scans the jar files for classes extending junit's TestCase class. That includes any class or subclass.
+
Junit test jar files should be placed in jmeter/lib/junit instead of /lib directory.
+In versions of JMeter after 2.3.1, you can also use the "user.classpath" property to specify where to look for TestCase classes.
+
Junit sampler does not use name/value pairs for configuration like the JavaSampler. The sampler assumes setUp and tearDown will configure the test correctly.
+
The sampler measures the elapsed time only for the test method and does not include setUp and tearDown.
+
Each time the test method is called, Jmeter will pass the result to the listeners.
+
Support for oneTimeSetUp and oneTimeTearDown is done as a method. Since Jmeter is multi-threaded, we cannot call oneTimeSetUp/oneTimeTearDown the same way Maven does it.
+
The sampler reports unexpected exceptions as errors.
+There are some important differences between standard JUnit test runners and JMeter's
+implementation. Rather than make a new instance of the class for each test, JMeter
+creates 1 instance per sampler and reuses it.
+This can be changed with checkbox "Create a new instance per sample".
+
+The current implementation of the sampler will try to create an instance using the string constructor first. If the test class does not declare a string constructor, the sampler will look for an empty constructor. Example below:
+
+public class myTestCase {
+ public myTestCase() {}
+}
+
+String Constructor:
+
+public class myTestCase {
+ public myTestCase(String text) {
+ super(text);
+ }
+}
+
+
+By default, Jmeter will provide some default values for the success/failure code and message. Users should define a set of unique success and failure codes and use them uniformly across all tests.
+
+
General Guidelines
+If you use setUp and tearDown, make sure the methods are declared public. If you do not, the test may not run properly.
+
+Here are some general guidelines for writing Junit tests so they work well with Jmeter. Since Jmeter runs multi-threaded, it is important to keep certain things in mind.
+
+
Write the setUp and tearDown methods so they are thread safe. This generally means avoid using static memebers.
+
Make the test methods discrete units of work and not long sequences of actions. By keeping the test method to a descrete operation, it makes it easier to combine test methods to create new test plans.
+
Avoid making test methods depend on each other. Since Jmeter allows arbitrary sequencing of test methods, the runtime behavior is different than the default Junit behavior.
+
If a test method is configurable, be careful about where the properties are stored. Reading the properties from the Jar file is recommended.
+
Each sampler creates an instance of the test class, so write your test so the setup happens in oneTimeSetUp and oneTimeTearDown.
Descriptive name for this element that is shown in the tree.
+
Search for JUnit4 annotations
Select this to search for JUnit 4 tests (@Test annotations)
Yes
+
Package filter
Comma separated list of packages to show. Example, org.apache.jmeter,junit.framework.
+
Class name
Fully qualified name of the JUnit test class.
Yes
+
Constructor string
String pass to the string constructor. If a string is set, the sampler will use the
+ string constructor instead of the empty constructor.
+
Test method
The method to test.
Yes
+
Success message
A descriptive message indicating what success means.
+
Success code
An unique code indicating the test was successful.
+
Failure message
A descriptive message indicating what failure means.
+
Failure code
An unique code indicating the test failed.
+
Error message
A description for errors.
+
Error code
Some code for errors. Does not need to be unique.
+
Do not call setUp and tearDown
Set the sampler not to call setUp and tearDown.
+ By default, setUp and tearDown should be called. Not calling those methods could affect the test and make it inaccurate.
+ This option should only be used with calling oneTimeSetUp and oneTimeTearDown. If the selected method is oneTimeSetUp or oneTimeTearDown,
+ this option should be checked.
Yes
+
Append assertion errors
Whether or not to append assertion errors to the response message.
Yes
+
Append runtime exceptions
Whether or not to append runtime exceptions to the response message. Only applies if "Append assertion errors" is not selected.
Yes
+
Create a new Instance per sample
Whether or not to create a new JUnit instance for each sample. Defaults to false, meaning JUnit TestCase is created one and reused.
Yes
+
+
+The following JUnit4 annotations are recognised:
+
+
@Test - used to find test methods and classes. The "expected" and "timeout" attributes are supported.
+
@Before - treated the same as setUp() in JUnit3
+
@After - treated the same as tearDown() in JUnit3
+
@BeforeClass, @AfterClass - treated as test methods so they can be run independently as required
+
+
+
+Note that JMeter currently runs the test methods directly, rather than leaving it to JUnit.
+This is to allow the setUp/tearDown methods to be excluded from the sample time.
+
Descriptive name for this element that is shown in the tree.
+
Server Type
The protocol used by the provider: e.g. pop3, pop3s, imap, imaps.
+or another string representing the server protocol.
+For example file for use with the read-only mail file provider.
+The actual provider names for POP3 and IMAP are pop3 and imap
+
Yes
+
Server
Hostname or IP address of the server. See below for use with file protocol.
Yes
+
Port
Port to be used to connect to the server (optional)
No
+
Username
User login name
+
Password
User login password (N.B. this is stored unencrypted in the test plan)
+
Folder
The IMAP(S) folder to use. See below for use with file protocol.
Yes, if using IMAP(S)
+
Number of messages to retrieve
Set this to retrieve all or some messages
Yes
+
Fetch headers only
If selected, only the message headers will be retrieved.
Yes
+
Delete messages from the server
If set, messages will be deleted after retrieval
Yes
+
Store the message using MIME
Whether to store the message as MIME.
+If so, then the entire raw message is stored in the Response Data; the headers are not stored as they are available in the data.
+If not, the message headers are stored as Response Headers.
+A few headers are stored (Date, To, From, Subject) in the body.
+
Yes
+
Use no security features
Indicates that the connection to the server does not use any security protocol.
+
Use SSL
Indicates that the connection to the server must use the SSL protocol.
+
Use StartTLS
Indicates that the connection to the server should attempt to start the TLS protocol.
+
Enforce StartTLS
If the server does not start the TLS protocol the connection will be terminated.
+
Trust All Certificates
When selected it will accept all certificates independent of the CA.
+
Use local truststore
When selected it will only accept certificates that are locally trusted.
+
Local truststore
Path to file containing the trusted certificates.
+Relative paths are resolved against the current directory.
+ Failing that, against the directory containing the test script (JMX file).
+
+
+
+Messages are stored as subsamples of the main sampler.
+In versions of JMeter after 2.3.4, multipart message parts are stored as subsamples of the message.
+
+
+Special handling for "file" protocol:
+The file JavaMail provider can be used to read raw messages from files.
+The server field is used to specify the path to the parent of the folder.
+Individual message files should be stored with the name n.msg,
+where n is the message number.
+Alternatively, the server field can be the name of a file which contains a single message.
+The current implementation is quite basic, and is mainly intended for debugging purposes.
+
+The Test Action sampler is a sampler that is intended for use in a conditional controller.
+Rather than generate a sample, the test element eithers pauses or stops the selected target.
+
This sampler can also be useful in conjunction with the Transaction Controller, as it allows
+pauses to be included without needing to generate a sample.
+For variable delays, set the pause time to zero, and add a Timer as a child.
+
+The "Stop" action stops the thread or test after completing any samples that are in progress.
+The "Stop Now" action stops the test without waiting for samples to complete; it will interrupt any active samples.
+If some threads fail to stop within the 5 second time-limit, a message will be displayed in GUI mode.
+You can try using the Stop command to see if this will stop the threads, but if not, you should exit JMeter.
+In non-GUI mode, JMeter will exit if some threads fail to stop within the 5 second time limit.
+[This can be changed using the JMeter property jmeterengine.threadstop.wait]
+
+The SMTP Sampler can send mail messages using SMTP/SMTPS protocol.
+It is possible to set security propocols for the connection (SSL and TLS), as well as user authentication.
+If a security protocol is used a verification on the server certificate will occur.
+Two alternatives to handle this verification are available:
+
+
Trust all certificates. This will ignore certificate chain verification
+
Use a local truststore. With this option the certificate chain will be validated against the local truststore file.
Alternate Reply-To address (multiple values separated by ";")
No
+
Use Auth
Indicates if the SMTP server requires user authentication
+
Username
User login name
+
Password
User login password (N.B. this is stored unencrypted in the test plan)
+
Use no security features
Indicates that the connection to the SMTP server does not use any security protocol.
+
Use SSL
Indicates that the connection to the SMTP server must use the SSL protocol.
+
Use StartTLS
Indicates that the connection to the SMTP server should attempt to start the TLS protocol.
+
Enforce StartTLS
If the server does not start the TLS protocol the connection will be terminated.
+
Trust All Certificates
When selected it will accept all certificates independent of the CA.
+
Use local truststore
When selected it will only accept certificates that are locally trusted.
+
Local truststore
Path to file containing the trusted certificates.
+Relative paths are resolved against the current directory.
+ Failing that, against the directory containing the test script (JMX file).
+
+
Subject
The e-mail message subject.
+
Suppress Subject Header
If selected, the "Subject:" header is omitted from the mail that is sent.
+This is different from sending an empty "Subject:" header, though some e-mail clients may display it identically.
+
Include timestamp in subject
Includes the System.currentTimemilis() in the subject line.
+
Add Header
Additional headers can be defined using this button.
No
+
Message
The message body.
+
Send plain body (i.e. not multipart/mixed)
+If selected, then send the body as a plain message, i.e. not multipart/mixed, if possible.
+If the message body is empty and there is a single file, then send the file contents as the message body.
+Note: If the message body is not empty, and there is at least one attached file, then the body is sent as multipart/mixed.
+
+ No
+
+
Attach files
Files to be attached to the message.
+
Send .eml
If set, the .eml file will be sent instead of the entries in the Subject, Message, and Attached files
+
Calculate message size
Calculates the message size and stores it in the sample result.
+
Enable debug logging?
If set, then the "mail.debug" property is set to "true"
+The OS Process Sampler is a sampler that can be used to execute commands on the local machine.
+It should allow execution of any command that can be run from the command line.
+Validation of the return code can be enabled, and the expected return code can be specified.
+
+
+Note that OS shells generally provide command-line parsing.
+This varies between OSes, but generally the shell will split parameters on white-space.
+Some shells expand wild-card file names; some don't.
+The quoting mechanism also varies between OSes.
+The sampler deliberately does not do any parsing or quote handling.
+The command and its parameters must be provided in the form expected by the executable.
+This means that the sampler settings will not be portable between OSes.
+
+
+Many OSes have some built-in commands which are not provided as separate executables.
+For example the Windows DIR command is part of the command interpreter (CMD.EXE).
+These built-ins cannot be run as independent programs, but have to be provided as arguments to the appropriate command interpreter.
+
+
+For example, the Windows command-line: DIR C:\TEMP needs to be specified as follows:
+
Directory from which command will be executed, defaults to folder referenced by "user.dir" System property
No
+
Command Parameters
Parameters passed to the program name.
No
+
Environment Parameters
Key/Value pairs added to environment when running command.
No
+
Standard input (stdin)
Name of file from which input is to be taken (STDIN).
No
+
Standard output (stdout
Name of output file for standard output (STDOUT).
+If omitted, output is captured and returned as the response data.
No
+
Standard error (stderr)
Name of output file for standard error (STDERR).
+If omitted, output is captured and returned as the response data.
No
+
Check Return Code
If checked, sampler will compare return code with Expected Return Code.
No
+
Expected Return Code
Expected return code for System Call, required if "Check Return Code" is checked.
No
+
Timeout
Timeout for command in milliseconds, defaults to 0, which means NO timeout.
+If the timeout expires before the command finishes, JMeter will attempt to kill the OS process.
+
This sampler lets you send an Request to a MongoDB.
+
Before using this you need to set up a
+MongoDB Source Config Configuration element
+
+
This Element currently uses com.mongodb.DB#eval which takes a global write lock causing a performance impact on the database, see db.eval().
+So it is better to avoid using this element for load testing and use JSR223+Groovy scripting using MongoDBHolder instead.
+MongoDB Script is more suitable for functionnal testing or test setup (setup/teardown threads)
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
+storage device.
Download this example (see Figure 6).
+In this example, we created a Test Plan that sends two Ant HTTP requests and two
+Log4J HTTP requests. We grouped the Ant and Log4J requests by placing them inside
+Simple Logic Controllers. Remember, the Simple Logic Controller has no effect on how JMeter
+processes the controller(s) you add to it. So, in this example, JMeter sends the requests in the
+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.
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
+Loop Controller with a loop count of two, and configure the Thread Group loop
+count to three, JMeter will send a total of 2 * 3 = 6 HTTP Requests.
+
Descriptive name for this controller that is shown in the tree.
No
+
Loop Count
+ The number of times the subelements of this controller will be iterated each time
+ through a test run.
+
Special Case: The Loop Controller embedded in the Thread Group
+ element behaves slightly differently. Unless set to forever, it stops the test after
+ the given number of iterations have been done.
+
When using a function in this field, be aware it may be evaluated multiple times.
+ Example using __Random will evaluate it to a different value for each child samplers of Loop Controller and result into unwanted behaviour.
Download this example (see Figure 4).
+In this example, we created a Test Plan that sends a particular HTTP Request
+only once and sends another HTTP Request five times.
+
+Figure 4 - Loop Controller Example
+
+
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
+Controller. You can see that we added one HTTP Request to the Thread Group and
+another HTTP Request to a Loop Controller. We configured the Loop Controller
+with a loop count value of five.
+
JMeter will send the requests in the following order: Home Page, News Page,
+News Page, News Page, News Page, and News Page. Note, the File Reporter
+is configured to store the results in a file named "loop-test.dat" in the current directory.
The Once Only Logic Controller tells JMeter to process the controller(s) inside it only once per Thread, and pass over any requests under it
+during further iterations through the test plan.
+
+
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 per Thread),
+but now the user has more flexibility in the use of the Once Only Controller.
+
+
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.
Download this example (see Figure 5).
+In this example, we created a Test Plan that has two threads that send HTTP request.
+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.
+Figure 5. Once Only Controller Example
+
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.
+
+
+
The behaviour of the Once Only controller under anything other than the
+Thread Group or a Loop Controller is not currently defined. Odd things may happen.
If you add Generative or Logic Controllers to an Interleave Controller, JMeter will alternate among each of the
+other controllers for each loop iteration.
Download 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 per thread. See the table below for the sequence JMeter sends the HTTP Requests.
+
+Figure 1 - Interleave Controller Example 1
+
+
+
Loop Iteration
Each JMeter Thread Sends These HTTP Requests
+
1
News Page
+
1
Log Page
+
2
FAQ Page
+
2
Log Page
+
3
Gump Page
+
3
Log Page
+
4
Because there are no more requests in the controller, JMeter starts over and sends the first HTTP Request, which is the News Page.
Download another example (see Figure 2). In this
+example, we configured the Thread Group
+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.
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, 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.
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.
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
+at random at each pass.
+
Interactions between multiple controllers can yield complex behavior.
+This is particularly true of the Random Controller. Experiment before you assume
+what results any given interaction will give
The Random Order Controller is much like a Simple Controller in that it will execute each child
+ element at most once, but the order of execution of the nodes will be random.
+This controller is badly named, as it does not control throughput.
+Please refer to the Constant Throughput Timer for an element that can be used to adjust the throughput.
+
+
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.
+
+
+
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).
Descriptive name for this controller that is shown in the tree.
No
+
Execution Style
Whether the controller will run in percent executions or total executions mode.
Yes
+
Throughput
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.
Yes
+
Per User
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.
The If Controller allows the user to control whether the test elements below it (its children) are run or not.
+
+ Prior to JMeter 2.3RC3, the condition was evaluated for every runnable element contained in the controller.
+ This sometimes caused unexpected behaviour, so 2.3RC3 was changed to evaluate the condition only once on initial entry.
+ However, the original behaviour is also useful, so versions of JMeter after 2.3RC4 have an additional
+ option to select the original behaviour.
+
+
+ Versions of JMeter after 2.3.2 allow the script to be processed as a variable expression, rather than requiring Javascript.
+ It was always possible to use functions and variables in the Javascript condition, so long as they evaluated to "true" or "false";
+ now this can be done without the overhead of using Javascript as well. For example, previously one could use the condition:
+ ${__jexl(${VAR} == 23)} and this would be evaluated as true/false, the result would then be passed to Javascript
+ which would then return true/false. If the Variable Expression option is selected, then the expression is evaluated
+ and compared with "true", without needing to use Javascript.
+ Also, variable expressions can return any value, whereas the
+ Javascript condition must return "true"/"false" or an error is logged.
+
+
+ No variables are made available to the script when the condition is interpreted as Javascript.
+ If you need access to such variables, then select "Interpret Condition as Variable Expression?" and use
+ a __javaScript() function call. You can then use the objects "vars", "log", "ctx" etc. in the script.
+
+
+ To test if a variable is undefined (or null) do the following, suppose var is named myVar, expression will be:
+
+ "${myVar}" == "\${myVar}"
+
+ Or use:
+
+ "${myVar}" != "\${myVar}"
+
+ to test if a variable is defined and is not null.
+
Descriptive name for this controller that is shown in the tree.
No
+
Condition (default Javascript)
By default the condition is interpreted as Javascript code that returns "true" or "false",
+ but this can be overriden (see below)
Yes
+
Interpret Condition as Variable Expression?
If this is selected, then the condition must be an expression that evaluates to "true" (case is ignored).
+ For example, ${FOUND} or ${__jexl(${VAR} > 100)}.
+ Unlike the Javascript case, the condition is only checked to see if it matches "true" (case is ignored).
+
Yes
+
Evaluate for all children
+ Should condition be evaluated for all children?
+ If not checked, then the condition is only evaluated on entry.
+
Yes
+
+
Examples (Javascript):
+
+
${COUNT} < 10
+
"${VAR}" == "abcd"
+
${JMeterThread.last_sample_ok} (check if last sample succeeded)
+
+ If there is an error interpreting the code, the condition is assumed to be false, and a message is logged in jmeter.log.
+
+
+The While Controller runs its children until the condition is "false".
+
+
+
Possible condition values:
+
+
blank - exit loop when last sample in loop fails
+
LAST - exit loop when last sample in loop fails.
+If the last sample just before the loop failed, don't enter loop.
+
Otherwise - exit (or don't enter) the loop when the condition is equal to the string "false"
+
+
+The condition can be any variable or function that eventually evaluates to the string "false".
+This allows the use of JavaScript, BeanShell, properties or variables as needed.
+
+
+
+Note that the is evaluated twice, once before starting sampling children and once at end of children sampling, so putting
+non idempotent functions in Condition (like __counter) can introduce issues.
+
+
+For example:
+
+
${VAR} - where VAR is set to false by some other test element
+
${__javaScript(${C}==10)}
+
${__javaScript("${VAR2}"=="abcd")}
+
${_P(property)} - where property is set to "false" somewhere else
+The Switch Controller acts like the Interleave Controller
+in that it runs one of the subordinate elements on each iteration, but rather than
+run them in sequence, the controller runs the element defined by the switch value.
+
+
+Note: In versions of JMeter after 2.3.1, the switch value can also be a name.
+
+
If the switch value is out of range, it will run the zeroth element,
+which therefore acts as the default for the numeric case.
+It also runs the zeroth element if the value is the empty string.
+
+If the value is non-numeric (and non-empty), then the Switch Controller looks for the
+element with the same name (case is significant).
+If none of the names match, then the element named "default" (case not significant) is selected.
+If there is no default, then no element is selected, and the controller will not run anything.
+
A ForEach controller loops through the values of a set of related variables.
+When you add samplers (or controllers) to a ForEach controller, every sample sample (or controller)
+is executed one or more times, where during every loop the variable has a new value.
+The input should consist of several variables, each extended with an underscore and a number.
+Each such variable must have a value.
+So for example when the input variable has the name inputVar, the following variables should have been defined:
+
+
inputVar_1 = wendy
+
inputVar_2 = charles
+
inputVar_3 = peter
+
inputVar_4 = john
+
+
Note: the "_" separator is now optional.
+When the return variable is given as "returnVar", the collection of samplers and controllers under the ForEach controller will be executed 4 consecutive times,
+with the return variable having the respective above values, which can then be used in the samplers.
+
+
+It is especially suited for running with the regular expression post-processor.
+This can "create" the necessary input variables out of the result data of a previous request.
+By omitting the "_" separator, the ForEach Controller can be used to loop through the groups by using
+the input variable refName_g, and can also loop through all the groups in all the matches
+by using an input variable of the form refName_${C}_g, where C is a counter variable.
+
+
The ForEach Controller does not run any samples if inputVar_1 is null.
+This would be the case if the Regular Expression returned no matches.
Download this example (see Figure 7).
+In this example, we created a Test Plan that sends a particular HTTP Request
+only once and sends another HTTP Request to every link that can be found on the page.
+
+Figure 7 - ForEach Controller Example
+
+
We configured the Thread Group for a single thread and a loop count value of
+one. You can see that we added one HTTP Request to the Thread Group and
+another HTTP Request to the ForEach Controller.
+
After the first HTTP request, a regular expression extractor is added, which extracts all the html links
+out of the return page and puts them in the inputVar variable
+
In the ForEach loop, a HTTP sampler is added which requests all the links that were extracted from the first returned HTML page.
+
Here is another example you can download.
+This has two Regular Expressions and ForEach Controllers.
+The first RE matches, but the second does not match,
+so no samples are run by the second ForEach Controller
+Figure 8 - ForEach Controller Example 2
+
The Thread Group has a single thread and a loop count of two.
+
+Sample 1 uses the JavaTest Sampler to return the string "a b c d".
+
The Regex Extractor uses the expression (\w)\s which matches a letter followed by a space,
+and returns the letter (not the space). Any matches are prefixed with the string "inputVar".
+
The ForEach Controller extracts all variables with the prefix "inputVar_", and executes its
+sample, passing the value in the variable "returnVar". In this case it will set the variable to the values "a" "b" and "c" in turn.
+
The For 1 Sampler is another Java Sampler which uses the return variable "returnVar" as part of the sample Label
+and as the sampler Data.
+
Sample 2, Regex 2 and For 2 are almost identical, except that the Regex has been changed to "(\w)\sx",
+which clearly won't match. Thus the For 2 Sampler will not be run.
+
+The Module Controller provides a mechanism for substituting test plan fragments into the current test plan at run-time.
+
+
+A test plan fragment consists of a Controller and all the test elements (samplers etc) contained in it.
+The fragment can be located in any Thread Group, or on the WorkBench.
+If the fragment is located in a Thread Group, then its Controller can be disabled to prevent the fragment being run
+except by the Module Controller.
+Or you can store the fragments in a dummy Thread Group, and disable the entire Thread Group.
+
+
+There can be multiple fragments, 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 its drop down box. This provides convenience for running many alternate test plans quickly and easily.
+
+
+A fragment name is made up of the Controller name and all its parent names.
+For example:
+
+Test Plan / Protocol: JDBC / Control / Interleave Controller (Module1)
+
+Any fragments used by the Module Controller must have a unique name,
+as the name is used to find the target controller when a test plan is reloaded.
+For this reason it is best to ensure that the Controller name is changed from the default
+- as shown in the example above -
+otherwise a duplicate may be accidentally created when new elements are added to the test plan.
+
+
+
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.
+The include controller is designed to use an external jmx file. To use it, create a Test Fragment
+underneath the Test Plan and add any desired samplers, controllers etc. below it.
+Then save the Test Plan. The file is now ready to be included as part of other Test Plans.
+
+
+For convenience, a Thread Group can also be added in the external JMX file for debugging purposes.
+A Module Controller can be used to reference the Test Fragment. The Thread Group will be ignored during the
+include process.
+
+
+If the test uses a Cookie Manager or User Defined Variables, these should be placed in the top-level
+test plan, not the included file, otherwise they are not guaranteed to work.
+
+
+This element does not support variables/functions in the filename field.
+However, if the property includecontroller.prefix is defined,
+the contents are used to prefix the pathname.
+
+
+When using IncludeController and including the same JMX file, ensure you name the IncludeController differently to avoid facing known issue
+ Bug
+ 50898.
+
+
+If the file cannot be found at the location given by prefix+filename, then the controller
+attempts to open the fileName relative to the JMX launch directory (versions of JMeter after 2.3.4).
+
+ The Transaction Controller generates an additional
+ sample which measures the overall time taken to perform the nested test elements.
+
+
+ Note: when the check box "Include duration of timer and pre-post processors in generated sample" is checked,
+ the time includes all processing within the controller scope, not just the samples.
+
+
+ For JMeter versions after 2.3, there are two modes of operation
+
+
additional sample is added after the nested samples
+
additional sample is added as a parent of the nested samples
+
+
+
+ The generated sample time includes all the times for the nested samplers, and any timers etc.
+ Depending on the clock resolution, it may be slightly longer than the sum of the individual samplers plus timers.
+ The clock might tick after the controller recorded the start time but before the first sample starts.
+ Similarly at the end.
+
+
The generated sample is only regarded as successful if all its sub-samples are successful.
+
+ In parent mode, the individual samples can still be seen in the Tree View Listener,
+ but no longer appear as separate entries in other Listeners.
+ Also, the sub-samples do not appear in CSV log files, but they can be saved to XML files.
+
+
+ In parent mode, Assertions (etc) can be added to the Transaction Controller.
+ However by default they will be applied to both the individual samples and the overall transaction sample.
+ To limit the scope of the Assertions, use a Simple Controller to contain the samples, and add the Assertions
+ to the Simple Controller.
+ Parent mode controllers do not currently properly support nested transaction controllers of either type.
+
Descriptive name for this controller that is shown in the tree, and used to name the transaction.
Yes
+
Generate Parent Sample
+ If checked, then the sample is generated as a parent of the other samples,
+ otherwise the sample is generated as an independent sample.
+
Yes
+
Include duration of timer and pre-post processors in generated sample
+ Whether to include timer, pre- and post-processing delays in the generated sample.
+ Default is false (since JMeter 2.11, in previous versions the default value is true).
+
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
+recording using the HTTP(S) Test Script Recorder, all recorded samples will by default
+be saved under the Recording Controller.
The Critical Section Controller ensures that its children elements (samplers/controllers, etc) will be executed
+by only one thread as a named lock will be taken before executing children of controller.
+
+
+ The figure below shows an example of using Critical Section Controller, in the figure below 2 Critical Section Controllers ensure
+ that:
+
+
DS2-${__threadNum} is executed only by one thread at a time
+
DS4-${__threadNum} is executed only by one thread at a time
+
+Test Plan using Critical Section Controller
+
+
+
Lock that will be taken by controller, ensure you use different lock names for unrelated sections
Yes
+
+
+Critical Section Controller takes locks only within one JVM, so if using Distributed testing ensure your use case does not rely on all threads of all JVMs blocking.
+
+
+Most of the listeners perform several roles in addition to "listening"
+to the test results.
+They also provide means to view, save, and read saved test results.
+
Note that Listeners are processed at the end of the scope in which they are found.
+
+The saving and reading of test results is generic. The various
+listeners have a panel whereby one can specify the file to
+which the results will be written (or read from).
+By default, the results are stored as XML
+files, typically with a ".jtl" extension.
+Storing as CSV is the most efficient option, but is less detailed than XML (the other available option).
+
+
+Listeners do not process sample data in non-GUI mode, but the raw data will be saved if an output
+file has been configured.
+In order to analyse the data generated by a non-GUI test run, you need to load the file into the appropriate
+Listener.
+
+
+To read existing results and display them, use the file panel Browse button to open the file.
+
+
+Versions of JMeter up to 2.3.2 used to clear any current data before loading the new file.
+This is no longer done, thus allowing files to be merged.
+If the previous behaviour is required,
+use the menu item Run/Clear (Ctrl+Shift+E) or Run/Clear All (Ctrl+E) before loading the file.
+
+
Results can be read from XML or CSV format files.
+When reading from CSV results files, the header (if present) is used to determine which fields are present.
+In order to interpret a header-less CSV file correctly, the appropriate properties must be set in jmeter.properties.
+
+
+The file name can contain function and/or variable references.
+However variable references do not work in client-server mode (functions work OK).
+
+
Listeners can use a lot of memory if there are a lot of samples.
+Most of the listeners currently keep a copy of every sample in their scope, apart from:
+
+
+
Simple Data Writer
+
BeanShell/BSF Listener
+
Mailer Visualizer
+
Monitor Results
+
Summary Report
+
+
+The following Listeners no longer need to keep copies of every single sample.
+Instead, samples with the same elapsed time are aggregated.
+Less memory is now needed, especially if most samples only take a second or two at most.
+
+
+
Aggregate Report
+
Aggregate Graph
+
Distribution Graph
+
+
To minimise the amount of memory needed, use the Simple Data Writer, and use the CSV format.
+
+
+Versions of JMeter after 2.3.1 allow JMeter variables to be saved to the output files.
+This can only be specified using a property.
+See the Listener Sample Variables for details
+
+For full details on setting up the default items to be saved
+see the Listener Default Configuration documentation.
+For details of the contents of the output files,
+see the CSV log format or
+the XML log format.
+
+
The entries in jmeter.properties are used to define the defaults;
+these can be overriden for individual listeners by using the Configure button,
+as shown below.
+The settings in jmeter.properties also apply to the listener that is added
+by using the -l command-line flag.
+
+
+ The figure below shows an example of the result file configuration panel
+Result file configuration panel
+
+
+ Parameters
+
Attribute
Description
Required
+
Filename
Name of the file containing sample results.
+ The file name can be specified using either a relative or an absolute path name.
+ Relative paths are resolved relative to the current working directory (which defaults to the bin/ directory).
+ Versions of JMeter after 2.4 also support paths relative to the directory containing the current test plan (JMX file).
+ If the path name begins with "~/" (or whatever is in the jmeter.save.saveservice.base_prefix JMeter property),
+ then the path is assumed to be relative to the JMX file location.
+
No
+
Browse...
File Browse Button
No
+
Errors
Select this to write/read only results with errors
No
+
Successes
Select this to write/read only results without errors.
+ If neither Errors nor Successes is selected, then all results are processed.
+Listeners can be configured to save different items to the result log files (JTL) by using the Config popup as shown below.
+The defaults are defined as described in the Listener Default Configuration documentation.
+Items with (CSV) after the name only apply to the CSV format; items with (XML) only apply to XML format.
+CSV format cannot currently be used to save any items that include line-breaks.
+
+
+Note that cookies, method and the query string are saved as part of the "Sampler Data" option.
+
+Graph Results MUST NOT BE USED during load test as it consumes a lot of resources (memory and CPU). Use it only for either functional testing or
+during Test Plan debugging and Validation.
+
+
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.
+
The throughput number represents the actual number of requests/minute the server handled. This calculation
+includes any delays you added to your test and JMeter's own internal processing time. The advantage
+of doing the calculation like this is that this number represents something
+real - your server in fact handled that many requests per minute, and you can increase the number of threads
+and/or decrease the delays to discover your server's maximum throughput. Whereas if you made calculations
+that factored out delays and JMeter's processing, it would be unclear what you could conclude from that
+number.
+
The following table briefly describes the items on the graph.
+Further details on the precise meaning of the statistical terms can be found on the web
+ - e.g. Wikipedia - or by consulting a book on statistics.
+
Throughput - plot the number of samples per unit of time
+
+
The individual figures at the bottom of the display are the current values.
+ "Latest Sample" is the current elapsed sample time, shown on the graph as "Data".
+
The value displayed on the top left of graph is the max of 90th percentile of response time.
+Spline Visualizer MUST NOT BE USED during load test as it consumes a lot of resources (memory and CPU). Use it only for either functional testing or
+during Test Plan debugging and Validation.
+
+
+
+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.
+
+
+The graph is automatically scaled to fit within the window.
+This needs to be borne in mind when comparing graphs.
+
+Assertion Results MUST NOT BE USED during load test as it consumes a lot of resources (memory and CPU). Use it only for either functional testing or
+during Test Plan debugging and Validation.
+
+
The Assertion Results visualizer shows the Label of each sample taken.
+It also reports failures of any Assertions that
+are part of the test plan.
+View Results Tree MUST NOT BE USED during load test as it consumes a lot of resources (memory and CPU). Use it only for either functional testing or
+during Test Plan debugging and Validation.
+
+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.
+Note that the Request panel only shows the headers added by JMeter.
+It does not show any headers (such as Host) that may be added by the HTTP protocol implementation.
+
+There are several ways to view the response, selectable by a drop-down box at the bottom of the left hand panel.
+
+
+
Renderer
Description
+
CSS/JQuery Tester
+
The CSS/JQuery Tester only works for text responses. It shows the plain text in the upper panel.
+The "Test" button allows the user to apply the CSS/JQuery to the upper panel and the results
+will be displayed in the lower panel.
+The engine of CSS/JQuery expression can be JSoup or Jodd, syntax of these 2 implementation differs slightly.
+For example, the Selector a[class=sectionlink] with attribute href applied to the current JMeter functions page gives the following output:
+
+
+Match count: 74
+Match[1]=#functions
+Match[2]=#what_can_do
+Match[3]=#where
+Match[4]=#how
+Match[5]=#function_helper
+Match[6]=#functions
+Match[7]=#__regexFunction
+Match[8]=#__regexFunction_parms
+Match[9]=#__counter
+... and so on ...
+
+
+
Document
+
The Document view will show the extract text from various type of documents like Microsoft Office
+(Word, Excel, PowerPoint 97-2003, 2007-2010 (openxml), Apache OpenOffice (writer, calc, impress), HTML,
+gzip, jar/zip files (list of content), and some meta-data on "multimedia" files like mp3, mp4, flv, etc. The complete list of
+support format is available on Apache Tika format page.
+
+Note: A requirement to the Document view is to download the
+Apache Tika binary package (tika-app-x.x.jar) and put this in JMETER_HOME/lib directory.
+
+If the document is larger than 10 MB, then it won't be displayed.
+To change this limit, set the JMeter property document.max_size (unit is byte) or set to 0 to remove the limit.
+
+
HTML
+
The HTML view attempts to render the response as
+HTML. The rendered HTML is likely to compare poorly to the view one
+would get in any web browser; however, it does provide a quick
+approximation that is helpful for initial result evaluation.
+Images, style-sheets, etc. aren't downloaded.
+
+
HTML (download resources)
+
If the HTML (download resources) view option is selected, the renderer
+may download images, style-sheets, etc. referenced by the HTML code.
+
+
JSON
+
The JSON view will show the response in tree style (also handles JSON embedded in JavaScript).
+
+
Regexp Tester
+
The Regexp Tester view only works for text responses. It shows the plain text in the upper panel.
+The "Test" button allows the user to apply the Regular Expression to the upper panel and the results
+will be displayed in the lower panel.
+The engine of regular expression is the same that the Regular Expression Extractor.
+For example, the RE (JMeter\w*).* applied to the current JMeter home page gives the following output:
+
+
+Match count: 26
+Match[1][0]=JMeter - Apache JMeter</title>
+Match[1][1]=JMeter
+Match[2][0]=JMeter" title="JMeter" border="0"/></a>
+Match[2][1]=JMeter
+Match[3][0]=JMeterCommitters">Contributors</a>
+Match[3][1]=JMeterCommitters
+... and so on ...
+
+
+The first number in [] is the match number; the second number is the group.
+Group [0] is whatever matched the whole RE.
+Group [1] is whatever matched the 1st group, i.e. (JMeter\w*) in this case.
+See Figure 9b (below).
+
+
Text
+
+The default Text view shows all of the text contained in the response.
+Note that this will only work if the response content-type is considered to be text.
+If the content-type begins with any of the following, it is considered as binary,
+otherwise it is considered to be text.
+
+image/
+audio/
+video/
+
+
+
XML
+
The XML view will show response in tree style.
+Any DTD nodes or Prolog nodes will not show up in tree; however, response may contain those nodes.
+
+
XPath Tester
+
The XPath Tester only works for text responses. It shows the plain text in the upper panel.
+The "Test" button allows the user to apply the XPath query to the upper panel and the results
+will be displayed in the lower panel.
+
+
+
Scroll automatically? option permit to have last node display in tree selection
+
+With Search option, most of the views also allow the displayed data to be searched; the result of the search will be high-lighted
+in the display above. For example the Control panel screenshot below shows one result of searching for "Java".
+Note that the search operates on the visible text, so you may get different results when searching
+the Text and HTML views.
+ Note: The regular expression uses the Java engine (not ORO engine like the Regular Expression Extractor or Regexp Tester view).
+
+
+If there is no content-type provided, then the content
+will not be displayed in the any of the Response Data panels.
+You can use Save Responses to a file to save the data in this case.
+Note that the response data will still be available in the sample result,
+so can still be accessed using Post-Processors.
+
+
If the response data is larger than 200K, then it won't be displayed.
+To change this limit, set the JMeter property view.results.tree.max_size.
+You can also use save the entire response to a file using
+Save Responses to a file.
+
+
+Additional renderers can be created.
+The class must implement the interface org.apache.jmeter.visualizers.ResultRenderer
+and/or extend the abstract class org.apache.jmeter.visualizers.SamplerResultTab, and the
+compiled code must be available to JMeter (e.g. by adding it to the lib/ext directory).
+
+
+
+ The Control Panel (above) shows an example of an HTML display.
+ Figure 9 (below) shows an example of an XML display.
+ Figure 9a (below) shows an example of an Regexp tester display.
+ Figure 9b (below) shows an example of an Document display.
+
+Figure 9 Sample XML display
+Figure 9a Sample Regexp Test display
+Figure 9b Sample Document (here PDF) display
+
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, approximate throughput (request/second) and Kilobytes per second throughput.
+Once the test is done, the throughput is the actual through for the duration of the entire test.
+
+The thoughput is calculated from the point of view of the sampler target
+(e.g. the remote server in the case of HTTP samples).
+JMeter takes into account the total time over which the requests have been generated.
+If other samplers and timers are in the same thread, these will increase the total time,
+and therefore reduce the throughput value.
+So two identical samplers with different names will have half the throughput of two samplers with the same name.
+It is important to choose the sampler names correctly to get the best results from
+the Aggregate Report.
+
+
+Calculation of the Median and 90% Line (90thpercentile) values requires additional memory.
+JMeter now combines samples with the same elapsed time, so far less memory is used.
+However, for samples that take more than a few seconds, the probability is that fewer samples will have identical times,
+in which case more memory will be needed.
+Note you can use this listener afterwards to reload a CSV or XML results file which is the recommended way to avoid performance impacts.
+See the Summary Report for a similar Listener that does not store individual samples and so needs constant memory.
+
+
+Starting with JMeter 2.12, you can configure the 3 percentile values you want to compute, this can be done by setting properties:
+
Label - The label of the sample.
+If "Include group name in label?" is selected, then the name of the thread group is added as a prefix.
+This allows identical labels from different thread groups to be collated separately if required.
+
+
# Samples - The number of samples with the same label
+
Average - The average time of a set of results
+
Median - The median is the time in the middle of a set of results.
+50% of the samples took no more than this time; the remainder took at least as long.
+
90% Line - 90% of the samples took no more than this time.
+The remaining samples took at least as long as this. (90thpercentile)
+
95% Line - 95% of the samples took no more than this time.
+The remaining samples took at least as long as this. (95thpercentile)
+
99% Line - 99% of the samples took no more than this time.
+The remaining samples took at least as long as this. (99thpercentile)
+
Min - The shortest time for the samples with the same label
+
Max - The longest time for the samples with the same label
+
Error % - Percent of requests with errors
+
Throughput - the Throughput is measured in requests per second/minute/hour.
+The time unit is chosen so that the displayed rate is at least 1.0.
+When the throughput is saved to a CSV file, it is expressed in requests/second,
+i.e. 30.0 requests/minute is saved as 0.5.
+
+
Kb/sec - The throughput measured in Kilobytes per second
+
+
Times are in milliseconds.
+
+
+
+ The figure below shows an example of selecting the "Include group name" checkbox.
+Sample "Include group name" display
+
This visualizer creates a row for every sample result.
+Like the View Results Tree, this visualizer uses a lot of memory.
+
+By default, it only displays the main (parent) samples; it does not display the sub-samples (child samples).
+Versions of JMeter after 2.5.1 have a "Child Samples?" check-box.
+If this is selected, then the sub-samples are displayed instead of the main samples.
+
This listener can record results to a file
+but not to the UI. It is meant to provide an efficient means of
+recording data by eliminating GUI overhead.
+When running in non-GUI mode, the -l flag can be used to create a data file.
+The fields to save are defined by JMeter properties.
+See the jmeter.properties file for details.
+
Monitor Results is a new Visualizer for displaying server
+status. It is designed for Tomcat 5, but any servlet container
+can port the status servlet and use this monitor. There are two primary
+tabs for the monitor. The first is the "Health" tab, which will show the
+status of one or more servers. The second tab labled "Performance" shows
+the performance for one server for the last 1000 samples. The equations
+used for the load calculation is included in the Visualizer.
+
Currently, the primary limitation of the monitor is system memory. A
+quick benchmark of memory usage indicates a buffer of 1000 data points for
+100 servers would take roughly 10Mb of RAM. On a 1.4Ghz centrino
+laptop with 1Gb of ram, the monitor should be able to handle several
+hundred servers.
+
As a general rule, monitoring production systems should take care to
+set an appropriate interval. Intervals shorter than 5 seconds are too
+aggressive and have a potential of impacting the server. With a buffer of
+1000 data points at 5 second intervals, the monitor would check the server
+status 12 times a minute or 720 times a hour. This means the buffer shows
+the performance history of each machine for the last hour.
+
+The monitor requires Tomcat 5 or above.
+Use a browser to check that you can access the Tomcat status servlet OK.
+
+Distribution Graph MUST NOT BE USED during load test as it consumes a lot of resources (memory and CPU). Use it only for either functional testing or
+during Test Plan debugging and Validation.
+
+
+
The distribution graph will display a bar for every unique response time. Since the
+granularity of System.currentTimeMillis() is 10 milliseconds, the 90% threshold should be
+within the width of the graph. The graph will draw two threshold lines: 50% and 90%.
+What this means is 50% of the response times finished between 0 and the line. The same
+is true of 90% line. Several tests with Tomcat were performed using 30 threads for 600K
+requests. The graph was able to display the distribution without any problems and both
+the 50% and 90% line were within the width of the graph. A performant application will
+generally produce results that clump together. A poorly written application that has
+memory leaks may result in wild fluctuations. In those situations, the threshold lines
+may be beyond the width of the graph. The recommended solution to this specific problem
+is fix the webapp so it performs well. If your test plan produces distribution graphs
+with no apparent clumping or pattern, it may indicate a memory leak. The only way to
+know for sure is to use a profiling tool.
The aggregate graph is similar to the aggregate report. The primary
+difference is the aggregate graph provides an easy way to generate bar graphs and save
+the graph as a PNG file.
+
+
+ The figure below shows an example of settings to draw this graph.
+Aggregate graph settings
+
+
+
Please note: All this parameters aren't saved in JMeter jmx script.
Columns to display: Choose the column(s) to display in graph.
+
Rectangles color: Clic on right color rectangle open a popup dialog to choose a custom color for column.
+
Foreground color Allow to change the value text color.
+
Value font: Allow to define font settings for the text.
+
Draw outlines bar? To draw or not the border line on bar chart
+
Show number grouping? Show or not the number grouping in Y Axis labels.
+
Value labels vertical? Change orientation for value label. (Default is horizontal)
+
Column label selection: Filter by result label. A regular expression can be used, example: .*Transaction.*
+ Before display the graph, click on Apply filter button to refresh internal data.
Yes
+
Title
Define the graph's title on the head of chart. Empty value is the default value : "Aggregate Graph".
+ The button Synchronize with name define the title with the label of the listener. And define font settings for graph title
No
+
Graph size
Compute the graph size by the width and height depending of the current JMeter's window size.
+ Use Width and Height fields to define a custom size. The unit is pixel.
No
+
X Axis settings
Define the max length of X Axis label (in pixel).
No
+
Y Axis settings
Define a custom maximum value for Y Axis.
No
+
Legend
Define the placement and font settings for chart legend
+The Response Time Graph draws a line chart showing the evolution of response time during the test, for each labelled request.
+If many samples exist for the same timestamp, the mean value is displayed.
+
+
+
+ The figure below shows an example of settings to draw this graph.
+Response time graph settings
+
+
+
Please note: All this parameters are saved in JMeter .jmx file.
The time in milli-seconds for X axis interval. Samples are grouped according to this value.
+ Before display the graph, click on Apply interval button to refresh internal data.
Yes
+
Sampler label selection
Filter by result label. A regular expression can be used, ex..*Transaction.*.
+ Before display the graph, click on Apply filter button to refresh internal data.
No
+
Title
Define the graph's title on the head of chart. Empty value is the default value : "Response Time Graph".
+ The button Synchronize with name define the title with the label of the listener. And define font settings for graph title
No
+
Line settings
Define the width of the line. Define the type of each value point. Choose none to have a line without mark
Yes
+
Graph size
Compute the graph size by the width and height depending of the current JMeter's window size.
+ Use Width and Height fields to define a custom size. The unit is pixel.
No
+
X Axis settings
Customize the date format of X axis label.
+ The syntax is the Java SimpleDateFormat API.
No
+
Y Axis settings
Define a custom maximum value for Y Axis in milli-seconds. Define the increment for the scale (in ms) Show or not the number grouping in Y Axis labels.
No
+
Legend
Define the placement and font settings for chart legend
Descriptive name for this element that is shown in the tree.
No
+
From
Email address to send messages from.
Yes
+
Addressee(s)
Email address to send messages to, comma-separated.
Yes
+
Success Subject
Email subject line for success messages.
No
+
Success Limit
Once this number of successful responses is exceeded
+ after previously reaching the failure limit, a success email
+ is sent. The mailer will thus only send out messages in a sequence of failed-succeeded-failed-succeeded, etc.
Yes
+
Failure Subject
Email subject line for fail messages.
No
+
Failure Limit
Once this number of failed responses is exceeded, a failure
+ email is sent - i.e. set the count to 0 to send an e-mail on the first failure.
Yes
+
+
Host
IP address or host name of SMTP server (email redirector)
+ server.
No
+
Port
Port of SMTP server (defaults to 25).
No
+
Login
Login used to authenticate.
No
+
Password
Password used to authenticate.
No
+
Connection security
Type of encryption for SMTP authentication (SSL, TLS or none).
No
+
+
Test Mail
Press this button to send a test mail
No
+
Failures
A field that keeps a running total of number
+ of failures so far received.
+The BeanShell Listener allows the use of BeanShell for processing samples for saving etc.
+
+
+For full details on using BeanShell, please see the BeanShell website.
+
+
+The test element supports the ThreadListener and TestListener methods.
+These should be defined in the initialisation file.
+See the file BeanShellListeners.bshrc for example definitions.
+
Descriptive name for this element that is shown in the tree.
+ The name is stored in the script variable Label
+
Reset bsh.Interpreter before each call
+ If this option is selected, then the interpreter will be recreated for each sample.
+ This may be necessary for some long running scripts.
+ For further information, see Best Practices - BeanShell scripting.
+
Yes
+
Parameters
Parameters to pass to the BeanShell script.
+ The parameters are stored in the following variables:
+
+
Parameters - string containing the parameters as a single variable
+
bsh.args - String array containing parameters, split on white-space
+
No
+
Script file
A file containing the BeanShell script to run.
+ The file name is stored in the script variable FileName
No
+
Script
The BeanShell script to run. The return value is ignored.
Yes (unless script file is provided)
+
+
Before invoking the script, some variables are set up in the BeanShell interpreter:
+
+
log - (Logger) - can be used to write to the log file
sampleEvent (SampleEvent) gives access to the current sample event
+
+
For details of all the methods available on each of the above variables, please check the Javadoc
+
If the property beanshell.listener.init is defined, this is used to load an initialisation file, which can be used to define methods etc for use in the BeanShell script.
The summary report creates a table row for each differently named request in your
+test. This is similar to the Aggregate Report , except that it uses less memory.
+
+The thoughput is calculated from the point of view of the sampler target
+(e.g. the remote server in the case of HTTP samples).
+JMeter takes into account the total time over which the requests have been generated.
+If other samplers and timers are in the same thread, these will increase the total time,
+and therefore reduce the throughput value.
+So two identical samplers with different names will have half the throughput of two samplers with the same name.
+It is important to choose the sampler labels correctly to get the best results from
+the Report.
+
+
+
Label - The label of the sample.
+If "Include group name in label?" is selected, then the name of the thread group is added as a prefix.
+This allows identical labels from different thread groups to be collated separately if required.
+
+
# Samples - The number of samples with the same label
+
Average - The average elapsed time of a set of results
+
Min - The lowest elapsed time for the samples with the same label
+
Max - The longest elapsed time for the samples with the same label
Throughput - the Throughput is measured in requests per second/minute/hour.
+The time unit is chosen so that the displayed rate is at least 1.0.
+When the throughput is saved to a CSV file, it is expressed in requests/second,
+i.e. 30.0 requests/minute is saved as 0.5.
+
+
Kb/sec - The throughput measured in Kilobytes per second
+
Avg. Bytes - average size of the sample response in bytes. (in JMeter 2.2 it wrongly showed the value in kB)
+
+
Times are in milliseconds.
+
+
+
+ The figure below shows an example of selecting the "Include group name" checkbox.
+Sample "Include group name" display
+
+ This test element can be placed anywhere in the test plan.
+ For each sample in its scope, it will create a file of the response Data.
+ The primary use for this is in creating functional tests, but it can also
+ be useful where the response is too large to be displayed in the
+ View Results Tree Listener.
+ The file name is created from the specified prefix, plus a number (unless this is disabled, see below).
+ The file extension is created from the document type, if known.
+ If not known, the file extension is set to 'unknown'.
+ If numbering is disabled, and adding a suffix is disabled, then the file prefix is
+ taken as the entire file name. This allows a fixed file name to be generated if required.
+ The generated file name is stored in the sample response, and can be saved
+ in the test log output file if required.
+
+
+ The current sample is saved first, followed by any sub-samples (child samples).
+ If a variable name is provided, then the names of the files are saved in the order
+ that the sub-samples appear. See below.
+
Descriptive name for this element that is shown in the tree.
No
+
Filename Prefix
Prefix for the generated file names; this can include a directory name.
+ Relative paths are resolved relative to the current working directory (which defaults to the bin/ directory).
+ Versions of JMeter after 2.4 also support paths relative to the directory containing the current test plan (JMX file).
+ If the path name begins with "~/" (or whatever is in the jmeter.save.saveservice.base_prefix JMeter property),
+ then the path is assumed to be relative to the JMX file location.
+
Yes
+
Variable Name
+ Name of a variable in which to save the generated file name (so it can be used later in the test plan).
+ If there are sub-samples then a numeric suffix is added to the variable name.
+ E.g. if the variable name is FILENAME, then the parent sample file name is saved in the variable FILENAME,
+ and the filenames for the child samplers are saved in FILENAME1, FILENAME2 etc.
+
No
+
Save Failed Responses only
If selected, then only failed responses are saved
Yes
+
Save Successful Responses only
If selected, then only successful responses are saved
Yes
+
Don't add number to prefix
If selected, then no number is added to the prefix. If you select this option, make sure that the prefix is unique or the file may be overwritten.
Yes
+
Don't add suffix
If selected, then no suffix is added. If you select this option, make sure that the prefix is unique or the file may be overwritten.
This test element can be placed anywhere in the test plan.
+Generates a summary of the test run so far to the log file and/or
+standard output. Both running and differential totals are shown.
+Output is generated every n seconds (default 30 seconds) on the appropriate
+time boundary, so that multiple test runs on the same time will be synchronised.
+See jmeter.properties file for the summariser configuration items:
+
+# Define the following property to automatically start a summariser with that name
+# (applies to non-GUI mode only)
+#summariser.name=summary
+#
+# interval between summaries (in seconds) default 3 minutes
+#summariser.interval=30
+#
+# Write messages to log file
+#summariser.log=true
+#
+# Write messages to System.out
+#summariser.out=true
+
+This element is mainly intended for batch (non-GUI) runs.
+The output looks like the following:
+
+The "label" is the the name of the element.
+The "+" means that the line is a delta line, i.e. shows the changes since the last output.
+The "=" means that the line is a totals line, i.e. it shows the running total.
+Entries in the jmeter log file also include time-stamps.
+The example "806 in 91.6s = 8.8/s" means that there were 806 samples recorded in 91.6 seconds,
+and that works out at 8.8 samples per second.
+The Avg (Average), Min(imum) and Max(imum) times are in milliseconds.
+"Err" means number of errors (also shown as percentage).
+The last two lines will appear at the end of a test.
+They will not be synchronised to the appropriate time boundary.
+Note that the initial and final deltas may be for less than the interval (in the example above this is 30 seconds).
+The first delta will generally be lower, as JMeter synchronizes to the interval boundary.
+The last delta will be lower, as the test will generally not finish on an exact interval boundary.
+
+The label is used to group sample results together.
+So if you have multiple Thread Groups and want to summarize across them all, then use the same label
+ - or add the summariser to the Test Plan (so all thread groups are in scope).
+Different summary groupings can be implemented
+by using suitable labels and adding the summarisers to appropriate parts of the test plan.
+
+
+In Non-GUI mode by default a Generate Summary Results listener named "summariser" is configured, if you have already added one to your Test Plan, ensure you name it differently
+otherwise results will be accumulated under this label (summary) leading to wrong results (sum of total samples + samples located under the Parent of Generate Summary Results listener).
+This is not a bug but a design choice allowing to summarize across thread groups.
+
Descriptive name for this element that is shown in the tree.
+ It appears as the "label" in the output. Details for all elements with the same label will be added together.
+
+The backend listener is an Asynchronous listener that enables you to plug custom implementations of BackendListenerClient.
+By default, a Graphite implementation is provided.
+
org.apache.jmeter.visualizers.backend.graphite.TextGraphiteMetricsSender or org.apache.jmeter.visualizers.backend.graphite.PickleGraphiteMetricsSender
Yes
+
graphiteHost
Graphite or InfluxDB (with Graphite plugin enabled) server host
Yes
+
graphitePort
Graphite or InfluxDB (with Graphite plugin enabled) server port, defaults to 2003. Note PickleGraphiteMetricsSender (port 2004) can only talk to Graphite server.
Yes
+
rootMetricsPrefix
Prefix of metrics sent to backend. Defaults to "jmeter."
Yes
+
summaryOnly
Only send a summary with no detail. Defaults to true.
Yes
+
samplersList
Semicolon separated list of samplers for which you want to report metrics to backend.
Yes
+
percentiles
The percentiles you want to send to backend. List must be semicolon separated.
+
+ Configuration elements can be used to set up defaults and variables for later use by samplers.
+ Note that these elements are processed at the start of the scope in which they are found,
+ i.e. before any samplers in the same scope.
+
+
+ CSV Data Set Config is used to read lines from a file, and split them into variables.
+ It is easier to use than the __CSVRead() and _StringFromFile() functions.
+ It is well suited to handling large numbers of variables, and is also useful for tesing with
+ "random" and unique values.
+ Generating unique random values at run-time is expensive in terms of CPU and memory, so just create the data
+ in advance of the test. If necessary, the "random" data from the file can be used in conjunction with
+ a run-time parameter to create different sets of values from each run - e.g. using concatenation - which is
+ much cheaper than generating everything at run-time.
+
+
+ Versions of JMeter after 2.3.1 allow values to be quoted; this allows the value to contain a delimiter.
+ Previously it was necessary to choose a delimiter that was not used in any values.
+ If "allow quoted data" is enabled, a value may be enclosed in double-quotes.
+ These are removed. To include double-quotes within a quoted field, use two double-quotes.
+ For example:
+1,"2,3","4""5" =>
+1
+2,3
+4"5
+
+
+
+ Versions of JMeter after 2.3.4 support CSV files which have a header line defining the column names.
+ To enable this, leave the "Variable Names" field empty. The correct delimiter must be provided.
+
+
+ Versions of JMeter after 2.7 support CSV files with quoted data that includes new-lines.
+
+
+ By default, the file is only opened once, and each thread will use a different line from the file.
+ However the order in which lines are passed to threads depends on the order in which they execute,
+ which may vary between iterations.
+ Lines are read at the start of each test iteration.
+ The file name and mode are resolved in the first iteration.
+
+
+ See the description of the Share mode below for additional options (JMeter 2.3.2+).
+ If you want each thread to have its own set of values, then you will need to create a set of files,
+ one for each thread. For example test1.csv, test2.csv,... testn.csv. Use the filename
+ test${__threadNum}.csv and set the "Sharing mode" to "Current thread".
+
+
CSV Dataset variables are defined at the start of each test iteration.
+ As this is after configuration processing is completed,
+ they cannot be used for some configuration items - such as JDBC Config -
+ that process their contents at configuration time (see
+ Bug
+ 40394)
+ However the variables do work in the HTTP Auth Manager, as the username etc are processed at run-time.
+
+
+ As a special case, the string "\t" (without quotes) in the delimiter field is treated as a Tab.
+
+
+ When the end of file (EOF) is reached, and the recycle option is true, reading starts again with the first line of the file.
+
+
+ If the recycle option is false, and stopThread is false, then all the variables are set to <EOF> when the end of file is reached.
+ This value can be changed by setting the JMeter property csvdataset.eofstring.
+
+
+ If the Recycle option is false, and Stop Thread is true, then reaching EOF will cause the thread to be stopped.
+
Descriptive name for this element that is shown in the tree.
+
Filename
Name of the file to be read.
+ Relative file names are resolved with respect to the path of the active test plan.
+ For distributed testing, the CSV file must be stored on the server host system in the correct relative directory to where the jmeter server is started.
+ Absolute file names are also supported, but note that they are unlikely to work in remote mode,
+ unless the remote server has the same directory structure.
+ If the same physical file is referenced in two different ways - e.g. csvdata.txt and ./csvdata.txt -
+ then these are treated as different files.
+ If the OS does not distinguish between upper and lower case, csvData.TXT would also be opened separately.
+
Yes
+
File Encoding
The encoding to be used to read the file, if not the platform default.
No
+
Variable Names
List of variable names (comma-delimited).
+ Versions of JMeter after 2.3.4 support CSV header lines:
+ if the variable name field empty, then the first line of the file is read and interpreted as the list of column names.
+ The names must be separated by the delimiter character. They can be quoted using double-quotes.
+
Yes
+
Delimiter
Delimiter to be used to split the records in the file.
+ If there are fewer values on the line than there are variables the remaining variables are not updated -
+ so they will retain their previous value (if any).
Yes
+
Allow quoted data?
Should the CSV file allow values to be quoted?
+ If enabled, then values can be enclosed in " - double-quote - allowing values to contain a delimeter.
+
Yes
+
Recycle on EOF?
Should the file be re-read from the beginning on reaching EOF? (default is true)
Yes
+
Stop thread on EOF?
Should the thread be stopped on EOF, if Recycle is false? (default is false)
Yes
+
Sharing mode
+
+
All threads - (the default) the file is shared between all the threads.
+
Current thread group - each file is opened once for each thread group in which the element appears
+
Current thread - each file is opened separately for each thread
+
Identifier - all threads sharing the same identifier share the same file.
+ So for example if you have 4 thread groups, you could use a common id for two or more of the groups
+ to share the file between them.
+ Or you could use the thread number to share the file between the same thread numbers in different thread groups.
+
DNS Cache Manager is designed for using in the root of Thread Group or Test Plan. Do not place it as child element of particular HTTP Sampler
+
+
DNS Cache Manager working only with the HTTP request using HTTPClient4 implementation.
+
The DNS Cache Manager element allows to test applications, which have several servers behind load balancers (CDN, etc),
+ when user receives content from different IP's. By default JMeter uses JVM DNS cache. That's why
+ only one server from the cluster receives load. DNS Cache Manager resolves name for each thread separately each iteration and
+ saves results of resolving to its internal DNS Cache, which independent from both JVM and OS DNS caches.
+
If there is more than one Authorization Manager in the scope of a Sampler,
+there is currently no way to specify which one is to be used.
+
+
+
The Authorization Manager lets you specify one or more user logins for web pages that are
+restricted using server authentication. You see this type of authentication when you use
+your browser to access a restricted page, and your browser displays a login dialog box. JMeter
+transmits the login information when it encounters this type of page.
+
+The Authorisation headers may not be shown in the Tree View Listener "Request" tab.
+The Java implementation does pre-emptive authentication, but it does not
+return the Authorization header when JMeter fetches the headers.
+The Commons HttpClient (3.1) implementation defaults to pre-emptive and the header will be shown.
+The HttpComponents implementation does not do pre-emptive auth
+(it is supported by the library but JMeter does not enable it)
+
+
+In versions of JMeter after 2.2, the HttpClient sampler defaults to pre-emptive authentication
+if the setting has not been defined. To disable this, set the values as below, in which case
+authentication will only be performed in response to a challenge.
+
+Note: the above settings only apply to the HttpClient sampler (and the SOAP samplers, which use Httpclient).
+
+
+When looking for a match against a URL, JMeter checks each entry in turn, and stops when it finds the first match.
+Thus the most specific URLs should appear first in the list, followed by less specific ones.
+Duplicate URLs will be ignored.
+If you want to use different usernames/passwords for different threads, you can use variables.
+These can be set up using a CSV Data Set Config Element (for example).
+
Descriptive name for this element that is shown in the tree.
No
+
Clear auth on each iteration ?
Used by Kerberos authentication. If checked, authentication will be done on each iteration of Main Thread Group loop even if it has already been done in a previous one.
+ This is usually useful if each main thread group iteration represents behaviour of one Virtual User.
+
Yes
+
Base URL
A partial or complete URL that matches one or more HTTP Request URLs. As an example,
+say you specify a Base URL of "http://jmeter.apache.org/restricted/" with a username of "jmeter" and
+a password of "jmeter". If you send an HTTP request to the URL
+"http://jmeter.apache.org/restricted/ant/myPage.html", the Authorization Manager sends the login
+information for the user named, "jmeter".
Yes
+
Username
The username to authorize.
Yes
+
Password
The password for the user. (N.B. this is stored unencrypted in the test plan)
Yes
+
Domain
The domain to use for NTLM.
No
+
Realm
The realm to use for NTLM.
No
+
Mechanism
Type of authentication to perform. JMeter can perform different types of authentications based on used Http Samplers:
+
+
Sampler
Authentications
+
Java
BASIC
+
HttpClient 3.1
BASIC, DIGEST
+
HttpClient 4
BASIC, DIGEST and Kerberos
+
+
No
+
+
+The Realm only applies to the HttpClient sampler.
+In JMeter 2.2, the domain and realm did not have separate columns, and were encoded as part of
+the user name in the form: [domain\]username[@realm].
+This was an experimental feature and has been removed.
+
+
+Kerberos Configuration:
+
To configure Kerberos you need to setup at least two JVM system properties:
+
+
-Djava.security.krb5.conf=krb5.conf
+
-Djava.security.auth.login.config=jaas.conf
+
+You can also configure those two properties in the file bin/system.properties.
+Look at the two sample configuration files (krb5.conf and jaas.conf) located in the jmeter bin folder
+for references to more documentation, and tweak them to match your Kerberos configuration.
+
+
+When generating a SPN for Kerberos SPNEGO authentication IE and Firefox will omit the port number
+from the url. Chrome has an option (--enable-auth-negotiate-port) to include the port
+number if it differs from the standard ones (80 and 443). That behavior
+can be emulated by setting the following jmeter property as below.
+
+
+In jmeter.properties or user.properties, set:
+
+
kerberos.spnego.strip_port=false
+
+
+
+Controls:
+
+
Add Button - Add an entry to the authorization table.
+
Delete Button - Delete the currently selected table entry.
+
Load Button - Load a previously saved authorization table and add the entries to the existing
+authorization table entries.
+
Save As Button - Save the current authorization table to a file.
+
+
+
When you save the Test Plan, JMeter automatically saves all of the authorization
+table entries - including any passwords, which are not encrypted.
Download this example. In this example, we created a Test Plan on a local server that sends three HTTP requests, two requiring a login and the
+other is open to everyone. See figure 10 to see the makeup of our Test Plan. On our server, we have a restricted
+directory named, "secret", which contains two files, "index.html" and "index2.html". We created a login id named, "kevin",
+which has a password of "spot". So, in our Authorization Manager, we created an entry for the restricted directory and
+a username and password (see figure 11). The two HTTP requests named "SecretPage1" and "SecretPage2" make requests
+to "/secret/index.html" and "/secret/index2.html". The other HTTP request, named "NoSecretPage" makes a request to
+"/index.html".
+
+Figure 10 - Test Plan
+Figure 11 - Authorization Manager Control Panel
+
+
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.
+
+
You can download the Test Plan, but since it is built as a test for our local server, you will not
+be able to run it. However, you can use it as a reference in constructing your own Test Plan.
+The HTTP Cache Manager is used to add caching functionality to HTTP requests within its scope to simulate browser cache feature.
+Each Virtual User thread has its own Cache. By default, Cache Manager will store up to 5000 items in cache per Virtual User thread, using LRU algorithm.
+Use property "maxSize" to modify this value. Note that the more you increase this value the more HTTP Cache Manager will consume memory, so be sure to adapt -Xmx option accordingly.
+
+
+If a sample is successful (i.e. has response code 2xx) then the Last-Modified and Etag (and Expired if relevant) values are saved for the URL.
+Before executing the next sample, the sampler checks to see if there is an entry in the cache,
+and if so, the If-Last-Modified and If-None-Match conditional headers are set for the request.
+
+
+Additionally, if the "Use Cache-Control/Expires header" option is selected, then the Cache-Control/Expires value is checked against the current time.
+If the request is a GET request, and the timestamp is in the future, then the sampler returns immediately,
+without requesting the URL from the remote server. This is intended to emulate browser behaviour.
+Note that if Cache-Control header is "no-cache", the response will be stored in cache as pre-expired,
+so will generate a conditional GET request.
+If Cache-Control has any other value,
+the "max-age" expiry option is processed to compute entry lifetime, if missing then expire header will be used, if also missing entry will be cached
+as specified in RFC 2616 section 13.2.4. using Last-Modified time and response Date.
+
+
+If the requested document has not changed since it was cached, then the response body will be empty.
+Likewise if the Expires date is in the future.
+This may cause problems for Assertions.
+
If there is more than one Cookie Manager in the scope of a Sampler,
+there is currently no way to specify which one is to be used.
+Also, a cookie stored in one cookie manager is not available to any other manager,
+so use multiple Cookie Managers with care.
+
+
The Cookie Manager element has two functions:
+First, it stores and sends cookies just like a web browser. If you have an HTTP Request and
+the response contains a cookie, the Cookie Manager automatically stores that cookie and will
+use it for all future requests to that particular web site. Each JMeter thread has its own
+"cookie storage area". So, if you are testing a web site that uses a cookie for storing
+session information, each JMeter thread will have its own session.
+Note that such cookies do not appear on the Cookie Manager display, but they can be seen using
+the View Results Tree Listener.
+
+
+JMeter version 2.3.2 and earlier did not check that received cookies were valid for the URL.
+This meant that cross-domain cookies were stored, and might be used later.
+This has been fixed in later versions.
+To revert to the earlier behaviour, define the JMeter property "CookieManager.check.cookies=false".
+
+
+Received Cookies can be stored as JMeter thread variables
+(versions of JMeter after 2.3.2 no longer do this by default).
+To save cookies as variables, define the property "CookieManager.save.cookies=true".
+Also, cookies names are prefixed with "COOKIE_" before they are stored (this avoids accidental corruption of local variables)
+To revert to the original behaviour, define the property "CookieManager.name.prefix= " (one or more spaces).
+If enabled, the value of a cookie with the name TEST can be referred to as ${COOKIE_TEST}.
+
+
Second, you can manually add a cookie to the Cookie Manager. However, if you do this,
+the cookie will be shared by all JMeter threads.
+
Note that such Cookies are created with an Expiration time far in the future
+
+Since version 2.0.3, cookies with null values are ignored by default.
+This can be changed by setting the JMeter property: CookieManager.delete_null_cookies=false.
+Note that this also applies to manually defined cookies - any such cookies will be removed from the display when it is updated.
+Note also that the cookie name must be unique - if a second cookie is defined with the same name, it will replace the first.
+
Descriptive name for this element that is shown in the tree.
No
+
Clear Cookies each Iteration
If selected, all server-defined cookies are cleared each time the main Thread Group loop is executed.
+ In JMeter versions after 2.3, any cookies defined in the GUI are not cleared.
Yes
+
Cookie Policy
The cookie policy that will be used to manage the cookies.
+ "compatibility" is the default, and should work in most cases.
+ See http://hc.apache.org/httpclient-3.x/cookies.html and
+ http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/cookie/CookiePolicy.html
+ [Note: "ignoreCookies" is equivalent to omitting the CookieManager.]
+
Yes
+
Implementation
HC3CookieHandler (HttpClient 3.1 API) or HC4CookieHandler (HttpClient 4 API).
+ Default is HC3CookieHandler.
+
+ [Note: If you have a website to test with IPv6 address, choose HC4CookieHandler (IPv6 compliant)]
Yes
+
User-Defined Cookies
This
+ gives you the opportunity to use hardcoded cookies that will be used by all threads during the test execution.
+
+ The "domain" is the hostname of the server (without http://); the port is currently ignored.
+
No (discouraged, unless you know what you're doing)
+
Add Button
Add an entry to the cookie table.
N/A
+
Delete Button
Delete the currently selected table entry.
N/A
+
Load Button
Load a previously saved cookie table and add the entries to the existing
+cookie table entries.
N/A
+
Save As Button
+ Save the current cookie table to a file (does not save any cookies extracted from HTTP Responses).
+
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
+you add the 25 HTTP Request controllers, leave the "Server Name or IP" field empty. The controllers will inherit
+this field value from the HTTP Request Defaults element.
+
+In JMeter 2.2 and earlier, port 80 was treated specially - it was ignored if the sampler used the https protocol.
+JMeter 2.3 and later treat all port values equally; a sampler that does not specify a port will use the HTTP Request Defaults port, if one is provided.
+
Descriptive name for this element that is shown in the tree.
No
+
Server
Domain name or IP address of the web server. e.g. www.example.com. [Do not include the http:// prefix.
No
+
Port
Port the web server is listening to.
No
+
Connect Timeout
Connection Timeout. Number of milliseconds to wait for a connection to open.
No
+
Response Timeout
Response Timeout. Number of milliseconds to wait for a response.
No
+
Implementation
Java, HttpClient3.1, HttpClient4.
+ If not specified the default depends on the value of the JMeter property
+ jmeter.httpsampler, failing that, the Java implementation is used.
No
+
Protocol
HTTP or HTTPS.
No
+
Method
HTTP GET or HTTP POST.
No
+
Path
The path to resource (for example, /servlets/myServlet). If the
+ resource requires query string parameters, add them below in the "Send Parameters With the Request" section.
+ Note that the path is the default for the full path, not a prefix to be applied to paths
+ specified on the HTTP Request screens.
+
No
+
Send Parameters With the Request
The query string will
+ be generated from the list of parameters you provide. Each parameter has a name and
+ value. 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
+ multipart form specifications.
No
+
Server (proxy)
Hostname or IP address of a proxy server to perform request. [Do not include the http:// prefix.]
No
+
Port
Port the proxy server is listening to.
No, unless proxy hostname is specified
+
Username
(Optional) username for proxy server.
No
+
Password
(Optional) password for proxy server. (N.B. this is stored unencrypted in the test plan)
No
+
Retrieve All Embedded Resources from HTML Files
Tell JMeter to parse the HTML file
+and send HTTP/HTTPS requests for all images, Java applets, JavaScript files, CSSs, etc. referenced in the file.
+
No
+
Use concurrent pool
Use a pool of concurrent connections to get embedded resources.
No
+
Size
Pool size for concurrent connections used to get embedded resources.
No
+
Embedded URLs must match:
+ If present, this must be a regular expression that is used to match against any embedded URLs found.
+ So if you only want to download embedded resources from http://example.com/, use the expression:
+ http://example\.com/.*
+
No
+
+
+Note: radio buttons only have two states - on or off.
+This makes it impossible to override settings consistently
+- does off mean off, or does it mean use the current default?
+JMeter uses the latter (otherwise defaults would not work at all).
+So if the button is off, then a later element can set it on,
+but if the button is on, a later element cannot set it off.
+
The Header Manager lets you add or override HTTP request headers.
+
+Versions of JMeter up to 2.3.2 supported only one Header Manager per sampler;
+if there were more in scope, then only the last one would be used.
+
+
+JMeter now supports multiple Header Managers. The header entries are merged to form the list for the sampler.
+If an entry to be merged matches an existing header name, it replaces the previous entry,
+unless the entry value is empty, in which case any existing entry is removed.
+This allows one to set up a default set of headers, and apply adjustments to particular samplers.
+
Download this example. In this example, we created a Test Plan
+that tells JMeter to override the default "User-Agent" request header and use a particular Internet Explorer agent string
+instead. (see figures 12 and 13).
+
+Figure 12 - Test Plan
+Figure 13 - Header Manager Control Panel
+
Creates a database connection (used by JDBC RequestSampler)
+ from the supplied JDBC Connection settings. The connection may be optionally pooled between threads.
+ Otherwise each thread gets its own connection.
+ The connection configuration name is used by the JDBC Sampler to select the appropriate
+ connection.
+
Descriptive name for the connection configuration that is shown in the tree.
No
+
Variable Name
The name of the variable the connection is tied to.
+ Multiple connections can be used, each tied to a different variable, allowing JDBC Samplers
+ to select the appropriate connection.
+ Each name must be different. If there are two configuration elements using the same name,
+ only one will be saved. JMeter versions after 2.3 log a message if a duplicate name is detected.
+
Yes
+
Max Number of Connections
+ Maximum number of connections allowed in the pool.
+ In most cases, set this to zero (0).
+ This means that each thread will get its own pool with a single connection in it, i.e.
+ the connections are not shared betweeen threads.
+
+ If you really want to use shared pooling (why?), then set the max count to the same as the number of threads
+ to ensure threads don't wait on each other.
+
Yes
+
Pool timeout
Pool throws an error if the timeout period is exceeded in the
+ process of trying to retrieve a connection
Yes
+
Idle Cleanup Interval (ms)
This is used to specify how long idle connections will be maintained in the pool before being closed. For a complete explanation on how this works, see ResourceLimitingPool.trim() (Defaults to "60000", 1 minute)
Yes
+
Auto Commit
Turn auto commit on or off for the connections.
Yes
+
Keep-alive
The keep-alive is used enable a mechanism to monitor the health of connections. If a connection has not been used for Max Connection Age (ms) then before returning the connection from a call to getConnection(), the connection is first used to ping the database to make sure that it is still alive.
+ Setting the age allows the 5 second age to be overridden. Validation Query will be used to test it.
Yes
+
Max Connection Age (ms)
Controls the age mentionned in "Keep-Alive" property. It means connections not used for more than Max Connection Age will be tested
Yes
+
Validation Query
A simple query used to determine if the database is still
+ responding.
Yes
+
Database URL
JDBC Connection string for the database.
Yes
+
JDBC Driver class
Fully qualified name of driver class. (Must be in
+ JMeter's classpath - easiest to copy .jar file into JMeter's /lib directory).
Yes
+
Username
Name of user to connect as.
No
+
Password
Password to connect with. (N.B. this is stored unencrypted in the test plan)
No
+
+
Different databases and JDBC drivers require different JDBC settings.
+The Database URL and JDBC Driver class are defined by the provider of the JDBC implementation.
+
Some possible settings are shown below. Please check the exact details in the JDBC driver documentation.
+
+
+If JMeter reports No suitable driver, then this could mean either:
+
+
The driver class was not found. In this case, there will be a log message such as DataSourceElement: Could not load driver: {classname} java.lang.ClassNotFoundException: {classname}
+
The driver class was found, but the class does not support the connection string. This could be because of a syntax error in the connection string, or because the the wrong classname was used.
+
+If the database server is not running or is not accessible, then JMeter will report a java.net.ConnectException.
+
+
The Keystore Config Element lets you configure how Keystore will be loaded and which keys it will use.
+This component is typically used in HTTPS scenarios where you don't want to take into account keystore initialization into account in response time.
+
To use this element, you need to setup first a Java Key Store with the client certificates you want to test, to do that:
+
+
Create your certificates either with Java keytool utility or through your PKI
+
If created by PKI, import your keys in Java Key Store by converting them to a format acceptable by JKS
+
Then reference the keystore file through the 2 JVM properties (or add them in system.properties):
+
+
+preload.shortDescription=Preload Keystore before test. Setting is to true is usually the best option.
+startIndex.displayName=Alias Start index (0-based)
+startIndex.shortDescription=First index of Alias in Keystore
+endIndex.displayName=Alias End index (0-based)
+endIndex.shortDescription=Last index of Alias in Keystore. When using Variable name ensure it is large enough so that all keys are loaded at startup.
+clientCertAliasVarName.displayName=Variable name holding certificate alias
+clientCertAliasVarName.shortDescription=Variable name that will contain the alias to use for Cert authentication. Var content can come from CSV Data Set.
+
+
Descriptive name for this element that is shown in the tree.
No
+
Preload
Wether or not to preload Keystore. Setting is to true is usually the best option.
Yes
+
Variable name holding certificate alias
Variable name that will contain the alias to use for authentication by client certificate. Variable value will be filled from CSV Data Set for example. In the screenshot, "certificat_ssl" will also be a variable in CSV Data Set.
False
+
Alias Start Index
The index of the first key to use in Keystore, 0-based.
Yes
+
Alias End Index
The index of the last key to use in Keystore, 0-based. When using "Variable name holding certificate alias" ensure it is large enough so that all keys are loaded at startup.
Yes
+
+
+To make JMeter use more than one certificate you need to ensure that:
+
+
https.use.cached.ssl.context=false is set in jmeter.properties or user.properties
+
You use either HTTPClient 3.1 or 4 implementations for HTTP Request
Descriptive name for this element that is shown in the tree.
+
TCPClient classname
Name of the TCPClient class. Defaults to the property tcp.handler, failing that TCPClientImpl.
No
+
ServerName or IP
Name or IP of TCP server
+
Port Number
Port to be used
+
Re-use connection
If selected, the connection is kept open. Otherwise it is closed when the data has been read.
Yes
+
Close connection
If selected, the connection will be closed after running the sampler.
Yes
+
SO_LINGER
Enable/disable SO_LINGER with the specified linger time in seconds when a socket is created. If you set "SO_LINGER" value as 0, you may prevent large numbers of sockets sitting around with a TIME_WAIT status.
No
+
End of line(EOL) byte value
Byte value for end of line, set this to a value outside the range -128 to +127 to skip eol checking. You may set this in jmeter.properties file as well with eolByte property. If you set this in TCP Sampler Config and in jmeter.properties file at the same time, the setting value in the TCP Sampler Config will be used.
The User Defined Variables element lets you define an initial set of variables, just as in the Test Plan.
+
+Note that all the UDV elements in a test plan - no matter where they are - are processed at the start.
+
+So you cannot reference variables which are defined as part of a test run, e.g. in a Post-Processor.
+
+
+
+UDVs should not be used with functions that generate different results each time they are called.
+Only the result of the first function call will be saved in the variable.
+
+However, UDVs can be used with functions such as __P(), for example:
+
+HOST ${__P(host,localhost)}
+
+which would define the variable "HOST" to have the value of the JMeter property "host", defaulting to "localhost" if not defined.
+
+
+For defining variables during a test run, see User Parameters.
+UDVs are processed in the order they appear in the Plan, from top to bottom.
+
+
+For simplicity, it is suggested that UDVs are placed only at the start of a Thread Group
+(or perhaps under the Test Plan itself).
+
+
+Once the Test Plan and all UDVs have been processed, the resulting set of variables is
+copied to each thread to provide the initial set of variables.
+
+
+If a runtime element such as a User Parameters Pre-Processor or Regular Expression Extractor defines a variable
+with the same name as one of the UDV variables, then this will replace the initial value, and all other test
+elements in the thread will see the updated value.
+
+
+
+If you have more than one Thread Group, make sure you use different names for different values, as UDVs are shared between Thread Groups.
+Also, the variables are not available for use until after the element has been processed,
+so you cannot reference variables that are defined in the same element.
+You can reference variables defined in earlier UDVs or on the Test Plan.
+
Descriptive name for this element that is shown in the tree.
+
User Defined Variables
Variable name/value pairs. The string under the "Name"
+ column is what you'll need to place inside the brackets in ${...} constructs to use the variables later on. The
+ whole ${...} will then be replaced by the string in the "Value" column.
+The Random Variable Config Element is used to generate random numeric strings and store them in variable for use later.
+It's simpler than using User Defined Variables together with the __Random() function.
+
+
+The output variable is constructed by using the random number generator,
+and then the resulting number is formatted using the format string.
+The number is calculated using the formula minimum+Random.nextInt(maximum-minimum+1).
+Random.nextInt() requires a positive integer.
+This means that maximum-minimum - i.e. the range - must be less than 2147483647,
+however the minimum and maximum values can be any long values so long as the range is OK.
+
Descriptive name for this element that is shown in the tree.
Yes
+
Variable Name
The name of the variable in which to store the random string.
Yes
+
Format String
The java.text.DecimalFormat format string to be used.
+ For example "000" which will generate numbers with at least 3 digits,
+ or "USER_000" which will generate output of the form USER_nnn.
+ If not specified, the default is to generate the number using Long.toString()
No
+
Minimum Value
The minimum value (long) of the generated random number.
Yes
+
Maximum Value
The maximum value (long) of the generated random number.
Yes
+
Random Seed
The seed for the random number generator. Default is the current time in milliseconds.
+ If you use the same seed value with Per Thread set to true, you will get the same value for earch Thread as per
+ Random class.
+
No
+
Per Thread(User)?
If False, the generator is shared between all threads in the thread group.
+ If True, then each thread has its own random generator.
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.
+
From version 2.1.2, the counter now uses a long to store the value, so the range is from -2^63 to 2^63-1.
Descriptive name for this element that is shown in the tree.
+
Start
The starting number for the counter. The counter will equal this
+ number during the first iteration.
Yes
+
Increment
How much to increment the counter by after each
+ iteration.
Yes
+
Maximum
If the counter exceeds the maximum, then it is reset to the Start value.
+ For versions after 2.2 the default is Long.MAX_VALUE (previously it was 0).
+
No
+
Format
Optional format, e.g. 000 will format as 001, 002 etc.
+ This is passed to DecimalFormat, so any valid formats can be used.
+ If there is a problem interpreting the format, then it is ignored.
+ [The default format is generated using Long.toString()]
+
No
+
Reference Name
This controls how you refer to this value in other elements. Syntax is
+ as in user-defined values: $(reference_name}.
Yes
+
Track Counter Independently for each User
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.
No
+
Reset counter on each Thread Group Iteration
This option is only available when counter is tracked per User, if checked,
+ counter will be reset to Start value on each Thread Group iteration. This can be useful when Counter is inside a Loop Controller.
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.
Descriptive name for this element that is shown in the tree.
Yes
+
Parameter Name
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.
Creates a MongoDB connection (used by MongoDB ScriptSampler)
+ from the supplied Connection settings. Each thread gets its own connection.
+ The connection configuration name is used by the JDBC Sampler to select the appropriate
+ connection.
+ You can then access com.mongodb.DB object in Beanshell or JSR223 Test Elements through the element MongoDBHolder
+ using this code
+
+
+import com.mongodb.DB;
+import org.apache.jmeter.protocol.mongodb.config.MongoDBHolder;
+DB db = MongoDBHolder.getDBFromSource("value of property MongoDB Source",
+ "value of property Database Name");
+...
+
Descriptive name for the connection configuration that is shown in the tree.
No
+
Server Address List
Mongo DB Servers
Yes
+
MongoDB Source
The name of the variable the connection is tied to.
+
Each name must be different. If there are two configuration elements using the same name, only one will be saved.
+
Yes
+
+
Keep Trying
+ If true, the driver will keep trying to connect to the same server in case that the socket cannot be established.
+ There is maximum amount of time to keep retrying, which is 15s by default. This can be useful to avoid some exceptions being thrown when a server is down temporarily by blocking the operations.
+ It also can be useful to smooth the transition to a new master (so that a new master is elected within the retry time).
+ Note that when using this flag\:
+ - for a replica set, the driver will trying to connect to the old master for that time, instead of failing over to the new one right away
+ - this does not prevent exception from being thrown in read/write operations on the socket, which must be handled by application.
+ Even if this flag is false, the driver already has mechanisms to automatically recreate broken connections and retry the read operations.
+ Default is false.
+
No
+
Maximum connections per host
No
+
Connection timeout
+ The connection timeout in milliseconds. It is used solely when establishing a new connection Socket.connect(java.net.SocketAddress, int) Default is 0 and means no timeout.
+
No
+
Maximum retry time
+ The maximum amount of time in MS to spend retrying to open connection to the same server. Default is 0, which means to use the default 15s if autoConnectRetry is on.
+
No
+
Maximum wait time
+ The maximum wait time in ms that a thread may wait for a connection to become available. Default is 120,000.
+
No
+
Socket timeout
+ The socket timeout in milliseconds It is used for I/O socket read and write operations Socket.setSoTimeout(int) Default is 0 and means no timeout.
+
No
+
Socket keep alive
+ This flag controls the socket keep alive feature that keeps a connection alive through firewalls Socket.setKeepAlive(boolean)
+ Default is false.
+
No
+
ThreadsAllowedToBlockForConnectionMultiplier
+ This multiplier, multiplied with the connectionsPerHost setting, gives the maximum number of threads that may be waiting for a connection to become available from the pool.
+ All further threads will get an exception right away.
+ For example if connectionsPerHost is 10 and threadsAllowedToBlockForConnectionMultiplier is 5, then up to 50 threads can wait for a connection.
+ Default is 5.
+
No
+
Write Concern : Safe
+ If true the driver will use a WriteConcern of WriteConcern.SAFE for all operations.
+ If w, wtimeout, fsync or j are specified, this setting is ignored.
+ Default is false.
+
No
+
Write Concern : Fsync
+ The fsync value of the global WriteConcern.
+ Default is false.
+
No
+
Write Concern : Wait for Journal
+ The j value of the global WriteConcern.
+ Default is false.
+
No
+
Write Concern : Wait for servers
+ The w value of the global WriteConcern. Default is 0.
+
No
+
Write Concern : Wait timeout
+ The wtimeout value of the global WriteConcern. Default is 0.
+
No
+
Write Concern : Continue on error
+ If batch inserts should continue after the first error
+
+ Assertions are used to perform additional checks on samplers, and are processed after every sampler
+ in the same scope.
+ To ensure that an Assertion is applied only to a particular sampler, add it as a child of the sampler.
+
+
+ Note: Unless documented otherwise, Assertions are not applied to sub-samples (child samples) -
+ only to the parent sample.
+ In the case of BSF and BeanShell Assertions, the script can retrieve sub-samples using the method
+ prev.getSubResults() which returns an array of SampleResults.
+ The array will be empty if there are none.
+
+
+ Versions of JMeter after 2.3.2 include the option to apply certain assertions
+ to either the main sample, the sub-samples or both.
+ The default is to apply the assertion to the main sample only.
+ If the Assertion supports this option, then there will be an entry on the GUI which looks like the following:
+ Assertion Scope
+ or the following
+ Assertion Scope
+ If a sub-sampler fails and the main sample is successful,
+ then the main sample will be set to failed status and an Assertion Result will be added.
+ If the JMeter variable option is used, it is assumed to relate to the main sample, and
+ any failure will be applied to the main sample only.
+
+
+ The variable JMeterThread.last_sample_ok is updated to
+ "true" or "false" after all assertions for a sampler have been run.
+
The response assertion control panel lets you add pattern strings to be compared against various
+ fields of the response.
+ The pattern strings are:
+
You can also choose whether the strings will be expected
+to match the entire response, or if the response is only expected to contain the
+pattern. You can attach multiple assertions to any controller for additional flexibility.
+
Note that the pattern string should not include the enclosing delimiters,
+ i.e. use Price: \d+ not /Price: \d+/.
+
+
+ By default, the pattern is in multi-line mode, which means that the "." meta-character does not match newline.
+ In multi-line mode, "^" and "$" match the start or end of any line anywhere within the string
+ - not just the start and end of the entire string. Note that \s does match new-line.
+ Case is also significant. To override these settings, one can use the extended regular expression syntax.
+ For example:
+
+
+
(?i)
ignore case
+
(?s)
treat target as single line, i.e. "." matches new-line
+
(?is)
both the above
+
+These can be used anywhere within the expression and remain in effect until overriden. e.g.
+
+
(?i)apple(?-i) Pie
matches "ApPLe Pie", but not "ApPLe pIe"
+
(?s)Apple.+?Pie
matches Apple followed by Pie, which may be on a subsequent line.
+
Apple(?s).+?Pie
same as above, but it's probably clearer to use the (?s) at the start.
Descriptive name for this element that is shown in the tree.
No
+
Apply to:
+ This is for use with samplers that can generate sub-samples,
+ e.g. HTTP Sampler with embedded resources, Mail Reader or samples generated by the Transaction Controller.
+
+
Main sample only - assertion only applies to the main sample
+
Sub-samples only - assertion only applies to the sub-samples
+
Main sample and sub-samples - assertion applies to both.
+
JMeter Variable - assertion is to be applied to the contents of the named variable
+
+
Yes
+
Response Field to Test
Instructs JMeter which field of the Response to test.
+
+
Text Response - the response text from the server, i.e. the body, excluding any HTTP headers.
+
Document (text) - the extract text from various type of documents via Apache Tika (see View Results Tree Document view section).
+
URL sampled
+
Response Code - e.g. 200
+
Response Message - e.g. OK
+
Response Headers, including Set-Cookie headers (if any)
+
+
Yes
+
Ignore status
Instructs JMeter to set the status to success initially.
+
+ The overall success of the sample is determined by combining the result of the
+ assertion with the existing Response status.
+ When the Ignore Status checkbox is selected, the Response status is forced
+ to successful before evaluating the Assertion.
+
+ HTTP Responses with statuses in the 4xx and 5xx ranges are normally
+ regarded as unsuccessful.
+ The "Ignore status" checkbox can be used to set the status successful before performing further checks.
+ Note that this will have the effect of clearing any previous assertion failures,
+ so make sure that this is only set on the first assertion.
+
Yes
+
Pattern Matching Rules
Indicates how the text being tested
+ is checked against the pattern.
+
+
Contains - true if the text contains the regular expression pattern
+
Matches - true if the whole text matches the regular expression pattern
+
Equals - true if the whole text equals the pattern string (case-sensitive)
+
Substring - true if the text contains the pattern string (case-sensitive)
+
+ Equals and Substring patterns are plain strings, not regular expressions.
+ NOT may also be selected to invert the result of the check.
Yes
+
Patterns to Test
A list of patterns to
+ be tested.
+ Each pattern is tested separately.
+ If a pattern fails, then further patterns are not checked.
+ There is no difference between setting up
+ one Assertion with multiple patterns and setting up multiple Assertions with one
+ pattern each (assuming the other options are the same).
+ However, when the Ignore Status checkbox is selected, this has the effect of cancelling any
+ previous assertion failures - so make sure that the Ignore Status checkbox is only used on
+ the first Assertion.
+
Yes
+
+
+ The pattern is a Perl5-style regular expression, but without the enclosing brackets.
+
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.
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.
+
Since JMeter 2.3RC3, an empty response is treated as being 0 bytes rather than reported as an error.
Descriptive name for this element that is shown in the tree.
+
Apply to:
+ This is for use with samplers that can generate sub-samples,
+ e.g. HTTP Sampler with embedded resources, Mail Reader or samples generated by the Transaction Controller.
+
+
Main sample only - assertion only applies to the main sample
+
Sub-samples only - assertion only applies to the sub-samples
+
Main sample and sub-samples - assertion applies to both.
+
JMeter Variable - assertion is to be applied to the contents of the named variable
+
+
Yes
+
Size in bytes
The number of bytes to use in testing the size of the response (or value of the JMeter variable).
Yes
+
Type of Comparison
Whether to test that the response is equal to, greater than, less than,
+ or not equal to, the number of bytes specified.
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.
The BeanShell Assertion allows the user to perform assertion checking using a BeanShell script.
+
+
+For full details on using BeanShell, please see the BeanShell website.
+
+Note that a different Interpreter is used for each independent occurence of the assertion
+in each thread in a test script, but the same Interpreter is used for subsequent invocations.
+This means that variables persist across calls to the assertion.
+
+
+All Assertions are called from the same thread as the sampler.
+
+
+If the property "beanshell.assertion.init" is defined, it is passed to the Interpreter
+as the name of a sourced file. This can be used to define common methods and variables.
+There is a sample init file in the bin directory: BeanShellAssertion.bshrc
+
+
+The test element supports the ThreadListener and TestListener methods.
+These should be defined in the initialisation file.
+See the file BeanShellListeners.bshrc for example definitions.
+
Descriptive name for this element that is shown in the tree.
+ The name is stored in the script variable Label
+
Reset bsh.Interpreter before each call
+ If this option is selected, then the interpreter will be recreated for each sample.
+ This may be necessary for some long running scripts.
+ For further information, see Best Practices - BeanShell scripting.
+
Yes
+
Parameters
Parameters to pass to the BeanShell script.
+ The parameters are stored in the following variables:
+
+
Parameters - string containing the parameters as a single variable
+
bsh.args - String array containing parameters, split on white-space
+
No
+
Script file
A file containing the BeanShell script to run. This overrides the script.
+ The file name is stored in the script variable FileName
No
+
Script
The BeanShell script to run. The return value is ignored.
The XPath Assertion tests a document for well formedness, has the option
+of validating against a DTD, or putting the document through JTidy and testing for an
+XPath. If that XPath exists, the Assertion is true. Using "/" will match any well-formed
+document, and is the default XPath Expression.
+The assertion also supports boolean expressions, such as "count(//*error)=2".
+See http://www.w3.org/TR/xpath for more information
+on XPath.
+
+Some sample expressions:
+
+
//title[text()='Text to match'] - matches <text>Text to match</text> anywhere in the response
+
/title[text()='Text to match'] - matches <text>Text to match</text> at root level in the response
Descriptive name for this element that is shown in the tree.
No
+
Use Tidy (tolerant parser)
Use Tidy, i.e. be tolerant of XML/HTML errors
Yes
+
Quiet
Sets the Tidy Quiet flag
If Tidy is selected
+
Report Errors
If a Tidy error occurs, then set the Assertion accordingly
If Tidy is selected
+
Show warnings
Sets the Tidy showWarnings option
If Tidy is selected
+
Use Namespaces
Should namespaces be honoured?
If Tidy is not selected
+
Validate XML
Check the document against its schema.
If Tidy is not selected
+
Ignore Whitespace
Ignore Element Whitespace.
If Tidy is not selected
+
Fetch External DTDs
If selected, external DTDs are fetched.
If Tidy is not selected
+
XPath Assertion
XPath to match in the document.
Yes
+
True if nothing matches
True if a XPath expression is not matched
No
+
+
+The non-tolerant parser can be quite slow, as it may need to download the DTD etc.
+
+
+As a work-round for namespace limitations of the Xalan XPath parser implementation on which JMeter is based,
+you can provide a Properties file which contains mappings for the namespace prefixes:
+
+
prefix1=Full Namespace 1
+
prefix2=Full Namespace 2
+
...
+
+
+You reference this file in jmeter.properties file using the property:
+
vars - (JMeterVariables) - gives read/write access to variables: vars.get(key); vars.put(key,val); vars.putObject("OBJ1",new Object()); vars.getObject("OBJ2");
+
props - (JMeterProperties - class java.util.Properties) - e.g. props.get("START.HMS"); props.put("PROP1","1234");
+
SampleResult, prev - (SampleResult) - gives access to the previous SampleResult (if any)
+
sampler - (Sampler)- gives access to the current sampler
+
OUT - System.out - e.g. OUT.println("message")
+
AssertionResult - the assertion result
+
+
+The script can check various aspects of the SampleResult.
+If an error is detected, the script should use AssertionResult.setFailureMessage("message") and AssertionResult.setFailure(true).
+
+
For futher details of all the methods available on each of the above variables, please check the Javadoc
+Compare Assertion MUST NOT BE USED during load test as it consumes a lot of resources (memory and CPU). Use it only for either functional testing or
+during Test Plan debugging and Validation.
+
+
+The Compare Assertion can be used to compare sample results within its scope.
+Either the contents or the elapsed time can be compared, and the contents can be filtered before comparison.
+The assertion comparisons can be seen in the Comparison Assertion Visualizer.
+
Descriptive name for this element that is shown in the tree.
No
+
Compare Content
Whether or not to compare the content (response data)
Yes
+
Compare Time
If the value is >=0, then check if the response time difference is no greater than the value.
+ I.e. if the value is 0, then the response times must be exactly equal.
Yes
+
Comparison Filters
Filters can be used to remove strings from the content comparison.
+ For example, if the page has a time-stamp, it might be matched with: "Time: \d\d:\d\d:\d\d" and replaced with a dummy fixed time "Time: HH:MM:SS".
+
+The SMIME Assertion can be used to evaluate the sample results from the Mail Reader Sampler.
+This assertion verifies if the body of a mime message is signed or not. The signature can also be verified against a specific signer certificate.
+As this is a functionality that is not necessarily needed by most users, additional jars need to be downloaded and added to JMETER_HOME/lib :
+
+If using the Mail Reader Sampler,
+please ensure that you select "Store the message using MIME (raw)" otherwise the Assertion won't be able to process the message correctly.
+
Descriptive name for this element that is shown in the tree.
No
+
Verify Signature
If selected, the asertion will verify if it is a valid signature according to the parameters defined in the Signer Certificate box.
Yes
+
Message not signed
Whether or not to expect a signature in the message
Yes
+
Signer Cerificate
"No Check" means that it wil not perform signature verification. "Check values" is used to verify the signature against the inputs provided. And "Certificate file" will perform the verification against a specific certificate file.
Yes
+
Message Position
+ The Mail sampler can retrieve multiple messages in a single sample.
+ Use this field to specify which message will be checked.
+ Messages are numbered from 0, so 0 means the first message.
+ Negative numbers count from the LAST message; -1 means LAST, -2 means penultimate etc.
+
+ Note that timers are processed before each sampler in the scope in which they are found;
+ if there are several timers in the same scope, all the timers will be processed before
+ each sampler.
+
+ Timers are only processed in conjunction with a sampler.
+ A timer which is not in the same scope as a sampler will not be processed at all.
+
+ To apply a timer to a single sampler, add the timer as a child element of the sampler.
+ The timer will be applied before the sampler is executed.
+ To apply a timer after a sampler, either add it to the next sampler, or add it as the
+ child of a Test Action Sampler.
+
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 sum of the Gaussian distributed value (with mean 0.0 and standard deviation 1.0) times
+the deviation value you specify, and the offset value.
+Another way to explain it, in Gaussian Random Timer, the variation around constant offset has a gaussian curve distribution.
+
+
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
+is the sum of the random value and the offset value.
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.
+
+N.B. although the Timer is called the Constant Throughput timer, the throughput value does not need to be constant.
+It can be defined in terms of a variable or function call, and the value can be changed during a test.
+The value can be changed in various ways:
+
+
+
using a counter variable
+
using a JavaScript or BeanShell function to provide a changing value
+
using the remote BeanShell server to change a JMeter property
+
+
See Best Practices for further details.
+Note that the throughput value should not be changed too often during a test
+- it will take a while for the new value to take effect.
+
Descriptive name for this timer that is shown in the tree.
No
+
Target Throughput
Throughput we want the timer to try to generate.
Yes
+
Calculate Throughput based on
+
+
this thread only - each thread will try to maintain the target throughput. The overall throughput will be proportional to the number of active threads.
+
all active threads in current thread group - the target throughput is divided amongst all the active threads in the group.
+ Each thread will delay as needed, based on when it last ran.
+
all active threads - the target throughput is divided amongst all the active threads in all Thread Groups.
+ Each thread will delay as needed, based on when it last ran.
+ In this case, each other Thread Group will need a Constant Throughput timer with the same settings.
+
all active threads in current thread group (shared) - as above, but each thread is delayed based on when any thread in the group last ran.
+
all active threads (shared) - as above; each thread is delayed based on when any thread last ran.
+
+
Yes
+
The shared and non-shared algorithms both aim to generate the desired thoughput, and will produce similar results.
+ The shared algorithm should generate a more accurate overall transaction rate.
+ The non-shared algortihm should generate a more even spread of transactions across threads.
+The purpose of the SyncTimer is to block threads until X number of threads have been blocked, and
+then they are all released at once. A SyncTimer can thus create large instant loads at various
+points of the test plan.
+
Descriptive name for this timer that is shown in the tree.
No
+
Number of Simultaneous Users to Group by
Number of threads to release at once. Setting it to 0 is equivalent to setting it to Number of threads in Thread Group.
Yes
+
Timeout in milliseconds
If set to 0, Timer will wait for the number of threads to reach the value in "Number of Simultaneous Users to Group", if superior to 0, then timer will wait at max "Timeout in milliseconds" if number of Threads does not reach if ater the timeout interval the number of users waiting is not reached, timer will stop waiting. Defaults to 0
No
+
+
+If timeout in milliseconds is set to 0 and number of threads never reaches "Number of Simultaneous Users to Group by" then Test will pause infinitely.
+Only a forced stop will stop it. Setting Timeout in milliseconds is an option to consider in this case.
+
+
+Synchronizing timer blocks only within one JVM, so if using Distributed testing ensure you never set "Number of Simultaneous Users to Group by" to a value superior to the number of users
+of its containing Thread group considering 1 injector only.
+
+The BeanShell Timer can be used to generate a delay.
+
+
+For full details on using BeanShell, please see the BeanShell website.
+
+
+The test element supports the ThreadListener and TestListener methods.
+These should be defined in the initialisation file.
+See the file BeanShellListeners.bshrc for example definitions.
+
Descriptive name for this element that is shown in the tree.
+ The name is stored in the script variable Label
No
+
Reset bsh.Interpreter before each call
+ If this option is selected, then the interpreter will be recreated for each sample.
+ This may be necessary for some long running scripts.
+ For further information, see Best Practices - BeanShell scripting.
+
Yes
+
Parameters
Parameters to pass to the BeanShell script.
+ The parameters are stored in the following variables:
+
+
Parameters - string containing the parameters as a single variable
+
bsh.args - String array containing parameters, split on white-space
+
+
No
+
Script file
+ A file containing the BeanShell script to run.
+ The file name is stored in the script variable FileName
+ The return value is used as the number of milliseconds to wait.
+
No
+
Script
+ The BeanShell script. The return value is used as the number of milliseconds to wait.
+
Yes (unless script file is provided)
+
+
Before invoking the script, some variables are set up in the BeanShell interpreter:
+
+
log - (Logger) - can be used to write to the log file
vars - (JMeterVariables) - gives read/write access to variables: vars.get(key); vars.put(key,val); vars.putObject("OBJ1",new Object());
+
props - (JMeterProperties - class java.util.Properties) - e.g. props.get("START.HMS"); props.put("PROP1","1234");
+
prev - (SampleResult) - gives access to the previous SampleResult (if any)
+
+
For details of all the methods available on each of the above variables, please check the Javadoc
+
If the property beanshell.timer.init is defined, this is used to load an initialisation file, which can be used to define methods etc for use in the BeanShell script.
Descriptive name for this element that is shown in the tree.
No
+
ScriptLanguage
+ The scripting language to be used.
+
Yes
+
Parameters
Parameters to pass to the script.
+ The parameters are stored in the following variables:
+
+
Parameters - string containing the parameters as a single variable
+
args - String array containing parameters, split on white-space
+
+
No
+
Script file
+ A file containing the script to run, if a relative file path is used, then it will be relative to directory referenced by "user.dir" System property
+ The return value is converted to a long integer and used as the number of milliseconds to wait.
+
No
+
Script
+ The script. The return value is used as the number of milliseconds to wait.
+
Yes (unless script file is provided)
+
+
Before invoking the script, some variables are set up in the script interpreter:
+
+
log - (Logger) - can be used to write to the log file
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
+sum of the Poisson distributed value, and the offset value.
This modifier parses HTML response from the server and extracts
+links and forms. A URL test sample that passes through this modifier will be examined to
+see if it "matches" any of the links or forms extracted
+from the immediately previous response. It would then replace the values in the URL
+test sample with appropriate values from the matching link or form. Perl-type regular
+expressions are used to find matches.
+
+
+Matches are performed using protocol, host, path and parameter names.
+The target sampler cannot contain parameters that are not in the response links.
+
+
+If using distributed testing, ensure you switch mode (see jmeter.properties) so that it's not a stripping one, see
+ Bug
+ 56376
+
Consider a simple example: let's say you wanted JMeter to "spider" 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 Simple Controller, and add the "HTML Link Parser" to it. Then, create an
+HTTP Request, and set the domain to ".*", 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
+to the one you want. Then, only links to that domain will be followed.
+
A more useful example: given a web polling application, you might have a page with
+several poll options as radio buttons for the user to select. Let's say the values
+of the poll options are very dynamic - maybe user generated. If you wanted JMeter to
+test the poll, you could either create test samples with hardcoded values chosen, or you
+could let the HTML Link Parser parse the form, and insert a random poll option into
+your URL test sample. To do this, follow the above example, except, when configuring
+your Web Test controller's URL options, be sure to choose "POST" as the
+method. Put in hard-coded values for the domain, path, and any additional form parameters.
+Then, for the actual radio button parameter, put in the name (let's say it's called "poll_choice"),
+and then ".*" for the value of that parameter. When the modifier examines
+this URL test sample, it will find that it "matches" the poll form (and
+it shouldn't match any other form, given that you've specified all the other aspects of
+the URL test sample), and it will replace your form parameters with the matching
+parameters from the form. Since the regular expression ".*" will match with
+anything, the modifier will probably have a list of radio buttons to choose from. It
+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.
+
+Figure 18 - Online Poll Example
+
+
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
+your dynamic test sample.
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
+ThreadGroup level, much like the HTTP Cookie Manager. Simply give it the name
+of the session id parameter, and it will find it on the page and add the argument to every
+request of that ThreadGroup.
+
Alternatively, this modifier can be attached to select requests and it will modify only them.
+Clever users will even determine that this modifier can be used to grab values that elude the
+HTML Link Parser.
Descriptive name given to this element in the test tree.
No
+
Session Argument Name
The name of the parameter to grab from
+ previous response. This modifier will find the parameter anywhere it exists on the page, and
+ grab the value assigned to it, whether it's in an HREF or a form.
Yes
+
Path Extension
Some web apps rewrite URLs by appending
+ a semi-colon plus the session id parameter. Check this box if that is so.
No
+
Do not use equals in path extension
Some web apps rewrite URLs without using an "=" sign between the parameter name and value (such as Intershop Enfinity).
No
+
Do not use questionmark in path extension
Prevents the query string to end up in the path extension (such as Intershop Enfinity).
No
+
Cache Session Id?
+ Should the value of the session Id be saved for later use when the session Id is not present?
+
Yes
+
URL Encode
+ URL Encode value when writing parameter
+
No
+
+
+
+If using distributed testing, ensure you switch mode (see jmeter.properties) so that it's not a stripping one, see
+ Bug
+ 56376.
+
+ *** This element is deprecated. Use
+ Counter
+ instead ***
+
+
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 "name=prefixcountersuffix". Any HTTP
+Request that it modifies, it will replace any parameter with the same name or add the appropriate
+parameter to the requests list of arguments.
+
The value of the argument in your HTTP Request must be a '*' in order for the HTML Parameter Mask
+Modifier to replace it.
+
As an example, the username for a login script could be modified to send a series of values
+such as:
+user_1
+user_2
+user_3
+user_4, etc.
Allows the user to specify values for User Variables specific to individual threads.
+
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.
+
+
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.
+
+
Values can be accessed in any test component in the same thread group, using the function syntax: ${variable}.
+
See also the CSV Data Set Config element, which is more suitable for large numbers of parameters
Descriptive name for this element that is shown in the tree.
+
Update Once Per Iteration
A flag to indicate whether the User Paramters element
+ should update its 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 its scope.
+The BeanShell PreProcessor allows arbitrary code to be applied before taking a sample.
+
+
+For full details on using BeanShell, please see the BeanShell website.
+
+
+The test element supports the ThreadListener and TestListener methods.
+These should be defined in the initialisation file.
+See the file BeanShellListeners.bshrc for example definitions.
+
Descriptive name for this element that is shown in the tree.
+ The name is stored in the script variable Label
No
+
Reset bsh.Interpreter before each call
+ If this option is selected, then the interpreter will be recreated for each sample.
+ This may be necessary for some long running scripts.
+ For further information, see Best Practices - BeanShell scripting.
+
Yes
+
Parameters
Parameters to pass to the BeanShell script.
+ The parameters are stored in the following variables:
+
+
Parameters - string containing the parameters as a single variable
+
bsh.args - String array containing parameters, split on white-space
+
No
+
Script file
A file containing the BeanShell script to run.
+ The file name is stored in the script variable FileName
No
+
Script
The BeanShell script. The return value is ignored.
Yes (unless script file is provided)
+
+
Before invoking the script, some variables are set up in the BeanShell interpreter:
+
+
log - (Logger) - can be used to write to the log file
vars - (JMeterVariables) - gives read/write access to variables: vars.get(key); vars.put(key,val); vars.putObject("OBJ1",new Object());
+
props - (JMeterProperties - class java.util.Properties) - e.g. props.get("START.HMS"); props.put("PROP1","1234");
+
prev - (SampleResult) - gives access to the previous SampleResult (if any)
+
sampler - (Sampler)- gives access to the current sampler
+
+
For details of all the methods available on each of the above variables, please check the Javadoc
+
If the property beanshell.preprocessor.init is defined, this is used to load an initialisation file, which can be used to define methods etc for use in the BeanShell script.
+The JDBC PreProcessor enables you to run some SQL statement just before a sample runs.
+This can be useful if your JDBC Sample requires some data to be in DataBase and you cannot compute this in a setup Thread group.
+For details, see JDBC Request.
+
+In the linked test plan,"Create Price Cut-Off" JDBC PreProcessor calls a stored procedure to create a Price Cut-Off in Database,
+this one will be used by "Calculate Price cut off".
+
+Create Price Cut-Off Preprocessor
+
+
Allows to specify dynamic values for HTTP parameters extracted from another HTTP Request using regular expressions.
+ RegEx User Parameters are specific to individual threads.
+
This component allows you to specify reference name of a regular expression that extracts names and values of HTTP request parameters.
+ Regular expression group numbers must be specified for parameter's name and also for parameter's value.
+ Replacement will only occur for parameters in the Sampler that uses this RegEx User Parameters which name matches
+ As the name suggests, Post-Processors are applied after samplers. Note that they are
+ applied to all the samplers in the same scope, so to ensure that a post-processor
+ is applied only to a particular sampler, add it as a child of the sampler.
+
+
+ Note: Unless documented otherwise, Post-Processors are not applied to sub-samples (child samples) -
+ only to the parent sample.
+ In the case of BSF and BeanShell post-processors, the script can retrieve sub-samples using the method
+ prev.getSubResults() which returns an array of SampleResults.
+ The array will be empty if there are none.
+
+
+ Post-Processors are run before Assertions, so they do not have access to any Assertion Results, nor will
+ the sample status reflect the results of any Assertions. If you require access to Assertion Results, try
+ using a Listener instead. Also note that the variable JMeterThread.last_sample_ok is set to "true" or "false"
+ after all Assertions have been run.
+
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.
Descriptive name for this element that is shown in the tree.
+
Apply to:
+ This is for use with samplers that can generate sub-samples,
+ e.g. HTTP Sampler with embedded resources, Mail Reader or samples generated by the Transaction Controller.
+
+
Main sample only - only applies to the main sample
+
Sub-samples only - only applies to the sub-samples
+
Main sample and sub-samples - applies to both.
+
JMeter Variable - assertion is to be applied to the contents of the named variable
+
+ Matching is applied to all qualifying samples in turn.
+ For example if there is a main sample and 3 sub-samples, each of which contains a single match for the regex,
+ (i.e. 4 matches in total).
+ For match number = 3, Sub-samples only, the extractor will match the 3rd sub-sample.
+ For match number = 3, Main sample and sub-samples, the extractor will match the 2nd sub-sample (1st match is main sample).
+ For match number = 0 or negative, all qualifying samples will be processed.
+ For match number > 0, matching will stop as soon as enough matches have been found.
+
Yes
+
Field to check
+ The following fields can be checked:
+
+
Body - the body of the response, e.g. the content of a web-page (excluding headers)
+
Body (unescaped) - the body of the response, with all Html escape codes replaced.
+ Note that Html escapes are processed without regard to context, so some incorrect substitutions
+ may be made.
+
Note that this option highly impacts performances, so use it only when absolutely necessary and be aware of its impacts
+
+
Body as a Document - the extract text from various type of documents via Apache Tika (see View Results Tree Document view section).
+
Note that the Body as a Document option can impact performances, so ensure it is Ok for your test
+
+
Request Headers - may not be present for non-HTTP samples
+
Response Headers - may not be present for non-HTTP samples
+
URL
+
Response Code - e.g. 200
+
Response Message - e.g. OK
+
+ Headers can be useful for HTTP samples; it may not be present for other sample types.
+
Yes
+
Reference Name
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.
Yes
+
Regular Expression
The regular expression used to parse the response data.
+ This must contain at least one set of parentheses "()" to capture a portion of the string, unless using the group $0$.
+ Do not enclose the expression in / / - unless of course you want to match these characters as well.
+
Yes
+
Template
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. $0$ refers to whatever the entire expression matches.
Yes
+
Match No.
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.
+
A positive number N means to select the nth match.
+
Negative numbers are used in conjunction with the ForEach controller - see below.
+
+
Yes
+
Default Value
+ If the regular expression does not match, then the reference variable will be set to the default value.
+ This is particularly useful for debugging tests. If no default is provided, then it is difficult to tell
+ whether the regular expression did not match, or the RE element was not processed or maybe the wrong variable
+ is being used.
+
+ However, if you have several test elements that set the same variable,
+ you may wish to leave the variable unchanged if the expression does not match.
+ In this case, remove the default value once debugging is complete.
+
+
No, but recommended
+
+
+ If the match number is set to a non-negative number, and a match occurs, the variables are set as follows:
+
+
refName - the value of the template
+
refName_gn, where n=0,1,2 - the groups for the match
+
refName_g - the number of groups in the Regex (excluding 0)
+
+ If no match occurs, then the refName variable is set to the default (unless this is absent).
+ Also, the following variables are removed:
+
+
refName_g0
+
refName_g1
+
refName_g
+
+
+
+ If the match number is set to a negative number, then all the possible matches in the sampler data are processed.
+ The variables are set as follows:
+
+
refName_matchNr - the number of matches found; could be 0
+
refName_n, where n = 1,2,3 etc - the strings as generated by the template
+
refName_n_gm, where m=0,1,2 - the groups for match n
+
refName - always set to the default value
+
refName_gn - not set
+
+ Note that the refName variable is always set to the default value in this case,
+ and the associated group variables are not set.
+
Allows the user to extract values from a server response using a CSS/JQuery selector like syntax. As a post-processor,
+this element will execute after each Sample request in its scope, applying the CSS/JQuery expression, extracting the requested nodes,
+extracting the node as text or attribute value and store the result into the given variable name.
Descriptive name for this element that is shown in the tree.
+
Apply to:
+ This is for use with samplers that can generate sub-samples,
+ e.g. HTTP Sampler with embedded resources, Mail Reader or samples generated by the Transaction Controller.
+
+
Main sample only - only applies to the main sample
+
Sub-samples only - only applies to the sub-samples
+
Main sample and sub-samples - applies to both.
+
JMeter Variable - assertion is to be applied to the contents of the named variable
+
+ Matching is applied to all qualifying samples in turn.
+ For example if there is a main sample and 3 sub-samples, each of which contains a single match for the regex,
+ (i.e. 4 matches in total).
+ For match number = 3, Sub-samples only, the extractor will match the 3rd sub-sample.
+ For match number = 3, Main sample and sub-samples, the extractor will match the 2nd sub-sample (1st match is main sample).
+ For match number = 0 or negative, all qualifying samples will be processed.
+ For match number > 0, matching will stop as soon as enough matches have been found.
+
Yes
+
CSS/JQuery extractor Implementation
+ As of JMeter 2.9, 2 implementations for CSS/JQuery based syntax are supported:
+
+ Name of attribute (as per HTML syntax) to extract from nodes that matched the selector. If empty, then the combined text of this element and all its children will be returned.
+ This is the equivalent Element#attr(name) function for JSoup if an atttribute is set.
+ CSS Extractor with attribute value set
+ If empty this is the equivalent of Element#text() function for JSoup if not value is set for attribute.
+ CSS Extractor with no attribute set
+
false
+
Match No.
Indicates which match to use. The CSS/JQuery selector may match multiple times.
+
+
Use a value of zero to indicate JMeter should choose a match at random.
+
A positive number N means to select the nth match.
+
Negative numbers are used in conjunction with the ForEach controller - see below.
+
+
Yes
+
Default Value
+ If the expression does not match, then the reference variable will be set to the default value.
+ This is particularly useful for debugging tests. If no default is provided, then it is difficult to tell
+ whether the expression did not match, or the CSS/JQuery element was not processed or maybe the wrong variable
+ is being used.
+
+ However, if you have several test elements that set the same variable,
+ you may wish to leave the variable unchanged if the expression does not match.
+ In this case, remove the default value once debugging is complete.
+
+
No, but recommended
+
+
+ If the match number is set to a non-negative number, and a match occurs, the variables are set as follows:
+
+
refName - the value of the template
+
+ If no match occurs, then the refName variable is set to the default (unless this is absent).
+
+
+ If the match number is set to a negative number, then all the possible matches in the sampler data are processed.
+ The variables are set as follows:
+
+
refName_matchNr - the number of matches found; could be 0
+
refName_n, where n = 1,2,3 etc - the strings as generated by the template
+
refName - always set to the default value
+
+ Note that the refName variable is always set to the default value in this case.
+
+
Descriptive name for this element that is shown in the tree.
No
+
Apply to:
+ This is for use with samplers that can generate sub-samples,
+ e.g. HTTP Sampler with embedded resources, Mail Reader or samples generated by the Transaction Controller.
+
+
Main sample only - only applies to the main sample
+
Sub-samples only - only applies to the sub-samples
+
Main sample and sub-samples - applies to both.
+
JMeter Variable - assertion is to be applied to the contents of the named variable
+
+ XPath matching is applied to all qualifying samples in turn, and all the matching results will be returned.
+
Yes
+
Use Tidy (tolerant parser)
If checked use Tidy to parse HTML response into XHTML.
+
+
"Use Tidy" should be checked on for HTML response. Such response is converted to valid XHTML (XML compatible HTML) using Tidy
+
"Use Tidy" should be unchecked for both XHTML or XML response (for example RSS)
+
+
Yes
+
Quiet
Sets the Tidy Quiet flag
If Tidy is selected
+
Report Errors
If a Tidy error occurs, then set the Assertion accordingly
If Tidy is selected
+
Show warnings
Sets the Tidy showWarnings option
If Tidy is selected
+
Use Namespaces
+ If checked, then the XML parser will use namespace resolution.
+ Note that currently only namespaces declared on the root element will be recognised.
+ A later version of JMeter may support user-definition of additional workspace names.
+ Meanwhile, a work-round is to replace:
+
+ //mynamespace:tagname
+
+ by
+
+ //*[local-name()='tagname' and namespace-uri()='uri-for-namespace']
+
+ where "uri-for-namespace" is the uri for the "mynamespace" namespace.
+
+ (not applicable if Tidy is selected)
+
If Tidy is not selected
+
Validate XML
Check the document against its schema.
If Tidy is not selected
+
Ignore Whitespace
Ignore Element Whitespace.
If Tidy is not selected
+
Fetch External DTDs
If selected, external DTDs are fetched.
If Tidy is not selected
+
Return entire XPath fragment instead of text content?
+ If selected, the fragment will be returned rather than the text content.
+ For example //title would return "<title>Apache JMeter</title>" rather than "Apache JMeter".
+ In this case, //title/text() would return "Apache JMeter".
+
Yes
+
Reference Name
The name of the JMeter variable in which to store the result.
Yes
+
XPath Query
Element query in XPath language. Can return more than one match.
Yes
+
Default Value
Default value returned when no match found.
+ It is also returned if the node has no value and the fragment option is not selected.
+
+
To allow for use in a ForEach Controller, the following variables are set on return:
+
+
refName - set to first (or only) match; if no match, then set to default
+
refName_matchNr - set to number of matches (may be 0)
+
refName_n - n=1,2,3 etc. Set to the 1st, 2nd 3rd match etc.
+
+
+
Note: The next refName_n variable is set to null - e.g. if there are 2 matches, then refName_3 is set to null,
+ and if there are no matches, then refName_1 is set to null.
+
+
XPath is query language targeted primarily for XSLT transformations. However it is usefull as generic query language for structured data too. See
+ XPath Reference or XPath specification for more information. Here are few examples:
+
extracts value attribute of option element that match text 'Czech Republic'
+ inside of select element with name attribute 'country' inside of
+ form with name attribute 'countryForm'
+
+
When "Use Tidy" is checked on - resulting XML document may slightly differ from original HTML response:
+
+
All elements and attribute names are converted to lowercase
+
Tidy attempts to correct improperly nested elements. For example - original (incorrect) ul/font/li becomes correct ul/li/font
+The BeanShell PreProcessor allows arbitrary code to be applied after taking a sample.
+
+
For JMeter versions after 2.2 the BeanShell Post-Processor no longer ignores samples with zero-length result data
+
+For full details on using BeanShell, please see the BeanShell website.
+
+
+The test element supports the ThreadListener and TestListener methods.
+These should be defined in the initialisation file.
+See the file BeanShellListeners.bshrc for example definitions.
+
Descriptive name for this element that is shown in the tree.
+ The name is stored in the script variable Label
No
+
Reset bsh.Interpreter before each call
+ If this option is selected, then the interpreter will be recreated for each sample.
+ This may be necessary for some long running scripts.
+ For further information, see Best Practices - BeanShell scripting.
+
Yes
+
Parameters
Parameters to pass to the BeanShell script.
+ The parameters are stored in the following variables:
+
+
Parameters - string containing the parameters as a single variable
+
bsh.args - String array containing parameters, split on white-space
+
No
+
Script file
A file containing the BeanShell script to run.
+ The file name is stored in the script variable FileName
No
+
Script
The BeanShell script. The return value is ignored.
Yes (unless script file is provided)
+
+
The following BeanShell variables are set up for use by the script:
+
+
log - (Logger) - can be used to write to the log file
vars - (JMeterVariables) - gives read/write access to variables: vars.get(key); vars.put(key,val); vars.putObject("OBJ1",new Object());
+
props - (JMeterProperties - class java.util.Properties) - e.g. props.get("START.HMS"); props.put("PROP1","1234");
+
prev - (SampleResult) - gives access to the previous SampleResult
+
data - (byte [])- gives access to the current sample data
+
+
For details of all the methods available on each of the above variables, please check the Javadoc
+
If the property beanshell.postprocessor.init is defined, this is used to load an initialisation file, which can be used to define methods etc for use in the BeanShell script.
+The JDBC PostProcessor enables you to run some SQL statement just after a sample has run.
+This can be useful if your JDBC Sample changes some data and you want to reset state to what it was before the JDBC sample run.
+
+In the linked test plan,"JDBC PostProcessor" JDBC PostProcessor calls a stored procedure to delete from Database the Price Cut-Off that was created by PreProcessor.
+JDBC PostProcessor
+
+The Test Plan is where the overall settings for a test are specified.
+
+
+Static variables can be defined for values that are repeated throughout a test, such as server names.
+For example the variable SERVER could be defined as www.example.com, and the rest of the test plan
+could refer to it as ${SERVER}. This simplifies changing the name later.
+
+
+If the same variable name is reused on one of more
+User Defined Variables Configuration elements,
+the value is set to the last definition in the test plan (reading from top to bottom).
+Such variables should be used for items that may change between test runs,
+but which remain the same during a test run.
+
+
+Note that the Test Plan cannot refer to variables it defines.
+If you need to construct other variables from the Test Plan variables,
+use a User Defined Variables test element.
+
+
+Selecting Functional Testing instructs JMeter to save the additional sample information
+- Response Data and Sampler Data - to all result files.
+This increases the resources needed to run a test, and may adversely impact JMeter performance.
+If more data is required for a particular sampler only, then add a Listener to it, and configure the fields as required.
+[The option does not affect CSV result files, which cannot currently store such information.]
+
+
Also, an option exists here to instruct JMeter to run the Thread Group serially rather than in parallel.
+
Run tearDown Thread Groups after shutdown of main threads:
+if selected, the tearDown groups (if any) will be run after graceful shutdown of the main threads.
+The tearDown threads won't be run if the test is forcibly stopped.
+
+
+Test plan now provides an easy way to add classpath setting to a specific test plan.
+The feature is additive, meaning that you can add jar files or directories,
+but removing an entry requires restarting JMeter.
+Note that this cannot be used to add JMeter GUI plugins, because they are processed earlier.
+However it can be useful for utility jars such as JDBC drivers. The jars are only added to
+the search path for the JMeter loader, not for the system class loader.
+
+
+JMeter properties also provides an entry for loading additional classpaths.
+In jmeter.properties, edit "user.classpath" or "plugin_dependency_paths" to include additional libraries.
+See JMeter's Classpath and
+Configuring JMeter for details.
+
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.
+When using the scheduler, JMeter runs the thread group until either the number of loops is reached or the duration/end-time is reached - whichever occurs first.
+Note that the condition is only checked between samples; when the end condition is reached, that thread will stop.
+JMeter does not interrupt samplers which are waiting for a response, so the end time may be delayed arbitrarily.
+
Descriptive name for this element that is shown in the tree.
+
Action to be taken after a Sampler error
+ Determines what happens if a sampler error occurs, either because the sample itself failed or an assertion failed.
+ The possible choices are:
+
+
Continue - ignore the error and continue with the test
+
Start Next Loop - ignore the error, start next loop and continue with the test
+
Stop Thread - current thread exits
+
Stop Test - the entire test is stopped at the end of any current samples.
+
Stop Test Now - the entire test is stopped abruptly. Any current samplers are interrupted if possible.
+
+
+ No
+
+
Number of Threads
Number of users to simulate.
Yes
+
Ramp-up Period
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.
Yes
+
Loop Count
Number of times to perform the test case. Alternatively, "forever" can be selected causing the test to run until manually stopped.
Yes, unless forever is selected
+
Delay Thread creation until needed
+ If selected, threads are created only when the appropriate proportion of the ramp-up time has elapsed.
+ This is most appropriate for tests with a ramp-up time that is significantly longer than the time to execute a single thread.
+ I.e. where earlier threads finish before later ones start.
+
+ If not selected, all threads are created when the test starts (they then pause for the appropriate proportion of the ramp-up time).
+ This is the original default, and is appropriate for tests where threads are active throughout most of the test.
+
Yes
+
Scheduler
If selected, enables the scheduler
Yes
+
Start Time
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.
+ Note: the Startup Delay field over-rides this - see below.
+
No
+
End Time
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.
+ Note: the Duration field over-rides this - see below.
+
No
+
Duration (seconds)
+ If the scheduler checkbox is selected, one can choose a relative end time.
+ JMeter will use this to calculate the End Time, and ignore the End Time value.
+
No
+
Startup delay (seconds)
+ If the scheduler checkbox is selected, one can choose a relative startup delay.
+ JMeter will use this to calculate the Start Time, and ignore the Start Time value.
+
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 by default unless you check "Save Workbench" option.
+Your WorkBench can be saved independently, if you like (right-click on WorkBench and choose Save).
+
Certain test elements are only available on the WorkBench:
+ The SSL Manager is a way to select a client certificate so that you can test
+ applications that use Public Key Infrastructure (PKI).
+ It is only needed if you have not set up the appropriate System properties.
+
+
+Choosing a Client Certificate
+
+ You may either use a Java Key Store (JKS) format key store, or a Public Key
+ Certificate Standard #12 (PKCS12) file for your client certificates. There
+ is a feature of the JSSE libraries that require you to have at least a six character
+ password on your key (at least for the keytool utility that comes with your
+ JDK).
+
+
+ To select the client certificate, choose Options->SSL Manager from the menu bar.
+ You will be presented with a file finder that looks for PKCS12 files by default.
+ Your PKCS12 file must have the extension '.p12' for SSL Manager to recognize it
+ as a PKCS12 file. Any other file will be treated like an average JKS key store.
+ If JSSE is correctly installed, you will be prompted for the password. The text
+ box does not hide the characters you type at this point--so make sure no one is
+ looking over your shoulder. The current implementation assumes that the password
+ for the keystore is also the password for the private key of the client you want
+ to authenticate as.
+
+
Or you can set the appropriate System properties - see the system.properties file.
+
+ The next time you run your test, the SSL Manager will examine your key store to
+ see if it has at least one key available to it. If there is only one key, SSL
+ Manager will select it for you. If there is more than one key, it currently selects the first key.
+ There is currently no way to select other entries in the keystore, so the desired key must be the first.
+
+Things to Look Out For
+
+ You must have your Certificate Authority (CA) certificate installed properly
+ if it is not signed by one of the five CA certificates that ships with your
+ JDK. One method to install it is to import your CA certificate into a JKS
+ file, and name the JKS file "jssecacerts". Place the file in your JRE's
+ lib/security folder. This file will be read before the "cacerts" file in
+ the same directory. Keep in mind that as long as the "jssecacerts" file
+ exists, the certificates installed in "cacerts" will not be used. This may
+ cause problems for you. If you don't mind importing your CA certificate into
+ the "cacerts" file, then you can authenticate against all of the CA certificates
+ installed.
+
The HTTP(S) Test Script Recorder allows JMeter to intercept and record your actions while you browse your web application
+with your normal browser. JMeter will create test sample objects and store them
+directly into your test plan as you go (so you can view samples interactively while you make them).
+Ensure you read this wiki page to setup correctly JMeter.
+
+
+
To use the recorder, add the HTTP(S) Test Script Recorder element to the workbench.
+Select the WorkBench element in the tree, and right-click on this element to get the
+Add menu (Add --> Non-Test Elements --> HTTP(S) Test Script Recorder).
+
+The recorder is implemented as an HTTP(S) proxy server.
+You need to set up your browser use the proxy for all HTTP and HTTPS requests.
+[Do not use JMeter as the proxy for any other request types - FTP, etc. - as JMeter cannot handle them.]
+
+
+Ideally use private browsing mode when recording the session.
+This should ensure that the browser starts with no stored cookies, and prevents certain changes from being saved.
+For example, Firefox does not allow certificate overrides to be saved permanently.
+
+
HTTPS recording and certificates
+
+HTTPS connections use certificates to authenticate the connection between the browser and the web server.
+When connecting via HTTPS, the server presents the certificate to the browser.
+To authenticate the certificate, the browser checks that the server certificate is signed
+by a Certificate Authority (CA) that is linked to one of its in-built root CAs.
+[Browsers also check that the certificate is for the correct host or domain, and that it is valid and not expired.]
+If any of the browser checks fail, it will prompt the user who can then decided whether to allow the connection to proceed.
+
+
+JMeter needs to use its own certificate to enable it to intercept the HTTPS connection from
+the browser. Effectively JMeter has to pretend to be the target server.
+
+
+For versions of JMeter from 2.10, JMeter will generate its own certificate(s).
+These are generated with a validity period defined by the property proxy.cert.validity, default 7 days, and random passwords.
+If JMeter detects that it is running under Java 7 or later, it will generate certificates for each target server as necessary (dynamic mode)
+unless the following property is defined: proxy.cert.dynamic_keys=false.
+When using dynamic mode, the certificate will be for the correct host name, and will be signed by a JMeter-generated CA certificate.
+By default, this CA certificate won't be trusted by the browser, however it can be installed as a trusted certificate.
+Once this is done, the generated server certificates will be accepted by the browser.
+This has the advantage that even embedded HTTPS resources can be intercepted, and there is no need to override the browser checks for each new server.
+(Browsers don't prompt for embedded resources. So with earlier versions, embedded resources would only be downloaded for servers that were already 'known' to the browser)
+
+
Unless a keystore is provided (and you define the property proxy.cert.alias),
+JMeter needs to use the keytool application to create the keystore entries.
+Versions of JMeter after 2.10 include code to check that keytool is available by looking in various standard places.
+If JMeter is unable to find the keytool application, it will report an error.
+If necessary, the systen property keytool.directory can be used to tell JMeter where to find keytool.
+This should be defined in the file system.properties.
+
+
+The JMeter certificates are generated (if necessary) when the Start button is pressed.
+Certificate generation can take some while, during which time the GUI will be unresponsive.
+The cursor is changed to an hour-glass whilst this is happening.
+When certificate generation is complete, the GUI will display a pop-up dialogue containing the details of the certificate for the root CA.
+This certificate needs to be installed by the browser in order for it to accept the host certificates generated by JMeter; see below for details.
+
+
+If necessary, you can force JMeter to regenerate the keystore (and the exported certificates - ApacheJMeterTemporaryRootCA[.usr|.crt]) by deleting the keystore file proxyserver.jks from the JMeter directory.
+
+
+With versions of JMeter up to 2.9, it used a single certificate for all target servers.
+[Likewise if JMeter is not being run under Java 7 or later]
+This certificate is not one of the certificates that browsers normally trust, and will not be for the
+correct host.
+As a consequence:
+
+
The browser should display a dialogue asking if you want to accept the certificate or not. For example:
+
+1) The server's name "www.example.com" does not match the certificate's name
+ "JMeter Proxy (DO NOT TRUST)". Somebody may be trying to eavesdrop on you.
+2) The certificate for "JMeter Proxy (DO NOT TRUST)" is signed by the unknown Certificate Authority
+ "JMeter Proxy (DO NOT TRUST)". It is not possible to verify that this is a valid certificate.
+
+You will need to accept the certificate in order to allow the JMeter Proxy to intercept the SSL traffic in order to
+record it.
+However, do not accept this certificate permanently; it should only be accepted temporarily.
+Browsers only prompt this dialogue for the certificate of the main url, not for the resources loaded in the page, such as images, css or javascript files hosted on a secured external CDN.
+If you have such resources (gmail has for example), you'll have to first browse manually to these other domains in order to accept JMeter's certificate for them.
+Check in jmeter.log for secure domains that you need to register certificate for.
+
+
If the browser has already registered a validated certificate for this domain, the browser will detect JMeter as a security breach and will refuse to load the page. If so, you have to remove the trusted certificate from your browser's keystore.
+
+
+
+
+Versions of JMeter from 2.10 onwards still support this method, and will continue to do so if the you define the following property:
+proxy.cert.alias
+The following properties can be used to change the certificate that is used:
+
+
proxy.cert.directory - the directory in which to find the certificate (default = JMeter bin/)
+
proxy.cert.file - name of the keystore file (default "proxyserver.jks")
+
proxy.cert.keystorepass - keystore password (default "password") [Ignored if using JMeter certificate]
+
proxy.cert.keypassword - certificate key password (default "password") [Ignored if using JMeter certificate]
+
proxy.cert.type - the certificate type (default "JKS") [Ignored if using JMeter certificate]
+
proxy.cert.factory - the factory (default "SunX509") [Ignored if using JMeter certificate]
+
proxy.cert.alias - the alias for the key to be used. If this is defined, JMeter does not attempt to generate its own certificate(s).
+
proxy.ssl.protocol - the protocol to be used (default "SSLv3")
+
+
+
+If your browser currently uses a proxy (e.g. a company intranet may route all external requests via a proxy),
+then you need to tell JMeter to use that proxy before starting JMeter,
+using the command-line options -H and -P.
+This setting will also be needed when running the generated test plan.
+
+
+
Installing the JMeter CA certificate for HTTPS recording
+
+As mentioned above, when run under Java 7, JMeter can generate certificates for each server.
+For this to work smoothly, the root CA signing certificate used by JMeter needs to be trusted by the browser.
+The first time that the recorder is started, it will generate the certificates if necessary.
+The root CA certificate is exported into a file with the name ApacheJMeterTemporaryRootCA in the current launch directory.
+When the certificates have been set up, JMeter will show a dialog with the current certificate details.
+At this point, the certificate can be imported into the browser, as per the instructions below.
+
+
+Note that once the root CA certificate has been installed as a trusted CA, the browser will trust any certificates signed by it.
+Until such time as the certificate expires or the certificate is removed from the browser, it will not warn the user that the certificate is being relied upon.
+So anyone that can get hold of the keystore and password can use the certificate to generate certificates which will be accepted
+by any browsers that trust the JMeter root CA certificate.
+For this reason, the password for the keystore and private keys are randomly generated and a short validity period used.
+The passwords are stored in the local preferences area.
+Please ensure that only trusted users have access to the host with the keystore.
+
+
Installing the certificate in Firefox
+
+Choose the following options:
+
+
Tools / Options
+
Advanced / Certificates
+
View Certificates
+
Authorities
+
Import ...
+
Browse to the JMeter launch directory, and click on the file ApacheJMeterTemporaryRootCA.crt, press Open
+
Click View and check that the certificate details agree with the ones displayed by the JMeter Test Script Recorder
+
If OK, select "Trust this CA to identify web sites", and press OK
+
Close dialogs by pressing OK as necessary
+
+
+
Installing the certificate in Chrome or Internet Explorer
+
+Both Chrome and Internet Explorer use the same trust store for certificates.
+
+
Browse to the JMeter launch directory, and click on the file ApacheJMeterTemporaryRootCA.crt, and open it
+
Click on the "Details" tab and check that the certificate details agree with the ones displayed by the JMeter Test Script Recorder
+
If OK, go back to the "General" tab, and click on "Install Certificate ..." and follow the Wizard prompts
+
+
+
Installing the certificate in Opera
+
+
+
Tools / Preferences / Advanced / Security
+
Manage Certificates...
+
Select "Intermediate" tab, click "Import..."
+
Browse to the JMeter launch directory, and click on the file ApacheJMeterTemporaryRootCA.usr, and open it
Descriptive name for this element that is shown in the tree.
No
+
Port
The port that the HTTP(S) Test Script Recorder listens to. 8080 is the default, but you can change it.
Yes
+
HTTPS Domains
List of domain (or host) names for HTTPS. Use this to pre-generate certificates for all servers you wish to record.
+
+ For example, *.apache.org,*.incubator.apache.org
+
+ Note that wildcard domains only apply to one level,
+ i.e. podling.incubator.apache.org matches *.incubator.apache.org but not *.apache.org
+
No
+
Target Controller
The controller where the proxy will store the generated samples. By default, it will look for a Recording Controller and store them there wherever it is.
Yes
+
Grouping
Whether to group samplers for requests from a single "click" (requests received without significant time separation), and how to represent that grouping in the recording:
+
+
Do not group samplers: store all recorded samplers sequentially, without any grouping.
+
Add separators between groups: add a controller named "--------------" to create a visual separation between the groups. Otherwise the samplers are all stored sequentially.
+
Put each group in a new controller: create a new Simple Controller for each group, and store all samplers for that group in it.
+
Store 1st sampler of each group only: only the first request in each group will be recorded. The "Follow Redirects" and "Retrieve All Embedded Resources..." flags will be turned on in those samplers.
+
Put each group in a new transaction controller: create a new Transaction Controller for each group, and store all samplers for that group in it.
+
+ The property proxy.pause determines the minimum gap that JMeter needs between requests
+ to treat them as separate "clicks". The default is 1000 (milliseconds) i.e. 1 second.
+ If you are using grouping, please ensure that you leave the required gap between clicks.
+
Yes
+
+
Capture HTTP Headers
Should headers be added to the plan?
+ If specified, a Header Manager will be added to each HTTP Sampler.
+ The Proxy server always removes Cookie and Authorization headers from the generated Header Managers.
+ By default it also removes If-Modified-Since and If-None-Match headers.
+ These are used to determine if the browser cache items are up to date;
+ when recording one normally wants to download all the content.
+ To change which additional headers are removed, define the JMeter property proxy.headers.remove
+ as a comma-separated list of headers.
+
Yes
+
Add Assertions
Add a blank assertion to each sampler?
Yes
+
Regex Matching
Use Regex Matching when replacing variables? If checked replacement will use word boundaries, ie it will only replace word matching values of variable, not part of a word. A word boundary follows Perl5 definition and is equivalent to \b. More information below in the paragraph about "User Defined Variable replacement".
Yes
+
Type
Which type of sampler to generate (the Java default or HTTPClient)
Yes
+
Redirect Automatically
Set Redirect Automatically in the generated samplers?
Yes
+
Follow Redirects
Set Follow Redirects in the generated samplers?
+ Note: see "Recording and redirects" section below for important information.
+
Yes
+
Use Keep-Alive
Set Use Keep-Alive in the generated samplers?
Yes
+
Retrieve all Embedded Resources
Set Retrieve all Embedded Resources in the generated samplers?
Yes
+
Content Type filter
+ Filter the requests based on the content-type - e.g. "text/html [;charset=utf-8 ]".
+ The fields are regular expressions which are checked to see if they are contained in the content-type.
+ [Does not have to match the entire field].
+ The include filter is checked first, then the exclude filter.
+ Samples which are filtered out will not be stored.
+ Note: this filtering is applied to the content type of the response
+
No
+
Patterns to Include
Regular expressions that are matched against the full URL that is sampled. Allows filtering of requests that are recorded. All requests pass through, but only
+ those that meet the requirements of the Include/Exclude fields are recorded. If both Include and Exclude are
+ left empty, then everything is recorded (which can result in dozens of samples recorded for each page, as images, stylesheets,
+ etc are recorded). If there is at least one entry in the Include field, then only requests that match one or more Include patterns are
+ recorded.
No
+
Patterns to Exclude
Regular expressions that are matched against the URL that is sampled.
+ Any requests that match one or more Exclude pattern are not recorded.
No
+
Notify Child Listeners of filtered samplers
Notify Child Listeners of filtered samplers
+ Any response that match one or more Exclude pattern is not delivered to Child Listeners (View Results Tree).
No
+
Start Button
Start the proxy server. JMeter writes the following message to the console once the proxy server has started up and is ready to take requests: "Proxy up and running!".
N/A
+
Stop Button
Stop the proxy server.
N/A
+
Restart Button
Stops and restarts the proxy server. This is
+ useful when you change/add/delete an include/exclude filter expression.
N/A
+
+
+
Recording and redirects
+
+During recording, the browser will follow a redirect response and generate an additional request.
+The Proxy will record both the original request and the redirected request
+(subject to whatever exclusions are configured).
+The generated samples have "Follow Redirects" selected by default, because that is generally better.
+[Redirects may depend on the original request, so repeating the originally recorded sample may not always work.]
+
+
+Now if JMeter is set to follow the redirect during replay, it will issue the original request,
+and then replay the redirect request that was recorded.
+To avoid this duplicate replay, JMeter tries to detect when a sample is the result of a previous
+redirect. If the current response is a redirect, JMeter will save the redirect URL.
+When the next request is received, it is compared with the saved redirect URL and if there is a match,
+JMeter will disable the generated sample. It also adds comments to the redirect chain.
+This assumes that all the requests in a redirect chain will follow each other without any intervening requests.
+To disable the redirect detection, set the property proxy.redirect.disabling=false
+
+
+
Includes and Excludes
+
The include and exclude patterns are treated as regular expressions (using Jakarta ORO).
+They will be matched against the host name, port (actual or implied) path and query (if any) of each browser request.
+If the URL you are browsing is
+"http://jmeter.apache.org/jmeter/index.html?username=xxxx",
+then the regular expression will be tested against the string:
+"jmeter.apache.org:80/jmeter/index.html?username=xxxx".
+Thus, if you want to include all .html files, your regular expression might look like:
+".*\.html(\?.*)?" - or ".*\.html"
+if you know that there is no query string or you only want html pages without query strings.
+
+
+If there are any include patterns, then the URL must match at least one of the patterns
+, otherwise it will not be recorded.
+If there are any exclude patterns, then the URL must not match any of the patterns
+, otherwise it will not be recorded.
+Using a combination of includes and excludes,
+you should be able to record what you are interested in and skip what you are not.
+
+
+
+N.B. the string that is matched by the regular expression must be the same as the whole host+path string. Thus "\.html" will not match j.a.o/index.html
+
+
+
Capturing binary POST data
+
+Versions of JMeter from 2.3.2 are able to capture binary POST data.
+To configure which content-types are treated as binary, update the JMeter property proxy.binary.types.
+The default settings are as follows:
+
+# These content-types will be handled by saving the request in a file:
+proxy.binary.types=application/x-amf,application/x-java-serialized-object
+# The files will be saved in this directory:
+proxy.binary.directory=user.dir
+# The files will be created with this file filesuffix:
+proxy.binary.filesuffix=.binary
+
+
+
+
Adding timers
+
It is also possible to have the proxy add timers to the recorded script. To
+do this, create a timer directly within the HTTP(S) Test Script Recorder component.
+The proxy will place a copy of this timer into each sample it records, or into
+the first sample of each group if you're using grouping. This copy will then be
+scanned for occurences of variable ${T} in its properties, and any such
+occurences will be replaced by the time gap from the previous sampler
+recorded (in milliseconds).
+
+
When you are ready to begin, hit "start".
+
You will need to edit the proxy settings of your browser to point at the
+appropriate server and port, where the server is the machine JMeter is running on, and
+the port # is from the Proxy Control Panel shown above.
+
+
Where Do Samples Get Recorded?
+
JMeter places the recorded samples in the Target Controller you choose. If you choose the default option
+"Use Recording Controller", they will be stored in the first Recording Controller found in the test object tree (so be
+sure to add a Recording Controller before you start recording).
+
+
+If the Proxy does not seem to record any samples, this could be because the browser is not actually using the proxy.
+To check if this is the case, try stopping the proxy.
+If the browser still downloads pages, then it was not sending requests via the proxy.
+Double-check the browser options.
+If you are trying to record from a server running on the same host,
+then check that the browser is not set to "Bypass proxy server for local addresses"
+(this example is from IE7, but there will be similar options for other browsers).
+If JMeter does not record browser URLs such as http://localhost/ or http://127.0.0.1/,
+try using the non-loopback hostname or IP address, e.g. http://myhost/ or http://192.168.0.2/.
+
+
+
Handling of HTTP Request Defaults
+
If the HTTP(S) Test Script Recorder finds enabled HTTP Request Defaults directly within the
+controller where samples are being stored, or directly within any of its parent controllers, the recorded samples
+will have empty fields for the default values you specified. You may further control this behaviour by placing an
+HTTP Request Defaults element directly within the HTTP(S) Test Script Recorder, whose non-blank values will override
+those in the other HTTP Request Defaults. See Best
+Practices with the HTTP(S) Test Script Recorder for more info.
+
+
User Defined Variable replacement
+
Similarly, if the HTTP(S) Test Script Recorder finds User Defined Variables (UDV) directly within the
+controller where samples are being stored, or directly within any of its parent controllers, the recorded samples
+will have any occurences of the values of those variables replaced by the corresponding variable. Again, you can
+place User Defined Variables directly within the HTTP(S) Test Script Recorder to override the values to be replaced. See
+ Best Practices with the Test Script Recorder for more info.
+
+
Please note that matching is case-sensitive.
+
+
Replacement by Variables: by default, the Proxy server looks for all occurences of UDV values.
+If you define the variable WEB with the value www, for example,
+the string www will be replaced by ${WEB} wherever it is found.
+To avoid this happening everywhere, set the "Regex Matching" check-box.
+This tells the proxy server to treat values as Regexes (using the perl5 compatible regex matchers provided by ORO).
+
+
If "Regex Matching" is selected every variable will be compiled into a perl compatible regex enclosed in
+\b( and )\b. That way each match will start and end at a word boundary.
+
+
Note that the boundary characters are not part of the matching group, e.g. n.* to match name out
+of You can call me 'name'.
+
+
If you don't want your regex to be enclosed with those boundary matchers, you have to enclose your
+regex within parens, e.g ('.*?') to match 'name' out of You can call me 'name'.
+
+
+The variables will be checked in random order. So ensure, that the potential matches don't overlap.
+Overlapping matchers would be .* (which matches anything) and www (which
+matches www only). Non-overlapping matchers would be a+ (matches a sequence
+of a's) and b+ (matches a sequence of b's).
+
+
+
If you want to match a whole string only, enclose it in (^ and $), e.g. (^thus$).
+The parens are neccessary, since the normally added boundary characters will prevent ^ and
+$ to match.
+
+
If you want to match /images at the start of a string only, use the value (^/images).
+Jakarta ORO also supports zero-width look-ahead, so one can match /images/...
+but retain the trailing / in the output by using (^/images(?=/))".
+
+
+Note that the current version of Jakara ORO does not support look-behind - i.e. (?<=...) or (?<!...).
+
+
+
Look out for overlapping matchers. For example the value .* as a regex in a variable named
+regex will partly match a previous replaced variable, which will result in something like
+${{regex}, which is most probably not the desired result.
+
+
If there are any problems interpreting any variables as patterns, these are reported in jmeter.log,
+so be sure to check this if UDVs are not working as expected.
+
+
When you are done recording your test samples, stop the proxy server (hit the "stop" 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
+cookie manager, etc.
+
+
How can I record the server's responses too?
+
Just place a View Results Tree listener as a child of the HTTP(S) Test Script Recorder and the responses will be displayed.
+You can also add a Save Responses to a file Post-Processor which will save the responses to files.
+
+
+
Associating requests with responses
+
+If you define the property proxy.number.requests=true
+JMeter will add a number to each sampler and each response.
+Note that there may be more responses than samplers if excludes or includes have been used.
+Responses that have been excluded will have labels enclosed in [ and ], for example [23 /favicon.ico]
+
+
Cookie Manager
+
+If the server you are testing against uses cookies, remember to add an HTTP Cookie Manager to the test plan
+when you have finished recording it.
+During recording, the browser handles any cookies, but JMeter needs a Cookie Manager
+to do the cookie handling during a test run.
+The JMeter Proxy server passes on all cookies sent by the browser during recording, but does not save them to the test
+plan because they are likely to change between runs.
+
+
Authorization Manager
+
+The HTTP(S) Test Script Recorder grabs "Authentication" header, tries to compute the Auth Policy. If Authorization Manager was added to target
+controller manually, HTTP(S) Test Script Recorder will find it and add authorization(matching ones will be removed). Otherwise
+Authorization Manager will be added to target controller with authorization object.
+You may have to fix automatically computed values after recording.
+
+
+
Uploading files
+
+Some browsers (e.g. Firefox and Opera) don't include the full name of a file when uploading files.
+This can cause the JMeter proxy server to fail.
+One solution is to ensure that any files to be uploaded are in the JMeter working directory,
+either by copying the files there or by starting JMeter in the directory containing the files.
+
+
Recording HTTP Based Non Textual Protocols not natively available in JMeter
+
+You may have to record an HTTP protocol that is not handled by default by JMeter (Custom Binary Protocol, Adobe Flex, Microsoft Silverlight... ).
+Although JMeter does not provide a native proxy implementation to record these protocols, you have the ability to
+record these protocols by implementing a custom SamplerCreator. This Sampler Creator will translate the binary format into a HTTPSamplerBase subclass
+that can be added to the JMeter Test Case.
+For more details see "Extending JMeter".
+
+The HTTP Mirrror Server is a very simple HTTP server - it simply mirrors the data sent to it.
+This is useful for checking the content of HTTP requests.
+
Port on which Mirror server listens, defaults to 8081.
Yes
+
Max Number of threads
If set to a value > 0, number of threads serving requests will be limited to the configured number, if set to a value <=0
+ a new thread will be created to serve each incoming request. Defaults to 0
No
+
Max Queue size
Size of queue used for holding tasks before they are executed by Thread Pool, when Thread pool is exceeded, incoming requests will
+ be held in this queue and discarded when this queue is full. This parameter is only used if Max Number of Threads is greater than 0. Defaults to 25
No
+
+
+Note that you can get more control over the responses by adding an HTTP Header Manager with the following name/value pairs:
+
+The Property Display shows the values of System or JMeter properties.
+Values can be changed by entering new text in the Value column.
+It is available only on the WorkBench.
+
+The Debug PostProcessor creates a subSample with the details of the previous Sampler properties,
+JMeter variables, properties and/or System Properties.
+
+
+The values can be seen in the View Results Tree Listener Response Data pane.
+
Descriptive name for this element that is shown in the tree.
Yes
+
+
+When using Test Fragment with Module Controller, ensure you disable the Test Fragment to avoid the execution of Test Fragment itself.
+This is done by default since JMeter 2.13.
+
+ A special type of ThreadGroup that can be utilized to perform Pre-Test Actions. The behavior of these threads
+ is exactly like a normal Thread Group element. The difference is that these type of threads
+ execute before the test proceeds to the executing of regular Thread Groups.
+
+ A special type of ThreadGroup that can be utilized to perform Post-Test Actions. The behavior of these threads
+ is exactly like a normal Thread Group element. The difference is that these type of threads
+ execute after the test has finished executing its regular Thread Groups.
+
+
+
+Note that by default it won't run if Test is gracefully shutdown, if you want to make it run in this case,
+ensure you check option "Run tearDown Thread Groups after shutdown of main threads" on Test Plan element.
+If Test Plan is stopped, tearDown will not run even if option is checked.
+
+Figure 1 - Run tearDown Thread Groups after shutdown of main threads
+
+JMeter functions are special values that can populate fields of any Sampler or other
+element in a test tree. A function call looks like this:
+
+
${__functionName(var1,var2,var3)}
+
+
+Where "__functionName" matches the name of a function.
+
+Parentheses surround the parameters sent to the function, for example ${__time(YMD)}
+The actual parameters vary from function to function.
+Functions that require no parameters can leave off the parentheses, for example ${__threadNum}.
+
+
+
+If a function parameter contains a comma, then be sure to escape this with "\", otherwise JMeter will treat it as a parameter delimiter.
+For example:
+
+${__time(EEE\, d MMM yyyy)}
+
+If the comma is not escaped - e.g. ${__javaScript(Math.max(2,5))} - you will get an error such as:
+
+ERROR - jmeter.functions.JavaScript: Error processing Javascript: [Math.max(2]
+ org.mozilla.javascript.EvaluatorException: missing ) after argument list (<cmd>#1)
+
+ This is because the string "Math.max(2,5)" is treated as being two parameters to the __javascript function:
+ Math.max(2 and 5)
+ Other error messages are possible.
+
+
Variables are referenced as follows:
+
+${VARIABLE}
+
+
+
+
+If an undefined function or variable is referenced, JMeter does not report/log an error - the reference is returned unchanged.
+For example if UNDEF is not defined as a variable, then the value of ${UNDEF} is ${UNDEF}.
+
+Variables, functions (and properties) are all case-sensitive.
+
+Versions of JMeter after 2.3.1 trim spaces from variable names before use, so for example
+${__Random(1,63, LOTTERY )} will use the variable 'LOTTERY' rather than ' LOTTERY '.
+
+
+
+Properties are not the same as variables.
+Variables are local to a thread; properties are common to all threads,
+and need to be referenced using the __P or __property function.
+
+
+When using \ before a variable for a windows path for example C:\test\${test}, ensure you escape the \ otherwise JMeter will not interpret the variable, example:
+C:\\test\\${test}.
+
+Alternatively, just use / instead for the path separator - e.g. C:/test/${test} - Windows JVMs will convert the separators as necessary.
+
There are two kinds of functions: user-defined static values (or variables), and built-in functions.
+User-defined static values allow the user to define variables to be replaced with their static value when
+a test tree is compiled and submitted to be run. This replacement happens once at the beginning of the test
+run. This could be used to replace the DOMAIN field of all HTTP requests, for example - making it a simple
+matter to change a test to target a different server with the same test.
+
+
+Note that variables cannot currently be nested; i.e ${Var${N}} does not work.
+The __V (variable) function (versions after 2.2) can be used to do this: ${__V(Var${N})}.
+In earlier JMeter versions one can use ${__BeanShell(vars.get("Var${N}")}.
+
+
This type of replacement is possible without functions, but was less convenient and less intuitive.
+It required users to create default config elements that would fill in blank values of Samplers.
+Variables allow one to replace only part of any given value, not just filling in blank values.
+
+With built-in functions users can compute new values at run-time based on previous response data, which
+thread the function is in, the time, and many other sources. These values are generated fresh for every
+request throughout the course of the test.
+
Functions are shared between threads.
+Each occurrence of a function call in a test plan is handled by a separate function instance.
+Functions and variables can be written into any field of any test component (apart from the TestPlan - see below).
+Some fields do not allow random strings
+because they are expecting numbers, and thus will not accept a function. However, most fields will allow
+functions.
+
+
+Functions which are used on the Test Plan have some restrictions.
+JMeter thread variables will have not been fully set up when the functions are processed,
+so variable names passed as parameters will not be set up, and variable references will not work,
+so split() and regex() and the variable evaluation functions won't work.
+The threadNum() function won't work (and does not make sense at test plan level).
+The following functions should work OK on the test plan:
+
+
intSum
+
longSum
+
machineName
+
BeanShell
+
javaScript
+
jexl
+
random
+
time
+
property functions
+
log functions
+
+
+
+Configuration elements are processed by a separate thread.
+Therefore functions such as __threadNum do not work properly in elements such as User Defined Variables.
+Also note that variables defined in a UDV element are not available until the element has been processed.
+
+
When using variable/function references in SQL code (etc),
+remember to include any necessary quotes for text strings,
+i.e. use
+SELECT item from table where name='${VAR}'
+ not
+
+SELECT item from table where name=${VAR}
+ (unless VAR itself contains the quotes)
+
Referencing a variable in a test element is done by bracketing the variable name with '${' and '}'.
+
Functions are referenced in the same manner, but by convention, the names of
+functions begin with "__" to avoid conflict with user value names*. Some functions take arguments to
+configure them, and these go in parentheses, comma-delimited. If the function takes no arguments, the parentheses can
+be omitted.
+
+
Argument values that themselves contain commas should be escaped as necessary.
+If you need to include a comma in your parameter value, escape it like so: '\,'.
+This applies for example to the scripting functions - Javascript, Beanshell, Jexl - where it is necessary to escape any commas
+that may be needed in script method calls - e.g.
+
+
+ ${__BeanShell(vars.put("name"\,"value"))}
+
+
+Alternatively, you can define your script as a variable, e.g. on the Test Plan:
+
SCRIPT vars.put("name","value")
+The script can then be referenced as follows:
+
${__BeanShell(${SCRIPT})}
+There is no need to escape commas in the SCRIPT variable because the function call is parsed before the variable is replaced with its value.
+This works well in conjunction with the BSF or BeanShell Samplers, as these can be used to test Javascript, Jexl and BeanShell scripts.
+
+
+Functions can reference variables and other functions, for example
+${__XPath(${__P(xpath.file),${XPATH})}
+will use the property "xpath.file" as the file name
+and the contents of the variable XPATH as the expression to search for.
+
+
+JMeter provides a tool to help you construct
+function calls for various built-in functions, which you can then copy-paste.
+It will not automatically escape values for you, since functions can be parameters to other functions, and you should only escape values you intend as literal.
+
+
+If a string contains a backslash('\') and also contains a function or variable reference, the backslash will be removed if
+it appears before '$' or ',' or '\'.
+This behaviour is necessary to allow for nested functions that include commas or the string ${.
+Backslashes before '$' or ',' or '\' are not removed if the string does not contain a function or variable reference.
+
+
+The value of a variable or function can be reported using the __logn() function.
+The __logn() function reference can be used anywhere in the test plan after the variable has been defined.
+Alternatively, the Java Request sampler can be used to create a sample containing variable references;
+the output will be shown in the appropriate Listener.
+For versions of JMeter later than 2.3, there is a Debug Sampler
+that can be used to display the values of variables etc in the Tree View Listener.
+
+
*If you define a user-defined static variable with the same name as a built-in function, your static
+variable will override the built-in function.
The Function Helper dialog is available from JMeter's Tools menu.
+Function Helper Dialog
+
Using the Function Helper, you can select a function from the pull down, and assign
+values for its arguments. The left column in the table provides a brief description of the
+argument, and the right column is where you write in the value for that argument. Different
+functions take different arguments.
+
Once you have done this, click the "generate" button, and the appropriate string is generated
+for you to copy-paste into your test plan wherever you like.
The Regex Function is used to parse the previous response (or the value of a variable) using any regular
+expression (provided by user). The function returns the template string with variable values filled
+in.
+
The __regexFunction can also store values for future use. In the sixth parameter, you can specify
+a reference name. After this function executes, the same values can be retrieved at later times
+using the syntax for user-defined values. For instance, if you enter "refName" as the sixth
+parameter you will be able to use:
+
+
${refName} to refer to the computed result of the second parameter ("Template for the
+replacement string") parsed by this function
+
${refName_g0} to refer to the entire match parsed by this function.
+
${refName_g1} to refer to the first group parsed by this function.
+
${refName_g#} to refer to the nth group parsed by this function.
+
${refName_matchNr} to refer to the number of groups found by this function.
+
+
If using distributed testing, ensure you switch mode (see jmeter.properties) so that it's not a stripping one, see
+ Bug
+ 56376
The first argument is the regular expression
+ to be applied to the response data. It will grab all matches. Any parts of this expression
+ that you wish to use in your template string, be sure to surround in parentheses. Example:
+ <a href="(.*)">. This will grab the value of the link and store it as the first group (there is
+ only 1 group). Another example: <input type="hidden" name="(.*)" value="(.*)">. This will
+ grab the name as the first group, and the value as the second group. These values can be used
+ in your template string
Yes
+
Second argument
This is the template string that will replace
+ the function at run-time. To refer to a group captured in the regular expression, use the syntax:
+ $[group_number]$. Ie: $1$, or $2$. Your template can be any string.
Yes
+
Third argument
The third argument tells JMeter which match
+ to use. Your regular expression might find numerous matches. You have four choices:
+
An integer - Tells JMeter to use that match. '1' for the first found match, '2' for the
+ second, and so on
+
RAND - Tells JMeter to choose a match at random.
+
ALL - Tells JMeter to use all matches, and create a template string for each one and then
+ append them all together. This option is little used.
+
A float number between 0 and 1 - tells JMeter to find the Xth match using the formula:
+ (number_of_matches_found * float_number) rounded to nearest integer.
+
No, default=1
+
Fourth argument
If 'ALL' was selected for the above argument
+ value, then this argument will be inserted between each appended copy of the template value.
No
+
Fifth argument
Default value returned if no match is found
No
+
Sixth argument
A reference name for reusing the values parsed by this function.
+ Stored values are ${refName} (the replacement template string) and ${refName_g#} where "#" is the
+ group number from the regular expression ("0" can be used to refer to the entire match).
No
+
Seventh argument
Input variable name.
+ If specified, then the value of the variable is used as the input instead of using the previous sample result.
+
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 users. If each user's values is incremented separately,
+that is like counting the number of iterations through the test plan. A global counter is like
+counting how many times that request was run.
+
+
The counter uses an integer variable to hold the count, which therefore has a maximum of 2,147,483,647.
+
The counter function instances are now completely independent.
+[JMeter 2.1.1 and earlier used a fixed thread variable to keep track of the per-user count,
+so multiple counter functions operated on the same value.]
+The global counter - "FALSE" - is separately maintained by each counter instance.
+
+
+
+Multiple __counter function calls in the same iteration won't increment the value further.
+
+
+If you want to have a count that increments for each sample, use the function in a Pre-Processor such as User Parameters.
+
TRUE if you wish each simulated user's counter
+ to be kept independent and separate from the other users. FALSE for a global counter.
Yes
+
+
Second argument
A reference name for reusing the value created by this function.
+ Stored values are of the form ${refName}. This allows you to keep one counter and refer to its value in
+ multiple places. [For JMeter 2.1.1 and earlier this parameter was required.]
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.
+
+
There are no arguments for this function.
+
+
+This function does not work in any Configuration elements (e.g. User Defined Variables) as these are run from a separate thread.
+Nor does it make sense to use it on the Test Plan.
+
+The intSum function can be used to compute the sum of two or more integer values.
+
+
+JMeter Versions 2.3.1 and earlier required the reference name to be present.
+The reference name is now optional, but it must not be a valid integer.
+
A reference name for reusing the value computed by this function.
+ If specified, the reference name must contain at least one non-numeric character otherwise it will
+ be treated as another int value to be added.
+
A reference name for reusing the value computed by this function.
+ If specified, the reference name must contain at least one non-numeric character otherwise it will
+ be treated as another long value to be added.
+
+ 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.
+
+
+ See also the
+ CSV Data Set Config test element
+ which may be easier to use. However, that does not currently support multiple input files.
+
+
+
+ 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.]
+
+
+ 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.
+
+
If an error occurs opening or reading the file, then the function returns the string "**ERR**"
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.
+
Yes
+
Variable Name
+A reference name - refName - for reusing the value created by this function. Stored values are of the form ${refName}.
+Defaults to "StringFromFile_".
+
No
+
Start sequence number
Initial Sequence number (if omitted, the End sequence number is treated as a loop count)
No
+
End sequence number
Final sequence number (if omitted, seqence numbers can increase without limit)
No
+
+
The file name parameter is resolved when the file is opened or re-opened.
+
The reference name parameter (if supplied) is resolved every time the function is executed.
+
Using sequence numbers:
+
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.
+ If the optional start number is not specified, the path name is used as is.
+ Useful formatting sequences are:
+
+
+
+# - insert the number, with no leading zeros or spaces
+000 - insert the number packed out to 3 digits with leading zeros if necessary
+
+Examples:
+ pin#'.'dat -> pin1.dat, ... pin9.dat, pin10.dat, ... pin9999.dat
+ pin000'.'dat -> pin001.dat ... pin099.dat ... pin999.dat ... pin9999.dat
+ pin'.'dat# -> pin.dat1, ... pin.dat9 ... pin.dat999
+
+ If more digits are required than there are formatting characters, the number will be
+ expanded as necessary.
+ 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
+ (though #. and 000. work as expected in locales where the decimal point is also ".")
+
+ In other locales (e.g. fr), the decimal point is "," - which means that "#."
+ becomes "nnn,".
+ See the documentation for DecimalFormat for full details.
+ 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.
+ 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.
+
+
+ ${_StringFromFile(PIN#'.'DAT,,1,2)} - reads PIN1.DAT, PIN2.DAT
+ ${_StringFromFile(PIN.DAT,,,2)} - reads PIN.DAT twice
+
+ Note that the "." in PIN.DAT above should not be quoted.
+ In this case the start number is omitted, so the file name is used exactly as is.
+
+
+The javaScript function executes a piece of JavaScript (not Java!) code and returns its value
+
+
+The JMeter Javascript function calls a standalone JavaScript interpreter.
+Javascript is used as a scripting language, so you can do calculations etc.
+Rhinoscript allows access to static methods via its Packages object.
+See the Scripting Java documentation.
+For example one can access the JMeterContextService static methods thus:
+Packages.org.apache.jmeter.threads.JMeterContextService.getTotalThreads()
+
+
+JMeter is not a browser, and does not interpret the JavaScript in downloaded pages.
+
The JavaScript expression to be executed. For example:
+
+
new Date() - return the current date and time
+
Math.floor(Math.random()*(${maxRandom}+1))
+ - a random number between 0 and the variable maxRandom
+
${minRandom}+Math.floor(Math.random()*(${maxRandom}-${minRandom}+1))
+ - a random number between the variables minRandom and maxRandom
+
"${VAR}"=="abcd"
+
+
Yes
+
Variable Name
A reference name for reusing the value
+ computed by this function.
No
+
+
Remember to include any necessary quotes for text strings and JMeter variables. Also, if
+the expression has commas, please make sure to escape them. For example in:
+
+${__javaScript('${sp}'.slice(7\,99999))}
+
+the comma after 7 is escaped.
+ 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)
+
+
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.
+
+
+ The *ALIAS feature allows the same file to be opened more than once,
+ and also allows for shorter file names.
+
+
+ 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.]
+
+
+ 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
+
+ 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
+
Yes
+
+
For example, you could set up some variables as follows:
+
+This would read two columns from one line, and two columns from the next available line.
+If all the variables are defined on the same User Parameters Pre-Processor, then the lines
+will be consecutive. Otherwise, a different thread may grab the next line.
+
+
+The function is not suitable for use with large files, as the entire file is stored in memory.
+For larger files, use CSV Data Set Config element
+or StringFromFile.
+
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.
+
For example:
+
+
${__property(user.dir)} - return value of user.dir
+
${__property(user.dir,UDIR)} - return value of user.dir and save in UDIR
+
${__property(abcd,ABCD,atod)} - return value of property abcd (or "atod" if not defined) and save in ABCD
+
${__property(abcd,,atod)} - return value of property abcd (or "atod" if not defined) but don't save it
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.
+
For example:
+
+Define the property value:
+
+jmeter -Jgroup1.threads=7 -Jhostname1=www.realhost.edu
+
+
+Fetch the values:
+
+${__P(group1.threads)} - return the value of group1.threads
+
+${__P(group1.loops)} - return the value of group1.loops
+
+${__P(hostname,www.dummy.org)} - return value of property hostname or www.dummy.org if not defined
+
+
+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!)
+
If non-empty, creates a Throwable to pass to the logger
No
+
Comment
If present, it is displayed in the string.
+ Useful for identifying what is being logged.
No
+
+
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.
+
+
+For example:
+ ${__log(Message)} - written to the log file as "...thread Name : Message"
+ ${__log(Message,OUT)} - written to console window
+ ${__log(${VAR},,,VAR=)} - written to log file as "...thread Name VAR=value"
+
If non-empty, creates a Throwable to pass to the logger
No
+
+
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.
+
+
+For example:
+ ${__logn(VAR1=${VAR1},OUT)} - write the value of the variable to the console window
+
+ The BeanShell function evaluates the script passed to it, and returns the result.
+
+
+For full details on using BeanShell, please see the BeanShell web-site at http://www.beanshell.org/
+
+
+
+Note that a different Interpreter is used for each independent occurence of the function
+in a test script, but the same Interpreter is used for subsequent invocations.
+This means that variables persist across calls to the function.
+
+
+A single instance of a function may be called from multiple threads.
+However the function execute() method is synchronised.
+
+
+If the property "beanshell.function.init" is defined, it is passed to the Interpreter
+as the name of a sourced file. This can be used to define common methods and variables. There is a
+sample init file in the bin directory: BeanShellFunction.bshrc.
+
+
+The following variables are set before the script is executed:
+
+
log - the logger for the BeanShell function (*)
+
ctx - the current JMeter context variable
+
vars - the current JMeter variables
+
props - JMeter Properties object
+
threadName - the threadName (String)
+
Sampler the current Sampler, if any
+
SampleResult - the current SampleResult, if any
+
+(*) means that this is set before the init file, if any, is processed.
+Other variables vary from invocation to invocation.
+
+
+ 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.
+
+
+ Example:
+
+
+ Define VAR="a||c|" in the test plan.
+
+ ${__split(${VAR},VAR,|)}
+
+ This will return the contents of VAR, i.e. "a||c|" and set the following variables:
+
+ VAR_n=4 (3 in JMeter 2.1.1 and earlier)
+
+ VAR_1=a
+
+ VAR_2=?
+
+ VAR_3=c
+
+ VAR_4=? (null in JMeter 2.1.1 and earlier)
+
+ VAR_5=null (in JMeter 2.1.2 and later)
+
+
+ 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 that the entire NodeList is held in memory.
+
+
+ Example:
+
+
+
+
+ ${__XPath(/path/to/build.xml, //target/@name)}
+
+ This will match all targets in build.xml and return the contents of the next name attribute
+
+
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.
+
The original value can be returned by setting the optional 3rd parameter to "true".
+
Properties are global to JMeter,
+ so can be used to communicate between threads and thread groups
+ The format to be passed to SimpleDateFormat.
+ The function supports various shorthand aliases, see below.
+ If ommitted, the function returns the current time in milliseconds since the epoch.
+
No
+
Name of variable
The name of the variable to set.
No
+
+
If the format string is omitted, then the function returns the current time in milliseconds since the epoch.
+In versions of JMeter after 2.7, if the format matches "/ddd" (where ddd are decimal digits),
+then the function returns the current time in milliseconds divided by the value of ddd.
+For example, "/1000" returns the current time in seconds since the epoch.
+Otherwise, the current time is passed to SimpleDateFormat.
+The following shorthand aliases are provided:
+
+
+
YMD = yyyyMMdd
+
HMS = HHmmss
+
YMDHMS = yyyyMMdd-HHmmss
+
USER1 = whatever is in the Jmeter property time.USER1
+
USER2 = whatever is in the Jmeter property time.USER2
+
+
The defaults can be changed by setting the appropriate JMeter property, e.g.
+time.YMD=yyMMdd
+
+ Jexl can also create classes and call methods on them, for example:
+
+
+
+ Systemclass=log.class.forName("java.lang.System");
+ now=Systemclass.currentTimeMillis();
+
+ Note that the Jexl documentation on the web-site wrongly suggests that "div" does integer division.
+ In fact "div" and "/" both perform normal division. One can get the same effect
+ as follows:
+
+ i= 5 / 2;
+ i.intValue(); // or use i.longValue()
+
+
+
Versions of JMeter after 2.3.2 allow the expression to contain multiple statements.
+ JMeter 2.3.2 and earlier only processed the first statement (if there were multiple statements a warning was logged).
+
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).
+
+
For example, if one has variables A1,A2 and N=1:
+
+
${A1} - works OK
+
${A${N}} - does not work (nested variable reference)
+
${__V(A${N})} - works OK. A${N} becomes A1, and the __V function returns the value of A1
The eval function returns the result of evaluating an expression stored in a variable.
+
+
+ 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".
+
The eval function returns the result of evaluating a string expression.
+
+
+ This allows one to interpolate variable and function references in a string
+ which is stored in a variable. For example, given the following variables:
+
+
name=Smith
+
column=age
+
table=birthdays
+
SQL=select ${column} from ${table} where name='${name}'
+
+ then ${__eval(${SQL})} will evaluate as "select age from birthdays where name='Smith'".
+
+
+ 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.
+
+Function to unescape a string containing HTML entity escapes
+to a string containing the actual Unicode characters corresponding to the escapes.
+Supports HTML 4.0 entities.
+
+
+For example, the string "<Français>"
+will become "<Français>".
+
+
+If an entity is unrecognized, it is left alone, and inserted verbatim into the result string.
+e.g. ">&zzzz;x" will become ">&zzzz;x".
+
+
+ Uses StringEscapeUtils#unescapeHtml(String) from Commons Lang.
+
+ The samplerName function returns the name (i.e. label) of the current sampler.
+
+
+ The function does not work in Test elements that don't have an associated sampler.
+ For example the Test Plan.
+ Configuration elements also don't have an associated sampler.
+ However some Configuration elements are referenced directly by samplers, such as the HTTP Header Manager
+ and Http Cookie Manager, and in this case the functions are resolved in the context of the Http Sampler.
+ Pre-Processors, Post-Processors and Assertions always have an associated Sampler.
+
+Most variables are set by calling functions or by test elements such as User Defined Variables;
+in which case the user has full control over the variable name that is used.
+However some variables are defined internally by JMeter. These are listed below.
+
JMeterThread.last_sample_ok - whether or not the last sample was OK - true/false.
+Note: this is updated after PostProcessors and Assertions have been run.
+
+The set of JMeter properties is initialised from the system properties defined when JMeter starts;
+additional JMeter properties are defined in jmeter.properties, user.properties or on the command line.
+
+
+Some built-in properties are defined by JMeter. These are listed below.
+For convenience, the START properties are also copied to variables with the same names.
+
+
+
START.MS - JMeter start time in milliseconds
+
START.YMD - JMeter start time as yyyyMMdd
+
START.HMS - JMeter start time as HHmmss
+
TESTSTART.MS - test start time in milliseconds
+
+
+Please note that the START variables / properties represent JMeter startup time, not the test start time.
+They are mainly intended for use in file names etc.
+
The easiest way to begin using JMeter is to first
+download the latest production release and install it.
+The release contains all of the files you need to build and run most types of tests,
+e.g. Web (HTTP/HTTPS), FTP, JDBC, LDAP, Java, JUnit and more.
+
If you want to perform JDBC testing,
+then you will, of course, need the appropriate JDBC driver from your vendor. JMeter does not come with
+any JDBC drivers.
+
+JMeter includes the JMS API jar, but does not include a JMS client implementation.
+If you want to run JMS tests, you will need to download the appropriate jars from the JMS provider.
+
+
+See the JMeter Classpath section for details on installing additional jars.
+
+
Next, start JMeter and go through the Building a Test Plan section
+of the User Guide to familiarize yourself with JMeter basics (for example, adding and removing elements).
+
Finally, go through the appropriate section on how to build a specific type of Test Plan.
+For example, if you are interested in testing a Web application, then see the section
+Building a Web Test Plan.
+The other specific Test Plan sections are:
+
Once you are comfortable with building and running JMeter Test Plans, you can look into the
+various configuration elements (timers, listeners, assertions, and others) which give you more control
+over your Test Plans.
JMeter comes with Apache's Xerces XML parser. You have the option of telling JMeter
+to use a different XML parser. To do so, include the classes for the third-party parser in JMeter's classpath,
+and update the jmeter.properties file with the full classname of the parser
+implementation.
JMeter has extensive Email capabilities.
+It can send email based on test results, and has a POP3(S)/IMAP(S) sampler.
+It also has an SMTP(S) sampler.
+
To test a web server using SSL encryption (HTTPS), JMeter requires that an
+implementation of SSL be provided, as is the case with Sun Java 1.4 and above.
+If your version of Java does not include SSL support, then it is possible to add an external implementation.
+Include the necessary encryption packages in JMeter's classpath.
+Also, update system.properties to register the SSL Provider.
+
+JMeter HTTP defaults to protocol level TLS. This can be changed by editting the JMeter property
+https.default.protocol in jmeter.properties or user.properties.
+
+
The JMeter HTTP samplers are configured to accept all certificates,
+whether trusted or not, regardless of validity periods, etc.
+This is to allow the maximum flexibility in testing servers.
+
If the server requires a client certificate, this can be provided.
+
There is also the SSL Manager, for greater control of certificates.
+
The JMeter proxy server (see below) supports recording HTTPS (SSL)
+
+The SMTP sampler can optionally use a local trust store or trust all certificates.
+
You will need to add your database vendor's JDBC driver to the classpath if you want to do JDBC testing.
+Make sure the file is a jar file, not a zip.
+
+JMeter now includes the JMS API from Apache Geronimo, so you just need to add the appropriate JMS Client implementation
+jar(s) from the JMS provider. Please refer to their documentation for details.
+There may also be some information on the JMeter Wiki.
+
To install a release build, simply unzip the zip/tar file into the directory
+where you want JMeter to be installed. Provided that you have a JRE/JDK correctly installed
+and the JAVA_HOME environment variable set, there is nothing more for you to do.
+
+Note: there can be problems (especially with client-server mode) if the directory path contains any spaces.
+
+
+The installation directory structure should look something like this (where X.Y is version number):
+
To run JMeter, run the jmeter.bat (for Windows) or jmeter (for Unix) file.
+These files are found in the bin directory.
+After a short time, the JMeter GUI should appear.
+
+
+
+There are some additional scripts in the bin directory that you may find useful.
+Windows script files (the .CMD files require Win2K or later):
+
+
jmeter.bat - run JMeter (in GUI mode by default)
+
jmeterw.cmd - run JMeter without the windows shell console (in GUI mode by default)
+
jmeter-n.cmd - drop a JMX file on this to run a non-GUI test
+
jmeter-n-r.cmd - drop a JMX file on this to run a non-GUI test remotely
+
jmeter-t.cmd - drop a JMX file on this to load it in GUI mode
+
jmeter-server.bat - start JMeter in server mode
+
mirror-server.cmd - runs the JMeter Mirror Server in non-GUI mode
+
shutdown.cmd - Run the Shutdown client to stop a non-GUI instance gracefully
+
stoptest.cmd - Run the Shutdown client to stop a non-GUI instance abruptly
+
+Note: the special name LAST can be used with jmeter-n.cmd, jmeter-t.cmd and jmeter-n-r.cmd
+and means the last test plan that was run interactively.
+
+
+
+The environment variable JVM_ARGS can be used to override JVM settings in the jmeter.bat script.
+For example:
+
+Un*x script files; should work on most Linux/Unix systems:
+
+
jmeter - run JMeter (in GUI mode by default). Defines some JVM settings which may not work for all JVMs.
+
jmeter-server - start JMeter in server mode (calls jmeter script with appropriate parameters)
+
jmeter.sh - very basic JMeter script (You may need to adapt JVM options like memory settings).
+
mirror-server.sh - runs the JMeter Mirror Server in non-GUI mode
+
shutdown.sh - Run the Shutdown client to stop a non-GUI instance gracefully
+
stoptest.sh - Run the Shutdown client to stop a non-GUI instance abruptly
+
+
+
+It may be necessary to edit the jmeter shell script if some of the JVM options are not supported
+by the JVM you are using.
+The JVM_ARGS environment variable can be used to override or set additional JVM options, for example:
+
JMeter automatically finds classes from jars in the following directories:
+
+
JMETER_HOME/lib - used for utility jars
+
JMETER_HOME/lib/ext - used for JMeter components and plugins
+
+
If you have developed new JMeter components,
+then you should jar them and copy the jar into JMeter's lib/ext directory.
+JMeter will automatically find JMeter components in any jars found here.
+Do not use lib/ext for utility jars or dependency jars used by the plugins;
+it is only intended for JMeter components and plugins.
+
+
If you don't want to put JMeter plugin jars in the lib/ext directory,
+then define the property search_paths in jmeter.properties.
+
+
Utility and dependency jars (libraries etc) can be placed in the lib directory.
+
If you don't want to put such jars in the lib directory,
+then define the property user.classpath or plugin_dependency_paths
+in jmeter.properties. See below for an explanation of the differences.
+
+
+Other jars (such as JDBC, JMS implementations and any other support libaries needed by the JMeter code)
+should be placed in the lib directory - not the lib/ext directory,
+or added to user.classpath.
+
Note: JMeter will only find .jar files, not .zip.
+
You can also install utility Jar files in $JAVA_HOME/jre/lib/ext, or you can set the property user.classpath in jmeter.properties
+
Note that setting the CLASSPATH environment variable will have no effect.
+This is because JMeter is started with "java -jar",
+and the java command silently ignores the CLASSPATH variable, and the -classpath/-cp options when -jar is used.
+[This occurs with all Java programs, not just JMeter.]
If you are testing from behind a firewall/proxy server, you may need to provide JMeter with
+the firewall/proxy server hostname and port number. To do so, run the jmeter[.bat] file
+from a command line with the following parameters:
+
+-H [proxy server hostname or ip address]
+-P [proxy server port]
+-N [nonproxy hosts] (e.g. *.apache.org|localhost)
+-u [username for proxy authentication - if required]
+-a [password for proxy authentication - if required]
+
You can also use --proxyHost, --proxyPort, --username, and --password as parameter names
+
+Parameters provided on a command-line may be visible to other users on the system.
+
+
+If the proxy host and port are provided, then JMeter sets the following System properties:
+
+
http.proxyHost
+
http.proxyPort
+
https.proxyHost
+
https.proxyPort
+
+If a nonproxy host list is provided, then JMeter sets the following System properties:
+
+
http.nonProxyHosts
+
https.nonProxyHosts
+
+So if you don't wish to set both http and https proxies,
+you can define the relevant properties in system.properties instead of using the command-line parameters.
+
+
+Proxy Settings can also be defined in a Test Plan, using either the HTTP Request Defaults
+configuration or the HTTP Request sampler elements.
+
+
JMeter also has its own in-built Proxy Server, the HTTP(S) Test Script Recorder.
+This is only used for recording HTTP or HTTPS browser sessions.
+This is not to be confused with the proxy settings described above, which are used when JMeter makes HTTP or HTTPS requests itself.
For non-interactive testing, you may choose to run JMeter without the GUI. To do so, use
+the following command options:
+
+-n This specifies JMeter is to run in non-gui mode
+-t [name of JMX file that contains the Test Plan].
+-l [name of JTL file to log sample results to].
+-j [name of JMeter run log file].
+-r Run the test in the servers specified by the JMeter property "remote_hosts"
+-R [list of remote servers] Run the test in the specified remote servers
+
+
The script also lets you specify the optional firewall/proxy server information:
+
+-H [proxy server hostname or ip address]
+-P [proxy server port]
+
+If the property jmeterengine.stopfail.system.exit is set to true (default is false),
+then JMeter will invoke System.exit(1) if it cannot stop all threads.
+Normally this is not necessary.
+
For distributed testing, run JMeter in server mode on the remote node(s), and then control the server(s) from the GUI.
+You can also use non-GUI mode to run remote tests.
+To start the server(s), run jmeter-server[.bat] on each server host.
+
The script also lets you specify the optional firewall/proxy server information:
+
-H [proxy server hostname or ip address]
+-P [proxy server port]
+
Example: jmeter-server -H my.proxy.server -P 8000
+
If you want the server to exit after a single test has been run, then define the JMeter property server.exitaftertest=true.
+
+
To run the test from the client in non-GUI mode, use the following command:
+
+jmeter -n -t testplan.jmx -r [-Gprop=val] [-Gglobal.properties] [-X]
+where:
+-G is used to define JMeter properties to be set in the servers
+-X means exit the servers at the end of the test
+-Rserver1,server2 - can be used instead of -r to provide a list of servers to start
+ Overrides remote_hosts, but does not define the property.
+
+
+If the property jmeterengine.remote.system.exit is set to true (default is false),
+then JMeter will invoke System.exit(0) after stopping RMI at the end of a test.
+Normally this is not necessary.
+
Java system properties, JMeter properties, and logging properties can be overriden directly on the command line (instead of modifying jmeter.properties).
+To do so, use the following options:
+
+-D[prop_name]=[value] - defines a java system property value.
+-J[prop name]=[value] - defines a local JMeter property.
+-G[prop name]=[value] - defines a JMeter property to be sent to all remote servers.
+-G[propertyfile] - defines a file containing JMeter properties to be sent to all remote servers.
+-L[category]=[priority] - overrides a logging setting, setting a particular category to the given priority level.
+
+
The -L flag can also be used without the category name to set the root logging level.
+N.B.
+ 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.
+
+ JMeter does not generally use pop-up dialog boxes for errors, as these would interfere with
+ running tests. Nor does it report any error for a mis-spelt variable or function; instead the
+ reference is just used as is. See Functions and Variables for more information.
+
+
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 jmeter.log, and will be found in the directory from which JMeter was launched.
+
+
+ The menu Options > Log Viewer displays the log file in a bottom pane on main JMeter window.
+
+
+ In the GUI mode, the number of error/fatal messages logged in the log file is displayed at top-right.
+
+ Error/fatal counter
+
+ The command-line option -j jmeterlogfile allow to process
+ 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.
+
+
When running on Windows, the file may appear as just jmeter 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...]
+
+
As well as recording errors, the jmeter.log file records some information about the test run. For example:
+
+
+10/17/2003 12:19:20 PM INFO - jmeter.JMeter: Version 1.9.20031002
+10/17/2003 12:19:45 PM INFO - jmeter.gui.action.Load: Loading file: c:\mytestfiles\BSH.jmx
+10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Running the test!
+10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Starting 1 threads for group BSH. Ramp up = 1.
+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
+
+
+
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.
Invoking JMeter as "jmeter -?" will print a list of all the command-line options.
+These are shown below.
+
+ -h, --help
+ print usage information and exit
+ -v, --version
+ print the version information and exit
+ -p, --propfile {argument}
+ the jmeter property file to use
+ -q, --addprop {argument}
+ additional property file(s)
+ -t, --testfile {argument}
+ the jmeter test(.jmx) file to run
+ -j, --jmeterlogfile {argument}
+ the jmeter log file
+ -l, --logfile {argument}
+ the file to log samples to
+ -n, --nongui
+ run JMeter in nongui mode
+ -s, --server
+ run the JMeter server
+ -H, --proxyHost {argument}
+ Set a proxy server for JMeter to use
+ -P, --proxyPort {argument}
+ Set proxy server port for JMeter to use
+ -u, --username {argument}
+ Set username for proxy server that JMeter is to use
+ -a, --password {argument}
+ Set password for proxy server that JMeter is to use
+ -J, --jmeterproperty {argument}={value}
+ Define additional JMeter properties
+ -G, --globalproperty (argument)[=(value)]
+ Define Global properties (sent to servers)
+ e.g. -Gport=123
+ or -Gglobal.properties
+ -D, --systemproperty {argument}={value}
+ Define additional System properties
+ -S, --systemPropertyFile {filename}
+ a property file to be added as System properties
+ -L, --loglevel {argument}={value}
+ Define loglevel: [category=]level
+ e.g. jorphan=INFO or jmeter.util=DEBUG
+ -r, --runremote (non-GUI only)
+ Start remote servers (as defined by the jmeter property remote_hosts)
+ -R, --remotestart server1,... (non-GUI only)
+ Start these remote servers (overrides remote_hosts)
+ -d, --homedir {argument}
+ the jmeter home directory to use
+ -X, --remoteexit
+ Exit the remote servers at end of test (non-GUI)
+
+
+Note: the JMeter log file name is formatted as a SimpleDateFormat (applied to the current date)
+if it contains paired single-quotes, .e.g. 'jmeter_'yyyyMMddHHmmss'.log'
+
+
+If the special name LAST is used for the -t, -j or -l flags, then JMeter takes that to mean the last test plan
+that was run in interactive mode.
+
+Prior to version 2.5.1, JMeter invoked System.exit() when a non-GUI test completed.
+This caused problems for applications that invoke JMeter directly, so JMeter no longer invokes System.exit()
+for a normal test completion. [Some fatal errors may still invoke System.exit()]
+JMeter will exit all the non-daemon threads it starts, but it is possible that some non-daemon threads
+may still remain; these will prevent the JVM from exitting.
+To detect this situation, JMeter starts a new daemon thread just before it exits.
+This daemon thread waits a short while; if it returns from the wait, then clearly the
+JVM has not been able to exit, and the thread prints a message to say why.
+
+
+The property jmeter.exit.check.pause can be used to override the default pause of 2000ms (2secs).
+If set to 0, then JMeter does not start the daemon thread.
+
If you wish to modify the properties with which JMeter runs you need to
+ either modify the user.properties in the /bin directory or create
+ your own copy of the jmeter.properties and specify it in the command line.
+
+
+ Note: You can define additional JMeter properties in the file defined by the
+ JMeter property user.properties which has the default value user.properties.
+ The file will be automatically loaded if it is found in the current directory
+ or if it is found in the JMeter bin directory.
+ Similarly, system.properties is used to update system properties.
+
+
+ Parameters
+
Attribute
Description
Required
+
ssl.provider
You can specify the class for your SSL
+ implementation if you don't want to use the built-in Java implementation.
+
+ No
+
+
xml.parser
You can specify an implementation as your XML
+ parser. The default value is: org.apache.xerces.parsers.SAXParser
+ No
+
+
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
+ you have JMeter remote servers running. This will allow you to control those
+ servers from this machine's GUI
+ No
+
+
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
+ 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.
+ No
+
+
search_paths
+ List of paths (separated by ;) that JMeter will search for JMeter plugin classes,
+ for example additional samplers. A path item can either be a jar file or a directory.
+ Any jar file in such a directory will be automatically included in search_paths,
+ jar files in sub directories are ignored.
+ The given value is in addition to any jars found in the lib/ext directory.
+
+ No
+
+
user.classpath
+ List of paths that JMeter will search for utility and plugin dependency classes.
+ Use your platform path separator to separate multiple paths.
+ A path item can either be a jar file or a directory.
+ Any jar file in such a directory will be automatically included in user.classpath,
+ jar files in sub directories are ignored.
+ The given value is in addition to any jars found in the lib directory.
+ All entries will be added to the class path of the system class loader
+ and also to the path of the JMeter internal loader.
+
+ No
+
+
plugin_dependency_paths
+ List of paths (separated by ;) that JMeter will search for utility
+ and plugin dependency classes.
+ A path item can either be a jar file or a directory.
+ Any jar file in such a directory will be automatically included in plugin_dependency_paths,
+ jar files in sub directories are ignored.
+ The given value is in addition to any jars found in the lib directory
+ or given by the user.classpath property.
+ All entries will be added to the path of the JMeter internal loader only.
+ For plugin dependencies using plugin_dependency_paths should be preferred over
+ user.classpath.
+
+ No
+
+
user.properties
+ Name of file containing additional JMeter properties.
+ These are added after the initial property file, but before the -q and -J options are processed.
+
+ No
+
+
system.properties
+ Name of file containing additional system properties.
+ These are added before the -S and -D options are processed.
+
+ No
+
+
+
+ The command line options and properties files are processed in the following order:
+
+
-p propfile
+
jmeter.properties (or the file from the -p option) is then loaded
+
-j logfile
+
Logging is initialised
+
user.properties is loaded
+
system.properties is loaded
+
all other command-line options are processed
+
+
+
+See also the comments in the jmeter.properties, user.properties and system.properties files for further information on other settings you can change.
+
+Elapsed time. JMeter measures the elapsed time from just before sending the request to
+just after the last response has been received.
+JMeter does not include the time needed to render the response, nor does JMeter process any client code, for example
+Javascript.
+
+
+
+Latency. JMeter measures the latency from just before sending the request to
+just after the first response has been received. Thus the time
+includes all the processing needed to assemble the request as well as
+assembling the first part of the response, which in general will be longer than one
+byte.
+Protocol analysers (such as Wireshark) measure the time when bytes are actually sent/received over the interface.
+The JMeter time should be closer to that which is experienced by a
+browser or other application client.
+
+
+
+Connect Time. JMeter measures the time it took to establish the connection, including SSL handshake. Note that connect time is not automatically subtracted from latency.
+
+
+
+Median is a number which divides the samples into two equal halves.
+Half of the samples are smaller than the median, and half are larger.
+[Some samples may equal the median.]
+This is a standard statistical measure.
+See, for example: Median entry at Wikipedia.
+The Median is the same as the 50th Percentile
+
+
+
+90% Line (90th Percentile) is the value below which 90% of the samples fall.
+The remaining samples too at least as long as the value.
+This is a standard statistical measure.
+See, for example: Percentile entry at Wikipedia.
+
+
+
+Standard Deviation is a measure of the variability
+of a data set. This is a standard statistical measure.
+See, for example: Standard Deviation entry at Wikipedia.
+JMeter calculates the population standard deviation (e.g. STDEVP function in spreadheets), not the sample standard deviation (e.g. STDEV).
+
+
+
+The Thread Name as it appears in Listeners and logfiles
+is derived from the Thread Group name and the thread within the group.
+The name has the format
+groupName + " " + groupIndex + "-" + threadIndex
+where:
+
+
groupName - name of the Thread Group element
+
groupIndex - number of the Thread Group in the Test Plan, starting from 1
+
threadIndex - number of the thread within the Thread Group, starting from 1
+
+A test plan with two Thread Groups each with two threads would use the names:
+
+Thread Group 1-1
+Thread Group 1-2
+Thread Group 2-1
+Thread Group 2-2
+
+
+
+
+Throughput is calculated as requests/unit of time.
+The time is calculated from the start of the first sample to the end of the last sample.
+This includes any intervals between samples, as it is supposed to represent the load on the server.
+The formula is: Throughput = (number of requests) / (total time).
+
+This section is a collection of various hints and tips that have been suggested by various questions on the JMeter User list.
+If you don't find what you are looking for here, please check the JMeter Wiki.
+Also, try search the JMeter User list; someone may well have already provided a solution.
+
+JMeter variables have thread scope. This is deliberate, so that threads can act indepently.
+However sometimes there is a need to pass variables between different threads, in the same or different Thread Groups.
+
+
+One way to do this is to use a property instead.
+Properties are shared between all JMeter threads, so if one thread sets a property,
+another thread can read the updated value.
+
+
+If there is a lot of information that needs to be passed between threads, then consider using a file.
+For example you could use the Save Responses to a file
+listener or perhaps a BeanShell PostProcessor in one thread, and read the file using the HTTP Sampler "file:" protocol,
+and extract the information using a PostProcessor or BeanShell element.
+
+
+If you can derive the data before starting the test, then it may well be better to store it in a file,
+read it using CSV Dataset.
+
+Most test elements include debug logging. If running a test plan from the GUI,
+select the test element and use the Help Menu to enable or disable logging.
+The Help Menu also has an option to display the GUI and test element class names.
+You can use these to determine the correct property setting to change the logging level.
+
+
+
+It is sometimes very useful to see Log messages to debug dynamic scripting languages like BeanShell or
+groovy used in JMeter.
+Since version 2.6, you can view log messages directly in JMeter GUI, to do so:
+
+
use menu Options > Log Viewer, a log console will appear at the bottom of the interface
+
Or click on the Warning icon in the upper right corner of GUI
+
+By default this log console is disabled, you can enable it by changing in jmeter.properties:
+
+
jmeter.loggerpanel.display=true
+
+
+To avoid using too much memory, this components limits the number of characters used by this panel:
+
+It is sometimes hard to find in a Test Plan tree and elements using a variable or containing a certain URL or parameter.
+A new feature is now available since 2.6, you can access it in Menu Search.
+It provides search with following options:
+
+
Case Sensitive : Makes search case sensitive
+
Regexp : Is text to search a regexp, if so Regexp will be searched in Tree of components, example "\btest\b" will match any component that contains test in searchable elements of the component
+
+
+
+Figure 1 - Search raw text in TreeView
+Figure 2 - Result in TreeView
+Figure 3 - Search Regexp in TreeView (in this example we search whole word)
+Figure 4 - Result in TreeView
+
+
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.
+Apache JMeter is a 100% pure Java application designed
+to load test client/server software
+(such as a web application). It may be used
+to test performance both on static and dynamic
+resources such as static files, Java Servlets, ASP.NET, PHP, CGI scripts, Java objects, databases,
+FTP servers, and more. JMeter can be used to simulate a heavy
+load on a server, network or object to test its strength or to analyze
+overall performance under different load types.
+
+Additionally, JMeter can help you regression test your application by letting you create
+test scripts with assertions to validate that your application is returning the
+results you expect. For maximum flexibility, JMeter lets you create these assertions using
+regular expressions.
+
+
But please note that JMeter is not a browser, it works at protocol level.
Stefano Mazzocchi of the Apache Software Foundation was the original developer of JMeter.
+He wrote it primarily to test the performance of Apache JServ (a project that has
+since been replaced by the Apache Tomcat project). We redesigned JMeter to enhance the GUI
+and to add functional-testing capabilities.
+
+
+
JMeter became a Top Level Apache project in November 2011, which means it has a Project Management Commitee and a dedicated website.
We hope to see JMeter's capabilities rapidly expand as developers take advantage of its
+pluggable architecture.
+The primary goal of further developments will be:
+
+
Addition of Websocket protocol
+
Addition of FTPS and SFTP protocols
+
Enhancements to Webservices protocols (SOAP Attachments)
+ 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.
+
+As the response code, the official LDAP error definitions are used, so this section
+contains the error message as returned from the server.
+A succesfull request always returns "Success" as the responsmessage.
+The following tag is used:
+
+As the response code, the official LDAP error definitions are used, so this section
+contains the error number as returned from the server.
+A succesfull request always returns 0 (zero) as the responscode.
+The following tag is used:
+
+
+ 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.
+ 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.
+ eg. When a tree starts with dc=com, the root equals dc=com.
+ The next level can exist under the root, eg dc=test. The full name of this object (the "distinghuised name") is "dc=test,dc=com.
+ Again, a following level can be made, by adding the user "cn=admin" under dc=test,dc=com. This object has a DN (distinguished name) of "cn=admin,dc=test,dc=com".
+ The relative distinguished name (RDN) is the last part of the DN, eg. cn=admin.
+ The characteristics of an object are determined by the objectClasses, which can be seen as a collection of attributes.
+ The type of an object is determined by the "structural objectClass" eg person, organizationalUnit or country.
+ The attributes contain the data of an object, eg mailadress, name, streetadress etc. Each attribute can have 0, 1 or more values.
+
+ 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.
+
+ 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.
+
+ 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).
+
+ 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.
+
+ 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.
+
+ 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"
+
+ 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.
+ Three versions are available, add, for adding an attribute value
+ replace, for overwriting the old attribute value with a new value
+ delete, to delete a value form an attribute, or to delete all the values of an attribute
+
+ This operation modifies the distinguished name from an object (it "moves" the object).
+ 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)
+ eg, you can rename "cn=admin,dc=test,dc=com" to cn=administrator,dc=test,dc=com"
+ The second flavour is renaming (moving) a complete subtree by specifying a "new superior"
+ eg you can move a complete subtree "ou=retired,ou=people,dc=test,dc=com" to a new subtree "ou=retired people,dc=test,dc=com" by specifying
+ a new rdn "ou=retired people" and a new superior of "dc=test,dc=com"
+
+
+
\ No newline at end of file
diff --git a/docs/usermanual/listeners.html b/docs/usermanual/listeners.html
new file mode 100644
index 00000000000..0c182ab118d
--- /dev/null
+++ b/docs/usermanual/listeners.html
@@ -0,0 +1,485 @@
+
+Apache JMeter
+ -
+ User's Manual: ListenersMain content
A listener is a component that shows the results of the
+samples. The results can be shown in a tree, tables, graphs or simply written to a log
+file. To view the contents of a response from any given sampler, add either of the Listeners "View
+Results Tree" or "View Results in table" to a test plan. To view the response time graphically, add
+graph results, spline results or distribution graph.
+The listeners
+section of the components page has full descriptions of all the listeners.
+
+
+Different listeners display the response information in different ways.
+However, they all write the same raw data to the output file - if one is specified.
+
+
+The "Configure" button can be used to specify which fields to write to the file, and whether to
+write it as CSV or XML.
+CSV files are much smaller than XML files, so use CSV if you are generating lots of samples.
+
+
+The file name can be specified using either a relative or an absolute path name.
+Relative paths are resolved relative to the current working directory (which defaults to the bin/ directory).
+Versions of JMeter after 2.4 also support paths relative to the directory containing the current test plan (JMX file).
+If the path name begins with "~/" (or whatever is in the jmeter.save.saveservice.base_prefix JMeter property),
+then the path is assumed to be relative to the JMX file location.
+
+
+If you only wish to record certain samples, add the Listener as a child of the sampler.
+Or you can use a Simple Controller to group a set of samplers, and add the Listener to that.
+The same filename can be used by multiple samplers - but make sure they all use the same configuration!
+
+The default items to be saved can be defined in the jmeter.properties (or user.properties) file.
+The properties are used as the initial settings for the Listener Config pop-up, and are also
+used for the log file specified by the -l command-line flag (commonly used for non-GUI test runs).
+
+
To change the default format, find the following line in jmeter.properties:
+
jmeter.save.saveservice.output_format=
+
+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. If checked, all information, including the full response data will be logged.
+
+The following example indicates how to set
+properties to get a vertical bar ("|") delimited format that will
+output results like:.
+
+
+
+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.
+
+
+
+The corresponding jmeter.properties that need to be set are shown below. One oddity
+in this example is that the output_format is set to csv, which
+typically
+indicates comma-separated values. However, the default_delimiter was
+set to be a vertical bar instead of a comma, so the csv tag is a
+misnomer in this case. (Think of CSV as meaning character separated values)
+The full set of properties that affect result file output is shown below.
+
+
+
+#---------------------------------------------------------------------------
+# Results file configuration
+#---------------------------------------------------------------------------
+
+# This section helps determine how result data will be saved.
+# The commented out values are the defaults.
+
+# legitimate values: xml, csv, db. Only xml and csv are currently supported.
+#jmeter.save.saveservice.output_format=csv
+
+
+# true when field should be saved; false otherwise
+
+# assertion_results_failure_message only affects CSV output
+#jmeter.save.saveservice.assertion_results_failure_message=false
+#
+#jmeter.save.saveservice.data_type=true
+#jmeter.save.saveservice.label=true
+#jmeter.save.saveservice.response_code=true
+# response_data is not currently supported for CSV output
+#jmeter.save.saveservice.response_data=false
+# Save ResponseData for failed samples
+#jmeter.save.saveservice.response_data.on_error=false
+#jmeter.save.saveservice.response_message=true
+#jmeter.save.saveservice.successful=true
+#jmeter.save.saveservice.thread_name=true
+#jmeter.save.saveservice.time=true
+#jmeter.save.saveservice.subresults=true
+#jmeter.save.saveservice.assertions=true
+#jmeter.save.saveservice.latency=true
+#jmeter.save.saveservice.connect_time=false
+#jmeter.save.saveservice.samplerData=false
+#jmeter.save.saveservice.responseHeaders=false
+#jmeter.save.saveservice.requestHeaders=false
+#jmeter.save.saveservice.encoding=false
+#jmeter.save.saveservice.bytes=true
+#jmeter.save.saveservice.url=false
+#jmeter.save.saveservice.filename=false
+#jmeter.save.saveservice.hostname=false
+#jmeter.save.saveservice.thread_counts=true
+#jmeter.save.saveservice.sample_count=false
+#jmeter.save.saveservice.idle_time=false
+
+# Timestamp format
+# legitimate values: none, ms, or a format suitable for SimpleDateFormat
+#jmeter.save.saveservice.timestamp_format=ms
+#jmeter.save.saveservice.timestamp_format=yyyy/MM/dd HH:mm:ss.SSS
+
+# Put the start time stamp in logs instead of the end
+sampleresult.timestamp.start=true
+
+# Whether to use System.nanoTime() - otherwise only use System.currentTimeMillis()
+#sampleresult.useNanoTime=true
+
+# Use a background thread to calculate the nanoTime offset
+# Set this to <= 0 to disable the background thread
+#sampleresult.nanoThreadSleep=5000
+
+# legitimate values: none, first, all
+#jmeter.save.saveservice.assertion_results=none
+
+# For use with Comma-separated value (CSV) files or other formats
+# where the fields' values are separated by specified delimiters.
+# Default:
+#jmeter.save.saveservice.default_delimiter=,
+# For TAB, since JMeter 2.3 one can use:
+#jmeter.save.saveservice.default_delimiter=\t
+
+#jmeter.save.saveservice.print_field_names=false
+
+# Optional list of JMeter variable names whose values are to be saved in the result data files.
+# Use commas to separate the names. For example:
+#sample_variables=SESSION_ID,REFERENCE
+# N.B. The current implementation saves the values in XML as attributes,
+# so the names must be valid XML names.
+# Versions of JMeter after 2.3.2 send the variable to all servers
+# to ensure that the correct data is available at the client.
+
+# Optional xml processing instruction for line 2 of the file:
+#jmeter.save.saveservice.xml_pi=<?xml-stylesheet type="text/xsl" href="sample.xsl"?>
+
+# Prefix used to identify filenames that are relative to the current base
+#jmeter.save.saveservice.base_prefix=~/
+
+
+
+The date format to be used for the timestamp_format is described in
+SimpleDateFormat.
+The timestamp format is used for both writing and reading files.
+If the format is set to "ms", and the column does not parse as a long integer,
+JMeter (2.9+) will try the following formats:
+
+
yyyy/MM/dd HH:mm:ss.SSS
+
yyyy/MM/dd HH:mm:ss
+
yyyy-MM-dd HH:mm:ss.SSS
+
yyyy-MM-dd HH:mm:ss
+
MM/dd/yy HH:mm:ss (this is for compatibility with previous versions; it is not recommended as a format)
+
+Matching is now also strict (non-lenient).
+JMeter 2.8 and earlier used lenient mode which could result in timestamps with incorrect dates
+(times were usually correct).
+
+JMeter supports the sample_variables
+property to define a list of additional JMeter variables which are to be saved with
+each sample in the JTL files. The values are written to CSV files as additional columns,
+and as additional attributes in XML files. See above for an example.
+
+Listeners can be configured to save different items to the result log files (JTL) by using the Config popup as shown below.
+The defaults are defined as described in the Listener Default Configuration section above.
+Items with (CSV) after the name only apply to the CSV format; items with (XML) only apply to XML format.
+CSV format cannot currently be used to save any items that include line-breaks.
+
+ Configuration dialogue
+
+
+Note that cookies, method and the query string are saved as part of the "Sampler Data" option.
+
+When running in non-GUI mode, the -l flag can be used to create a top-level listener for the test run.
+This is in addition to any Listeners defined in the test plan.
+The configuration of this listener is controlled by entries in the file jmeter.properties
+as described in the previous section.
+
+
+This feature can be used to specify different data and log files for each test run, for example:
+
+Note that JMeter logging messages are written to the file jmeter.log by default.
+This file is recreated each time, so if you want to keep the log files for each run,
+you will need to rename it using the -j option as above. The -j option was added in version 2.3.
+
+
Versions of JMeter after 2.3.1 support variables in the log file name.
+If the filename contains paired single-quotes, then the name is processed
+as a SimpleDateFormat format applied to the current date, for example:
+log_file='jmeter_'yyyyMMddHHmmss'.tmp'.
+This can be used to generate a unique name for each test run.
+
Listeners can use a lot of memory if there are a lot of samples.
+Most of the listeners currently keep a copy of every sample they display, apart from:
+
+
+
Simple Data Writer
+
BeanShell/BSF Listener
+
Mailer Visualizer
+
Monitor Results
+
Summary Report
+
+
+The following Listeners no longer need to keep copies of every single sample.
+Instead, samples with the same elapsed time are aggregated.
+Less memory is now needed, especially if most samples only take a second or two at most.
+
+
+
Aggregate Report
+
Aggregate Graph
+
Distribution Graph
+
+
To minimise the amount of memory needed, use the Simple Data Writer, and use the CSV format.
+The CSV log format depends on which data items are selected in the configuration.
+Only the specified data items are recorded in the file.
+The order of appearance of columns is fixed, and is as follows:
+
+
+
timeStamp - in milliseconds since 1/1/1970
+
elapsed - in milliseconds
+
label - sampler label
+
responseCode - e.g. 200, 404
+
responseMessage - e.g. OK
+
threadName
+
dataType - e.g. text
+
success - true or false
+
failureMessage - if any
+
bytes - number of bytes in the sample
+
grpThreads - number of active threads in this thread group
+
allThreads - total number of active threads in all groups
+
URL
+
Filename - if Save Response to File was used
+
latency - time to first response
+
connect - time to establish connection
+
encoding
+
SampleCount - number of samples (1, unless multiple samples are aggregated)
+
ErrorCount - number of errors (0 or 1, unless multiple samples are aggregated)
+
Hostname where the sample was generated
+
IdleTime - number of milliseconds of 'Idle' time (normally 0)
+The sample attributes have the following meaning:
+
+
+
Attribute
Content
+
by
Bytes
+
de
Data encoding
+
dt
Data type
+
ec
Error count (0 or 1, unless multiple samples are aggregated)
+
hn
Hostname where the sample was generated
+
it
Idle Time = time not spent sampling (milliseconds) (generally 0)
+
lb
Label
+
lt
Latency = time to initial response (milliseconds) - not all samplers support this
+
ct
Connect Time = time to establish the connection (milliseconds) - not all samplers support this
+
na
Number of active threads for all thread groups
+
ng
Number of active threads in this group
+
rc
Response Code (e.g. 200)
+
rm
Response Message (e.g. OK)
+
s
Success flag (true/false)
+
sc
Sample count (1, unless multiple samples are aggregated)
+
t
Elapsed time (milliseconds)
+
tn
Thread Name
+
ts
timeStamp (milliseconds since midnight Jan 1, 1970 UTC)
+
varname
Value of the named variable (versions of JMeter after 2.3.1)
+
+
+Versions 2.1 and 2.1.1 of JMeter saved the Response Code as "rs", but read it back expecting to find "rc".
+This has been corrected so that it is always saved as "rc"; either "rc" or "rs" can be read.
+
+
+Versions of JMeter after 2.3.1 allow additional variables to be saved with the test plan.
+Currently, the variables are saved as additional attributes.
+The testplan variable name is used as the attribute name.
+See Sample variables (above) for more information.
+
+As shown above, the response data can be saved in the XML log file if required.
+However, this can make the file rather large, and the text has to be encoded so
+that it is still valid XML. Also, images cannot be included.
+
+Another solution is to use the Post-Processor Save_Responses_to_a_file.
+This generates a new file for each sample, and saves the file name with the sample.
+The file name can then be included in the sample log output.
+The data will be retrieved from the file if necessary when the sample log file is reloaded.
+
To view an existing results file, you can use the File "Browse..." button to select a file.
+If necessary, just create a dummy testplan with the appropriate Listener in it.
+
+
Results can be read from XML or CSV format files.
+When reading from CSV results files, the header (if present) is used to determine which fields were saved.
+In order to interpret a header-less CSV file correctly, the appropriate JMeter properties must be set.
+
+
+Versions of JMeter up to 2.3.2 used to clear any current data before loading the new file.
+This is no longer done, thus allowing files to be merged.
+If the previous behaviour is required,
+use the menu item Run/Clear (Ctrl+Shift+E) or Run/Clear All (Ctrl+E) before loading the file.
+
JMeter is capable of saving any listener as a PNG file. To do so, select the
+listener in the left panel. Click Edit > Save As Image. A file dialog will
+appear. Enter the desired name and save the listener.
+
+
+The Listeners which generate output as tables can also be saved using Copy/Paste.
+Select the desired cells in the table, and use the OS Copy short-cut (normally Control+C).
+The data will be saved to the clipboard, from where it can be pasted into another application,
+e.g. a spreadsheet or text editor.
+
Since JMeter 2.13 you can get realtime results sent to a backend through the
+Backend Listener using potentially any backend (JDBC, JMS, Webservice...) implementing AbstractBackendListenerClient.
+JMeter ships with a GraphiteBackendListenerClient which allows you to send metrics to a Graphite Backend.
+This feature provides:
+
+
Live results
+
Nice graphs for metrics
+
Ability to compare 2 or more load tests
+
Storing monitoring data as long as JMeter results in the same backend
+
...
+
+In this document we will present the configuration setup to graph and historize the data in 2 different backends:
+
Percentile computed for successful responses of sampler name. You can input as many percentiles as you want (3 or 4 being a reasonable value).
+ When percentile contains a comma for example "99.9", dot is sanitized by "_" leading to 99_9.
+ By default listener computes percentiles 90%, 95% and 99%
+
+
+
<rootMetricsPrefix>.<samplerName>.ko.count
+
Number of failed responses for sampler name
+
+
+
<rootMetricsPrefix>.<samplerName>.ko.min
+
Min response time for failed responses of sampler name
+
+
+
<rootMetricsPrefix>.<samplerName>.ko.max
+
Max response time for failed responses of sampler name
Percentile computed for failed responses of sampler name. You can input as many percentiles as you want (3 or 4 being a reasonable value).
+ When percentile contains a comma for example "99.9", dot is sanitized by "_" leading to 99_9.
+ By default listener computes percentiles 90%, 95% and 99%
Percentile computed for responses of sampler name. You can input as many percentiles as you want (3 or 4 being a reasonable value).
+ When percentile contains a comma for example "99.9", dot is sanitized by "_" leading to 99_9.
+ By default listener computes percentiles 90%, 95% and 99%
+
+
+
+ By default JMeter sends only metrics for all samplers using "all" as samplerName.
+
InfluxDB is an open-source, distributed,time-series database that allows to
+easily store metrics.
+Installation and configuration is very easy, read this for more details InfluxDB documentation.
+InfluxDB data can be easily viewed in a browser through either Influga or Grafana.
+We will use Grafana in this case.
+
To enable Graphite listener in InfluxDB, edit files /opt/influxdb/shared/config.toml or /usr/local/etc/influxdb.conf, find "input_plugins.graphite" and set this:
+
+
+ # Configure the graphite api
+ [input_plugins.graphite]
+ enabled = true
+ address = "0.0.0.0" # If not set, is actually set to bind-address.
+ port = 2003
+ database = "jmeter" # store graphite data in this database
+ # udp_enabled = true # enable udp interface on the same port as the tcp interface
+
+
+ Installing grafana is just a matter of putting the unzipped bundle behind an Apache HTTP server.
+ Read documentation for more details.
+ Open config.js file and find datasources element, and edit it like this:
+
+ Note that grafana has "grafanaDB:true". Also note that here we use root user for simplicity, it is better to dedicate a special user with less rights.
+ Here is the kind of dashboard that you could obtain:
+
+There is also documentation on an older incarnation of the product at
+OROMatcher User's guide, which might prove useful.
+
+
+The pattern matching is very similar to the pattern matching in Perl.
+A full installation of Perl will include plenty of documentation on regular expressions - look for perlrequick, perlretut, perlre, perlreref.
+
+
+It is worth stressing the difference between "contains" and "matches", as used on the Response Assertion test element:
+
+
+
+"contains" means that the regular expression matched at least some part of the target,
+so 'alphabet' "contains" 'ph.b.' because the regular expression matches the substring 'phabe'.
+
+
+"matches" means that the regular expression matched the whole target.
+So 'alphabet' is "matched" by 'al.*t'.
+
+
+
In this case, it is equivalent to wrapping the regular expression in ^ and $, viz '^al.*t$'.
+
+
However, this is not always the case.
+For example, the regular expression 'alp|.lp.*' is "contained" in 'alphabet', but does not match 'alphabet'.
+
+
Why? Because when the pattern matcher finds the sequence 'alp' in 'alphabet', it stops trying any other combinations - and 'alp' is not the same as 'alphabet', as it does not include 'habet'.
+
+
+Note: unlike Perl, there is no need to (i.e. do not) enclose the regular expression in //.
+
+
+So how does one use the modifiers ismx etc if there is no trailing /?
+The solution is to use extended regular expressions, i.e. /abc/i becomes (?i)abc.
+See also Placement of modifiers below.
+
+Suppose you want to match the following portion of a web-page:
+
+name="file" value="readme.txt">
+
+and you want to extract readme.txt.
+
+A suitable regular expression would be:
+
+name="file" value="(.+?)">
+
+The special characters above are:
+
+
+
( and ) - these enclose the portion of the match string to be returned
+
. - match any character
+
+ - one or more times
+
? - don't be greedy, i.e. stop when first match succeeds
+
+
+Note: without the ?, the .+ would continue past the first ">
+until it found the last possible "> - which is probably not what was intended.
+
+
+Note: although the above expression works, it's more efficient to use the following expression:
+
+name="file" value="([^"]+)">
+where
+[^"] - means match anything except "
+In this case, the matching engine can stop looking as soon as it sees the first ",
+whereas in the previous case the engine has to check that it has found "> rather than say " >.
+
+
Extract multiple strings
+
+Suppose you want to match the following portion of a web-page:
+name="file.name" value="readme.txt"
+and you want to extract both file.name and readme.txt.
+
+A suitable reqular expression would be:
+
+name="([^"]+)" value="([^"]+)"
+
+This would create 2 groups, which could be used in the JMeter Regular Expression Extractor template as $1$ and $2$.
+
+
+The JMeter Regex Extractor saves the values of the groups in additional variables.
+
+
+For example, assume:
+
+
+
Reference Name: MYREF
+
Regex: name="(.+?)" value="(.+?)"
+
Template: $1$$2$
+
+
Do not enclose the regular expression in / /
+
+The following variables would be set:
+
+
+
MYREF: file.namereadme.txt
+
MYREF_g0: name="file.name" value="readme.txt"
+
MYREF_g1: file.name
+
MYREF_g2: readme.txt
+
+These variables can be referred to later on in the JMeter test plan, as ${MYREF}, ${MYREF_g1} etc
+
+
The pattern matching behaves in various slightly different ways,
+depending on the setting of the multi-line and single-line modifiers.
+Note that the single-line and multi-line operators have nothing to do with each other;
+they can be specified independently.
+
+
Single-line mode
+
+Single-line mode only affects how the '.' meta-character is interpreted.
+
+
+Default behaviour is that '.' matches any character except newline.
+In single-line mode, '.' also matches newline.
+
+
+
Multi-line mode
+
+Multi-line mode only affects how the meta-characters '^' and '$' are interpreted.
+
+
+Default behaviour is that '^' and '$' only match at the very beginning and end of the string.
+When Multi-line mode is used, the '^' metacharacter matches at the beginning of every line,
+and the '$' metacharacter matches at the end of every line.
+Regular expressions use certain characters as meta characters - these characters have a special meaning to the RE engine.
+Such characters must be escaped by preceeding them with \ (backslash) in order to treat them as ordinary characters.
+Here is a list of the meta characters and their meaning (please check the ORO documentation if in doubt).
+
+
+
( ) - grouping
+
[ ] - character classes
+
{ } - repetition
+
* + ? - repetition
+
. - wild-card character
+
\ - escape character
+
| - alternatives
+
^ $ - start and end of string or line
+
+
+
Please note that ORO does not support the \Q and \E meta-characters.
+[In other RE engines, these can be used to quote a portion of an RE so that the meta-characters stand for themselves.]
+You can use function to do the equivalent, see ${__escapeOroRegexpChars(valueToEscape)}.
+
+
+
+The following Perl5 extended regular expressions are supported by ORO.
+
+
+
(?#text)
+
An embedded comment causing text to be ignored.
+
(?:regexp)
+
Groups things like "()" but doesn't cause the group match to be saved.
+
(?=regexp)
+
A zero-width positive lookahead assertion. For example, \w+(?=\s) matches a word followed by whitespace, without including whitespace in the MatchResult.
+
(?!regexp)
+
A zero-width negative lookahead assertion. For example foo(?!bar) matches any occurrence of "foo" that isn't followed by "bar". Remember that this is a zero-width assertion, which means that a(?!b)d will match ad because a is followed by a character that is not b (the d) and a d follows the zero-width assertion.
+
(?imsx)
+
One or more embedded pattern-match modifiers. i enables case insensitivity, m enables multiline treatment of the input, s enables single line treatment of the input, and x enables extended whitespace comments.
+
+Note that (?<=regexp) - lookbehind - is not supported.
+
+
+
+Modifiers can be placed anywhere in the regex, and apply from that point onwards.
+[A bug in ORO means that they cannot be used at the very end of the regex.
+However they would have no effect there anyway.]
+
+
+The single-line (?s) and multi-line (?m) modifiers are normally placed at the start of the regex.
+
+
+The ignore-case modifier (?i) may be usefully applied to just part of a regex,
+for example:
+
+Since JMeter 2.4, the listener View Results Tree
+include a RegExp Tester to test regular expressions directly on sampler response data.
+
+
+There is a Website to test Java Regular expressions.
+
+
+Another approach is to use a simple test plan to test the regular expressions.
+The Java Request sampler can be used to generate a sample, or the HTTP Sampler can be used to load a file.
+Add a Debug Sampler and a Tree View Listener and changes to the regular expression can be tested quickly,
+without needing to access any external servers.
+
In the event that your JMeter client machine is unable, performance-wise, to simulate
+enough users to stress your server or is limited at network level, an option exists to control multiple, remote JMeter
+engines from a single JMeter client. By running JMeter remotely, you can replicate
+a test across many low-end computers and thus simulate a larger load on the server. One
+instance of the JMeter client can control any number of remote JMeter instances, and collect
+all the data from them. This offers the following features:
+
+
+
Saving of test samples to the local machine
+
Managment of multiple JMeterEngines from a single machine
+
No need to copy the test plan to each server - the client sends it to all the servers
+
+
+
+Note: The same test plan is run by all the servers.
+JMeter does not distribute the load between servers, each runs the full test plan.
+So if you set 1000 Threads and have 6 JMeter server, you end up injecting 6000 Threads.
+
+
+However, remote mode does use more resources than running the same number of non-GUI tests independently.
+If many server instances are used, the client JMeter can become overloaded, as can the client network connection.
+This has been improved by switching to Stripped modes (see below) but you should always check that your client is not overloaded.
+
+
Note that while you can execute the JMeterEngine on your application
+server, you need to be mindful of the fact that this will be adding processing
+overhead on the application server and thus your testing results will be
+somewhat tainted. The recommended approach is to have one or more machines on
+the same Ethernet segment as your application server that you configure to run
+the JMeter Engine. This will minimize the impact of the network on the test
+results without impacting the performance of the application server
+itself.
+
+
+
Step 0: Configure the nodes
+
+Make sure that all the nodes (client and servers) :
+
+
are running exactly the same version of JMeter.
+
are using the same version of Java on all systems. Using different versions of Java may work but is discouraged.
+
+
+
+If the test uses any data files, note that these are not sent across by the client so
+make sure that these are available in the appropriate directory on each server.
+If necessary you can define different values for properties by editing the user.properties or system.properties
+files on each server. These properties will be picked up when the server is started and may be
+used in the test plan to affect its behaviour (e.g. connecting to a different remote server).
+Alternatively use different content in any datafiles used by the test
+(e.g. if each server must use unique ids, divide these between the data files)
+
+
+
Step 1: Start the servers
+
To run JMeter in remote node, start the JMeter server component on all machines you wish to run on by running the JMETER_HOME/bin/jmeter-server (unix) or JMETER_HOME/bin/jmeter-server.bat (windows) script.
+
Note that there can only be one JMeter server on each node unless different RMI ports are used.
+
Since JMeter 2.3.1, the JMeter server application starts the RMI registry itself;
+there is no need to start RMI registry separately.
+To revert to the previous behaviour, define the JMeter property server.rmi.create=false on the server host systems.
+
+
+By default, RMI uses a dynamic port for the JMeter server engine. This can cause problems for firewalls,
+so with versions of JMeter after 2.3.2 you can define the JMeter property server.rmi.localport
+to control this port number.
+If this is non-zero, it will be used as the local port number for the server engine.
+
+
Step 2: Add the server IP to your client's Properties File
+
Edit the properties file on the controlling JMeter machine. In /bin/jmeter.properties, find the property named, "remote_hosts", and
+add the value of your running JMeter server's IP address. Multiple such servers can be added, comma-delimited.
+
Note that you can use the -R command line option
+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
+
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)
+
+
Step 3a: Start the JMeter Client from a GUI client to check configuration
+
Now you are ready to start the controlling JMeter client. For MS-Windows, start the client with the script "bin/jmeter.bat". For UNIX,
+use the script "bin/jmeter". You will notice that the Run menu contains two new sub-menus: "Remote Start" and "Remote Stop"
+(see figure 1). These menus contain the client that you set in the properties file. Use the remote start and stop instead of the
+normal JMeter start and stop menu items.
+Figure 1 - Run Menu
+
+
Step 3b: Start the JMeter from a non-GUI Client
+
+GUI mode should only be used for debugging, as a better alternative, you should start the test on remote server(s) from a non-GUI (command-line) client.
+The command to do this is:
+
+jmeter -n -t script.jmx -r
+or
+jmeter -n -t script.jmx -R server1,server2...
+
+Other flags that may be useful:
+-Gproperty=value - define a property in all the servers (may appear more than once)
+-X - Exit remote servers at the end of the test.
+
+The first example will start the test on whatever servers are defined in the JMeter property remote_hosts;
+The second example will define remote_hosts from the list of servers and then start the test on the remote servers.
+
+The command-line client will exit when all the remote servers have stopped.
+
+
+
In some cases, the jmeter-server script may not work for you (if you are using an OS platform not anticipated by the JMeter developers). Here is how to start the JMeter servers (step 1 above) with a more manual process:
+
Step 1a: Start the RMI Registry
+
+Since JMeter 2.3.1, the RMI registry is started by the JMeter server, so this section does not apply in the normal case.
+To revert to the previous behaviour, define the JMeter property server.rmi.create=false on the server host systems
+and follow the instructions below.
+
+
JMeter uses Remote Method Invocation (RMI) as the remote communication mechanism. Therefore, you need
+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:
+
+
JMETER_HOME/lib/ext/ApacheJMeter_core.jar
+
JMETER_HOME/lib/jorphan.jar
+
JMETER_HOME/lib/logkit-2.0.jar
+
+The
+rmiregistry application needs access to certain JMeter classes. Run rmiregistry with no parameters. By default the
+application listens to port 1099.
+
+
Step 1b: Start the JMeter Server
+
Once the RMI Registry application is running, start the JMeter Server.
+Use the "-s" option with the jmeter startup script ("jmeter -s").
+JMeter/RMI requires a connection from the client to the server. This will use the port you chose, default 1099.
+JMeter/RMI also requires a reverse connection in order to return sample results from the server to the client.
+This will use a high-numbered port.
+This port can be controlled by jmeter property called client.rmi.localport in jmeter.properties.
+If there are any firewalls or other network filters between JMeter client and server,
+you will need to make sure that they are set up to allow the connections through.
+If necessary, use monitoring software to show what traffic is being generated.
+
+
If you're running Suse Linux, these tips may help. The default installation may enable the firewall. In that case, remote testing will not work properly. The following tips were contributed by Sergey Ten.
+
If you see connections refused, turn on debugging by passing the following options.
Since JMeter 2.3.1, the RMI registry is started by the server; however the options can still be passed in from the JMeter command line.
+For example: "jmeter -s -Dsun.rmi.loader.logLevel=verbose" (i.e. omit the -J prefixes).
+Alternatively the properties can be defined in the system.properties file.
+
+
The solution to the problem is to remove the loopbacks 127.0.0.1 and 127.0.0.2 from etc/hosts. What happens is jmeter-server can't connect to rmiregistry if 127.0.0.2 loopback is not available. Use the following settings to fix the problem.
Also create a policy file and add [computer_name][computer_domain] line to /etc/hosts.
+
+
In order to better support SSH-tunneling of the RMI communication channels used
+in remote testing, since JMeter 2.6:
+
+
a new property "client.rmi.localport" can be set to control the RMI port used by the RemoteSampleListenerImpl
+
To support tunneling RMI traffic over an SSH tunnel as the remote endpoint using a port on the local machine,
+ loopback interface is now allowed to be used if it has been specified directly using the Java System Property "java.rmi.server.hostname" parameter.
By default, JMeter uses the standard RMI port 1099. It is possible to change this. For this to work successfully, all the following need to agree:
+
+
On the server, start rmiregistry using the new port number
+
On the server, start JMeter with the property server_port defined
+
On the client, update the remote_hosts property to include the new remote host:port settings
+
+
+
Since Jmeter 2.1.1, the jmeter-server scripts provide support for changing the port.
+For example, assume you want to use port 1664 (perhaps 1099 is already used).
+
+On Windows (in a DOS box)
+C:\JMETER> SET SERVER_PORT=1664
+C:\JMETER> JMETER-SERVER [other options]
+
+On Unix:
+$ SERVER_PORT=1664 jmeter-server [other options]
+[N.B. use upper case for the environment variable]
+
+
+In both cases, the script starts rmiregistry on the specified port,
+and then starts JMeter in server mode, having defined the "server_port" property.
+
+
+The chosen port will be logged in the server jmeter.log file (rmiregistry does not create a log file).
+
+Listeners in the test plan send their results back to the client JMeter which writes the results to the specified files
+By default, samples are sent back synchronously as they are generated.
+This can affect the maximum throughput of the server test; the sample result has to be sent back before the thread can
+continue.
+There are some JMeter properties that can be set to alter this behaviour.
+
+
+
mode - sample sending mode - default is StrippedBatch since 2.9. This should be set on the client node.
+
+
Standard - send samples synchronously as soon as they are generated
+
Hold - hold samples in an array until the end of a run. This may use a lot of memory on the server and is discouraged.
+
DiskStore - store samples in a disk file (under java.io.temp) until the end of a run.
+ The serialised data file is deleted on JVM exit.
+
StrippedDiskStore - remove responseData from succesful samples, and use DiskStore sender to send them.
+
Batch - send saved samples when either the count (num_sample_threshold) or time (time_threshold) exceeds a threshold,
+ at which point the samples are sent synchronously.
+ The thresholds can be configured on the server using the following properties:
+
+
num_sample_threshold - number of samples to accumulate, default 100
+
time_threshold - time threshold, default 60000 ms = 60 seconds
+
+
+ See also the Asynch mode, described below.
+
Statistical - send a summary sample when either the count or time exceeds a threshold.
+ The samples are summarised by thread group name and sample label.
+ The following fields are accumulated:
+
+
elapsed time
+
latency
+
bytes
+
sample count
+
error count
+
+ Other fields that vary between samples are lost.
+
+
Stripped - remove responseData from succesful samples
+
StrippedBatch - remove responseData from succesful samples, and use Batch sender to send them.
+
Asynch - samples are temporarily stored in a local queue. A separate worker thread sends the samples.
+ This allows the test thread to continue without waiting for the result to be sent back to the client.
+ However, if samples are being created faster than they can be sent, the queue will eventually fill up,
+ and the sampler thread will block until some samples can be drained from the queue.
+ This mode is useful for smoothing out peaks in sample generation.
+ The queue size can be adjusted by setting the JMeter property
+ asynch.batch.queue.size (default 100) on the server node.
+
+
StrippedAsynch - remove responseData from succesful samples, and use Async sender to send them.
+
Custom implementation : set the mode parameter to your custom sample sender class name.
+ This must implement the interface SampleSender and have a constructor which takes a single
+ parameter of type RemoteSampleListener.
+
+
+
+
Stripped mode family strips responseData so this means that some Elements that rely on the previous responseData being available will not work.
+This is not really a problem as there is always a more efficient way to implement this feature.
+
+
The following properties apply to the Batch and Statistical modes:
+
+
num_sample_threshold - number of samples in a batch (default 100)
+
time_threshold - number of milliseconds to wait (default 60 seconds)
+ For large-scale tests there is a chance that some part of remote servers will be unavailable or down.
+ For example, when you use automation script to allocate many cloud machines and use them as generators,
+ some of requested machines might fail booting because of cloud's issues.
+ Since JMeter 2.13 there are new properties to control this behaviour.
+
+
+ First what you might want is to retry initialization attempts in hope that failed nodes just slightly delayed their boot.
+ To enable retries, you should set client.tries property to total number of connection attempts.
+ By default it does only one attempt. To control retry delay, set the client.retries_delay property
+ to number of milliseconds to sleep between attempts.
+
+
+
+ Finally, you might still want to run the test with those generators that succeeded initialization and skipping failed nodes.
+ To enable that, set the client.continue_on_fail=true property.
+
\ No newline at end of file
diff --git a/docs/usermanual/test_plan.html b/docs/usermanual/test_plan.html
new file mode 100644
index 00000000000..760c112590e
--- /dev/null
+++ b/docs/usermanual/test_plan.html
@@ -0,0 +1,509 @@
+
+Apache JMeter
+ -
+ User's Manual: Elements of a Test PlanMain content
The Test Plan object has a checkbox called "Functional Testing". If selected, it
+will cause JMeter to record the data returned from the server for each sample. If you have
+selected a file in your test listeners, this data will be written to file. This can be useful if
+you are doing a small run to ensure that JMeter is configured correctly, and that your server
+is returning the expected results. The consequence is that the file will grow huge quickly, and
+JMeter's performance will suffer. This option should be off if you are doing stress-testing (it
+is off by default).
+
If you are not recording the data to file, this option makes no difference.
+
You can also use the Configuration button on a listener to decide what fields to save.
Thread group elements are the beginning points of any test plan.
+All controllers and samplers must be under a thread group.
+Other elements, e.g. Listeners, may be placed directly under the test plan,
+in which case they will apply to all the thread groups.
+As the name implies, the thread group
+element controls the number of threads JMeter will use to execute your test. The
+controls for a thread group allow you to:
+
Set the number of threads
+
Set the ramp-up period
+
Set the number of times to execute the test
+
+
+
Each thread will execute the test plan in its entirety and completely independently
+of other test threads. Multiple threads are used to simulate concurrent connections
+to your server application.
+
+
The ramp-up period tells JMeter how long to take to "ramp-up" to the full number of
+threads chosen. If 10 threads are used, and the ramp-up period is 100 seconds, then
+JMeter will take 100 seconds to get all 10 threads up and running. Each thread will
+start 10 (100/10) seconds after the previous thread was begun. If there are 30 threads
+and a ramp-up period of 120 seconds, then each successive thread will be delayed by 4 seconds.
+
+
Ramp-up needs to be long enough to avoid too large a work-load at the start
+of a test, and short enough that the last threads start running before
+the first ones finish (unless one wants that to happen).
+
+
+Start with Ramp-up = number of threads and adjust up or down as needed.
+
+
+
By default, the thread group is configured to loop once through its elements.
+
+
Version 1.9 introduces a test run scheduler.
+ 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.
+
Alternatively, one can use the relative delay and duration fields.
+ Note that delay overrides start-time, and duration over-rides end-time.
+JMeter has two types of Controllers: Samplers and Logical Controllers.
+These drive the processing of a test.
+
+
+
Samplers tell JMeter to send requests to a server. For
+example, add an HTTP Request Sampler if you want JMeter
+to send an HTTP request. You can also customize a request by adding one
+or more Configuration Elements to a Sampler. For more
+information, see
+Samplers.
+
+
Logical Controllers let you customize the logic that JMeter uses to
+decide when to send requests. For example, you can add an Interleave
+Logic Controller to alternate between two HTTP Request Samplers.
+For more information, see Logical Controllers.
+Samplers tell JMeter to send requests to a server and wait for a response.
+They are processed in the order they appear in the tree.
+Controllers can be used to modify the number of repetitions of a sampler.
+
+
+JMeter samplers include:
+
+
FTP Request
+
HTTP Request
+
JDBC Request
+
Java object request
+
LDAP Request
+
SOAP/XML-RPC Request
+
WebService (SOAP) Request
+
+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.
+
+
+
If you are going to send multiple requests of the same type (for example,
+HTTP Request) to the same server, consider using a Defaults Configuration
+Element. Each controller has one or more Defaults elements (see below).
+
+
Remember to add a Listener to your test plan to view and/or store the
+results of your requests to disk.
+
+
If you are interested in having JMeter perform basic validation on
+the response of your request, add an Assertion to
+the sampler. For example, in stress testing a web application, the server
+may return a successful "HTTP Response" code, but the page may have errors on it or
+may be missing sections. You could add assertions to check for certain HTML tags,
+common error strings, and so on. JMeter lets you create these assertions using regular
+expressions.
Logic Controllers let you customize the logic that JMeter uses to
+decide when to send requests.
+Logic Controllers can change the order of requests coming from their
+child elements. They can modify the requests themselves, cause JMeter to repeat
+requests, etc.
+
+
+
To understand the effect of Logic Controllers on a test plan, consider the
+following test tree:
The first thing about this test is that the login request will be executed only
+the first time through. Subsequent iterations will skip it. This is due to the
+effects of the Once Only Controller.
+
+
After the login, the next Sampler loads the search page (imagine a
+web application where the user logs in, and then goes to a search page to do a search). This
+is just a simple request, not filtered through any Logic Controller.
+
+
After loading the search page, we want to do a search. Actually, we want to do
+two different searches. However, we want to re-load the search page itself between
+each search. We could do this by having 4 simple HTTP request elements (load search,
+search "A", load search, search "B"). Instead, we use the Interleave Controller which passes on one child request each time through the test. It keeps the
+ordering (ie - it doesn't pass one on at random, but "remembers" its place) of its
+child elements. Interleaving 2 child requests may be overkill, but there could easily have
+been 8, or 20 child requests.
+
+
Note the HTTP Request Defaults that
+belongs to the Interleave Controller. Imagine that "Search A" and "Search B" share
+the same PATH info (an HTTP request specification includes domain, port, method, protocol,
+path, and arguments, plus other optional items). This makes sense - both are search requests,
+ hitting the same back-end search engine (a servlet or cgi-script, let's say). Rather than
+ configure both HTTP Samplers with the same information in their PATH field, we
+ can abstract that information out to a single Configuration Element. When the Interleave
+ Controller "passes on" requests from "Search A" or "Search B", it will fill in the blanks with
+ values from the HTTP default request Configuration Element. So, we leave the PATH field
+ blank for those requests, and put that information into the Configuration Element. In this
+case, this is a minor benefit at best, but it demonstrates the feature.
+
+
The next element in the tree is another HTTP default request, this time added to the
+Thread Group itself. The Thread Group has a built-in Logic Controller, and thus, it uses
+this Configuration Element exactly as described above. It fills in the blanks of any
+Request that passes through. It is extremely useful in web testing to leave the DOMAIN
+field blank in all your HTTP Sampler elements, and instead, put that information
+into an HTTP default request element, added to the Thread Group. By doing so, you can
+test your application on a different server simply by changing one field in your Test Plan.
+Otherwise, you'd have to edit each and every Sampler.
+
+
The last element is a HTTP Cookie Manager. A Cookie Manager should be added to all web tests - otherwise JMeter will
+ignore cookies. By adding it at the Thread Group level, we ensure that all HTTP requests
+will share the same cookies.
The Test Fragment element is a special type of controller that
+exists on the Test Plan tree at the same level as the Thread Group element. It is distinguished
+from a Thread Group in that it is not executed unless it is
+referenced by either a Module Controller or an Include_Controller.
+
+
This element is purely for code re-use within Test Plans and was introduced in Version 2.5
Listeners provide access to the information JMeter gathers about the test cases while
+JMeter runs. The Graph Results listener plots the response times on a graph.
+The "View Results Tree" Listener shows details of sampler requests and responses, and can display basic HTML and XML representations of the response.
+Other listeners provide summary or aggregation information.
+
+
+
+Additionally, listeners can direct the data to a file for later use.
+Every listener in JMeter provides a field to indicate the file to store data to.
+There is also a Configuration button which can be used to choose which fields to save, and whether to use CSV or XML format.
+Note that all Listeners save the same data; the only difference is in the way the data is presented on the screen.
+
+
+
+Listeners can be added anywhere in the test, including directly under the test plan.
+They will collect data only from elements at or below their level.
+
+
+
There are several listeners
+that come with JMeter.
By default, a JMeter thread sends requests without pausing between each request.
+We recommend that you specify a delay by adding one of the available timers to
+your Thread Group. If you do not add a delay, JMeter could overwhelm your server by
+making too many requests in a very short amount of time.
+
+
The timer will cause JMeter to delay a certain amount of time before each
+sampler which is in its scope.
+
+
+If you choose to add more than one timer to a Thread Group, JMeter takes the sum of
+the timers and pauses for that amount of time before executing the samplers to which the timers apply.
+Timers can be added as children of samplers or controllers in order to restrict the samplers to which they are applied.
+
+
+To provide a pause at a single place in a test plan, one can use the Test Action Sampler.
+
Assertions allow you to assert facts about responses received from the
+server being tested. Using an assertion, you can essentially "test" that your
+application is returning the results you expect it to.
+
+
For instance, you can assert that the response to a query will contain some
+particular text. The text you specify can be a Perl-style regular expression, and
+you can indicate that the response is to contain the text, or that it should match
+the whole response.
+
+
You can add an assertion to any Sampler. For example, you can
+add an assertion to a HTTP Request that checks for the text, "</HTML>". JMeter
+will then check that the text is present in the HTTP response. If JMeter cannot find the
+text, then it will mark this as a failed request.
+
+
+Note that assertions apply to all samplers which are in its scope.
+To restrict the assertion to a single sampler, add the assertion as a child of the sampler.
+
+
+
To view the assertion results, add an Assertion Listener to the Thread Group.
+Failed Assertions will also show up in the Tree View and Table Listeners,
+and will count towards the error %age for example in the Aggregate and Summary reports.
+
A configuration element works closely with a Sampler. Although it does not send requests
+(except for HTTP(S) Test Script Recorder), it can add to or modify requests.
+
+
A configuration element is accessible from only inside the tree branch where you place the element.
+For example, if you place an HTTP Cookie Manager inside a Simple Logic Controller, the Cookie Manager will
+only be accessible to HTTP Request Controllers you place inside the Simple Logic Controller (see figure 1).
+The Cookie Manager is accessible to the HTTP requests "Web Page 1" and "Web Page 2", but not "Web Page 3".
+
Also, a configuration element inside a tree branch has higher precedence than the same element in a "parent"
+branch. For example, we defined two HTTP Request Defaults elements, "Web Defaults 1" and "Web Defaults 2".
+Since we placed "Web Defaults 1" inside a Loop Controller, only "Web Page 2" can access it. The other HTTP
+requests will use "Web Defaults 2", since we placed it in the Thread Group (the "parent" of all other branches).
+
+Figure 1 -
+ Test Plan Showing Accessability of Configuration Elements
+
+
+The User Defined Variables Configuration element is different.
+It is processed at the start of a test, no matter where it is placed.
+For simplicity, it is suggested that the element is placed only at the start of a Thread Group.
+
A Pre-Processor executes some action prior to a Sampler Request being made.
+If a Pre-Processor is attached to a Sampler element, then it will execute just prior to that sampler element running.
+A Pre-Processor is most often used to modify the settings of a Sample Request just before it runs, or to update variables that aren't extracted from response text.
+See the scoping rules for more details on when Pre-Processors are executed.
A Post-Processor executes some action after a Sampler Request has been made.
+If a Post-Processor is attached to a Sampler element, then it will execute just after that sampler element runs.
+A Post-Processor is most often used to process the response data, often to extract values from it.
+See the scoping rules for more details on when Post-Processors are executed.
+Please note that Timers, Assertions, Pre- and Post-Processors are only processed if there is a sampler to which they apply.
+Logic Controllers and Samplers are processed in the order in which they appear in the tree.
+Other test elements are processed according to the scope in which they are found, and the type of test element.
+[Within a type, elements are processed in the order in which they appear in the tree].
+
+The JMeter test tree contains elements that are both hierarchical and ordered. Some elements in the test trees are strictly hierarchical (Listeners, Config Elements, Post-Procesors, Pre-Processors, Assertions, Timers), and some are primarily ordered (controllers, samplers). When you create your test plan, you will create an ordered list of sample request (via Samplers) that represent a set of steps to be executed. These requests are often organized within controllers that are also ordered. Given the following test tree:
+Example test tree
+
The order of requests will be, One, Two, Three, Four.
+
Some controllers affect the order of their subelements, and you can read about these specific controllers in the component reference.
+
Other elements are hierarchical. An Assertion, for instance, is hierarchical in the test tree.
+If its parent is a request, then it is applied to that request. If its
+parent is a Controller, then it affects all requests that are descendants of
+that Controller. In the following test tree:
+Hierarchy example
+
Assertion #1 is applied only to Request One, while Assertion #2 is applied to Requests Two and Three.
+
Another example, this time using Timers:
+complex example
+
In this example, the requests are named to reflect the order in which they will be executed. Timer #1 will apply to Requests Two, Three, and Four (notice how order is irrelevant for hierarchical elements). Assertion #1 will apply only to Request Three. Timer #2 will affect all the requests.
+
Hopefully these examples make it clear how configuration (hierarchical) elements are applied. If you imagine each Request being passed up the tree branches, to its parent, then to its parent's parent, etc, and each time collecting all the configuration elements of that parent, then you will see how it works.
+
+The Configuration elements Header Manager, Cookie Manager and Authorization manager are
+treated differently from the Configuration Default elements.
+The settings from the Configuration Default elements are merged into a set of values that the Sampler has access to.
+However, the settings from the Managers are not merged.
+If more than one Manager is in the scope of a Sampler,
+only one Manager is used, but there is currently no way to specify which is used.
+
+
+JMeter properties are defined in jmeter.properties (see Gettting Started - Configuring JMeter for more details).
+
+Properties are global to jmeter, and are mostly used to define some of the defaults JMeter uses.
+For example the property remote_hosts defines the servers that JMeter will try to run remotely.
+Properties can be referenced in test plans
+- see Functions - read a property -
+but cannot be used for thread-specific values.
+
+
+JMeter variables are local to each thread. The values may be the same for each thread, or they may be different.
+
+If a variable is updated by a thread, only the thread copy of the variable is changed.
+For example the Regular Expression Extractor Post-Processor
+will set its variables according to the sample that its thread has read, and these can be used later
+by the same thread.
+For details of how to reference variables and functions, see Functions and Variables
+
+
+Note that the values defined by the Test Plan and the User Defined Variables configuration element
+are made available to the whole test plan at startup.
+If the same variable is defined by multiple UDV elements, then the last one takes effect.
+Once a thread has started, the initial set of variables is copied to each thread.
+Other elements such as the
+User Parameters Pre-Processor or Regular Expression Extractor Post-Processor
+may be used to redefine the same variables (or create new ones). These redefinitions only apply to the current thread.
+
+
+The setProperty function can be used to define a JMeter property.
+These are global to the test plan, so can be used to pass information between threads - should that be needed.
+
+Variables don't have to vary - they can be defined once, and if left alone, will not change value.
+So you can use them as short-hand for expressions that appear frequently in a test plan.
+Or for items which are constant during a run, but which may vary between runs.
+For example, the name of a host, or the number of threads in a thread group.
+
+
+When deciding how to structure a Test Plan,
+make a note of which items are constant for the run, but which may change between runs.
+Decide on some variable names for these -
+perhaps use a naming convention such as prefixing them with C_ or K_ or using uppercase only
+to distinguish them from variables that need to change during the test.
+Also consider which items need to be local to a thread -
+for example counters or values extracted with the Regular Expression Post-Processor.
+You may wish to use a different naming convention for these.
+
+
+For example, you might define the following on the Test Plan:
+
+HOST www.example.com
+THREADS 10
+LOOPS 20
+
+You can refer to these in the test plan as ${HOST} ${THREADS} etc.
+If you later want to change the host, just change the value of the HOST variable.
+This works fine for small numbers of tests, but becomes tedious when testing lots of different combinations.
+One solution is to use a property to define the value of the variables, for example:
+
\ No newline at end of file
diff --git a/eclipse.classpath b/eclipse.classpath
new file mode 100644
index 00000000000..fa596cb3781
--- /dev/null
+++ b/eclipse.classpath
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eclipse.readme b/eclipse.readme
new file mode 100644
index 00000000000..2f475e882a7
--- /dev/null
+++ b/eclipse.readme
@@ -0,0 +1,104 @@
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+
+Eclipse settings
+----------------
+The following files should be excluded from build output:
+*.metaprops
+See Preferences/Java/Building/Output Folder/Filtered Resources
+
+
+Eclipse.classpath
+-----------------
+[This has been tested with Eclipse 3.2 up to 4.3.2. It may not work with other versions.]
+
+The file eclipse.classpath is intended as a starter .classpath file
+for building JMeter using Eclipse version 3 to 4.3. Make sure to execute
+the "ant download_jars" task to download and install the jars referred
+to in the classpath before creating the Eclipse project.
+If you do after creating project, then don't forget to refresh Eclipse project.
+
+Note that Eclipse is not easy to use for creating jar files.
+However, it is easy to use Eclipse to run Ant.
+
+The following targets may prove useful:
+
+ clean - Clean up to force a build from source
+ package-only - creates the jars
+ package - compiles everything and then packages it
+ run_gui - compiles, packages, and then start the JMeter GUI from the jars
+
+Invoking Ant targets inside Eclipse
+----------------------------------
+You can use the "Run As --> Ant Build" and select target, or you can use
+the "Windows->Show View->Ant View". Then select the "build.xml" file and
+drag and drop to the "Ant View".
+Now you can invoke targets by clicking on them.
+Note that if you invoke for example the "compile" target, and get error
+messages about
+"
+Unable to find a javac compiler;
+com.sun.tools.javac.Main is not on the classpath.
+Perhaps JAVA_HOME does not point to the JDK
+"
+it just means that your Eclipse project is set up with JRE libraries instead of JDK libraries.
+The suggested fix is to add a JDK in "Window->Preferences->Java->Installed JREs".
+Then do a "Project->Properties" and select "Java Build Path" in the left pane, and then
+select the "Libraries" tab in the right pane. Scroll to the bottom, select the "JRE System Library",
+and click "Remove". Then click "Add library..." , select "JRE System Library", and then select
+the JDK. Now it should work when you invoke the "compile" target.
+
+
+Finishing the build using Ant
+-----------------------------
+
+Find the build.xml file in the project,
+right click on it, and click "Run As --> Ant Build".
+
+Make sure you select the "package" target.
+
+This will compile any remaining classes,
+and then create all the jars.
+
+Now refresh the project (you should add this to the Ant build properties)
+
+Launching from Eclipse
+----------------------
+
+You can use the Ant target run_gui to run the JMeter GUI, or you can follow the instructions
+below to add a Java Application launch, which will for example, allow you to use the debugger to
+run JMeter.
+
+These instructions assume you have configured Eclipse to use the classpath
+as suggested in eclipse.classpath, and have run "ant package" to compile
+the RMI classes and build the jars.
+
+Create a new Java Application launch configuration.
+
+On the Main tab, enter the following as the main class:
+
+ org.apache.jmeter.NewDriver
+
+On the Arguments tab, in the Working Directory area, pick the radio
+button next to "Other" and enter the following in the text box:
+
+ ${workspace_loc}/jmeterproject/bin
+
+ where "jmeterproject" is the name of the JMeter project.
+
+ [It would be nicer to use ${project_loc}/bin
+ but unfortunately the Eclipse Debug view does not seem to preserve any of the project variables]
diff --git a/extras/ConvertHTTPSampler.txt b/extras/ConvertHTTPSampler.txt
new file mode 100644
index 00000000000..1b83942193a
--- /dev/null
+++ b/extras/ConvertHTTPSampler.txt
@@ -0,0 +1,16 @@
+=== HTTPSampler to HTTPSampler2 convertion ===
+
+If the testcase was created with an old version, load it into 2.1.1 and save it.
+Edit the testcase and replace the following:
+
+Old
+===
+
+...
+
+
+New
+===
+
+...
+
\ No newline at end of file
diff --git a/extras/Test.jmx b/extras/Test.jmx
new file mode 100644
index 00000000000..96f1e0655a1
--- /dev/null
+++ b/extras/Test.jmx
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+ false
+ false
+ Sample test for demonstrating JMeter Ant build script and Schematic stylesheet
+
+
+
+ 1143889321000
+
+
+ 3
+ false
+
+ 5
+ false
+
+ 1143889321000
+ continue
+ 1
+
+
+
+ 1
+ 1000
+ C
+ false
+ 1000000
+
+
+
+
+
+
+ =
+ 100
+ Sleep_Time
+
+
+ =
+ 0xFF
+ Sleep_Mask
+
+
+ =
+
+ Label
+
+
+ =
+ 200
+ ResponseCode
+
+
+ =
+ OK
+ ResponseMessage
+
+
+ =
+ OK
+ Status
+
+
+ =
+ Request
+ SamplerData
+
+
+ =
+ Response C=${C}
+ ResultData
+
+
+
+ org.apache.jmeter.protocol.java.test.JavaTest
+
+
+
+
+ 3
+
+ Assertion.response_data
+ 6
+ false
+
+
+
+
+
+
+
+ =
+ 100
+ Sleep_Time
+
+
+ =
+ 0xFF
+ Sleep_Mask
+
+
+ =
+
+ Label
+
+
+ =
+ 200
+ ResponseCode
+
+
+ =
+ OK
+ ResponseMessage
+
+
+ =
+ OK
+ Status
+
+
+ =
+ Request
+ SamplerData
+
+
+ =
+ Response C=${C} Tn=${__threadNum}
+ ResultData
+
+
+
+ org.apache.jmeter.protocol.java.test.JavaTest
+
+
+
+
+
+
diff --git a/extras/addons.txt b/extras/addons.txt
new file mode 100644
index 00000000000..d45c391568a
--- /dev/null
+++ b/extras/addons.txt
@@ -0,0 +1,35 @@
+This file describes how to create local additions to JMeter.
+
+Create a new directory for the sources:
+
+cd JMETER_HOME
+
+mkdir addons
+
+Copy addons.xml into JMETER_HOME
+
+To build the addons, run ant as follows:
+
+ant -buildfile=addons.xml
+
+This will compile the sources to build/addons/...
+
+If successful, it will also create the jar file:
+
+JMETER_HOME/lib/ext/ApacheJmeter_addons.jar
+
+As the filename of this jar is alphabetically earlier,
+any classes in it will be used in preference to existing JMeter classes.
+
+This allows the addons to be used to supply new functionality as well
+as overriding existing functionality, without needing to rebuild JMeter.
+
+Such addons are intended mainly to be used locally - for example if you
+have developed any new code that is only relevant to your organisation.
+
+It can also be useful for developing general purpose add-ons that are
+intended for general release. Once tested, these can be moved into one of
+the normal JMeter source directories.
+
+N.B. The build file assumes that JMeter has been built separately, as
+JMeter classes are resolved from jars in the lib and lib/ext directories.
diff --git a/extras/addons.xml b/extras/addons.xml
new file mode 100644
index 00000000000..e0278b9e04d
--- /dev/null
+++ b/extras/addons.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/ant-jmeter-1.1.1.jar b/extras/ant-jmeter-1.1.1.jar
new file mode 100644
index 00000000000..bd7d15ab327
Binary files /dev/null and b/extras/ant-jmeter-1.1.1.jar differ
diff --git a/extras/build.xml b/extras/build.xml
new file mode 100644
index 00000000000..2a4d8683c51
--- /dev/null
+++ b/extras/build.xml
@@ -0,0 +1,167 @@
+
+
+
+
+
+ Sample build file for use with ant-jmeter.jar
+ See http://www.programmerplanet.org/pages/projects/jmeter-ant-task.php
+
+ To run a test and create the output report:
+ ant -Dtest=script
+
+ To run a test only:
+ ant -Dtest=script run
+
+ To run report on existing test output
+ ant -Dtest=script report
+
+ The "script" parameter is the name of the script without the .jmx suffix.
+
+ Additional options:
+ -Dshow-data=y - include response data in Failure Details
+ -Dtestpath=xyz - path to test file(s) (default user.dir).
+ N.B. Ant interprets relative paths against the build file
+ -Djmeter.home=.. - path to JMeter home directory (defaults to parent of this build file)
+ -Dreport.title="My Report" - title for html report (default is 'Load Test Results')
+
+ Deprecated:
+ -Dformat=2.0 - use version 2.0 JTL files rather than 2.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ funcMode = ${funcMode}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Report generated at ${report.datestamp}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cannot find all xalan and/or serialiser jars
+ The XSLT formatting may not work correctly.
+ Check you have xalan and serializer jars in ${lib.dir}
+
+
+
+
diff --git a/extras/collapse.png b/extras/collapse.png
new file mode 100644
index 00000000000..3ec05e4ec19
Binary files /dev/null and b/extras/collapse.png differ
diff --git a/extras/convertjmx.fdl b/extras/convertjmx.fdl
new file mode 100644
index 00000000000..aa35eb3d344
--- /dev/null
+++ b/extras/convertjmx.fdl
@@ -0,0 +1,27 @@
+! Licensed to the Apache Software Foundation (ASF) under one or more
+! contributor license agreements. See the NOTICE file distributed with
+! this work for additional information regarding copyright ownership.
+! The ASF licenses this file to You under the Apache License, Version 2.0
+! (the "License"); you may not use this file except in compliance with
+! the License. You may obtain a copy of the License at
+!
+! http://www.apache.org/licenses/LICENSE-2.0
+!
+! Unless required by applicable law or agreed to in writing, software
+! distributed under the License is distributed on an "AS IS" BASIS,
+! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+! See the License for the specific language governing permissions and
+! limitations under the License.
+!
+! Convert JMX files so Java can read them on OpenVMS
+! ==================================================
+!
+! This will be needed if the JMX is in VARIABLE format.
+!
+! Usage:
+! CONVERT/FDL=CONVERTJMX input.jmx output.jmx
+!
+!
+RECORD
+ CARRIAGE_CONTROL carriage_return
+ FORMAT stream_lf
\ No newline at end of file
diff --git a/extras/execcode.bsh b/extras/execcode.bsh
new file mode 100644
index 00000000000..fb20c956cc1
--- /dev/null
+++ b/extras/execcode.bsh
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/**
+ Start an external application using the Java Runtime exec() method.
+ Display any output to the standard BeanShell output using print().
+ Return the process exit code.
+ Note: does not display stderr.
+*/
+
+bsh.help.execcode = "usage: execcode( String arg )";
+
+int execcode( String arg )
+{
+ this.proc = Runtime.getRuntime().exec(arg);
+ this.din = new DataInputStream( proc.getInputStream() );
+ while( (line=din.readLine()) != null ) {
+ print(line);
+ }
+ return this.proc.waitFor();
+}
diff --git a/extras/expand.png b/extras/expand.png
new file mode 100644
index 00000000000..f1e7b8b02a8
Binary files /dev/null and b/extras/expand.png differ
diff --git a/extras/jmeter-results-detail-report.xsl b/extras/jmeter-results-detail-report.xsl
new file mode 100644
index 00000000000..ea00f137858
--- /dev/null
+++ b/extras/jmeter-results-detail-report.xsl
@@ -0,0 +1,407 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Load Test Results
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NaN
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NaN
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/extras/jmeter.fb b/extras/jmeter.fb
new file mode 100644
index 00000000000..a321c763545
--- /dev/null
+++ b/extras/jmeter.fb
@@ -0,0 +1,62 @@
+[Jar files]
+bin/apachejmeter.jar
+lib/ext/apachejmeter_components.jar
+lib/ext/apachejmeter_core.jar
+lib/ext/apachejmeter_ftp.jar
+lib/ext/apachejmeter_functions.jar
+lib/ext/apachejmeter_http.jar
+lib/ext/apachejmeter_java.jar
+lib/ext/apachejmeter_jdbc.jar
+lib/ext/apachejmeter_ldap.jar
+lib/ext/apachejmeter_mail.jar
+lib/ext/apachejmeter_monitors.jar
+lib/ext/apachejmeter_tcp.jar
+lib/jorphan.jar
+[Source dirs]
+src/components
+src/core
+src/examples
+src/functions
+src/htmlparser
+src/jorphan
+src/monitor/components
+src/monitor/model
+src/protocol/ftp
+src/protocol/html
+src/protocol/java
+src/protocol/jdbc
+src/protocol/ldap
+src/protocol/mail
+src/protocol/tcp
+[Aux classpath entries]
+lib/avalon-framework-4.1.4.jar
+lib/batik-awt-util.jar
+lib/commons-collections.jar
+lib/commons-httpclient-2.0.jar
+lib/commons-logging.jar
+lib/excalibur-compatibility-1.1.jar
+lib/excalibur-datasource-1.1.1.jar
+lib/excalibur-i18n-1.1.jar
+lib/excalibur-instrument-1.0.jar
+lib/excalibur-logger-1.1.jar
+lib/excalibur-pool-1.2.jar
+lib/htmlparser.jar
+lib/jakarta-oro-2.0.8.jar
+lib/jdom-b9.jar
+lib/js.jar
+lib/junit.jar
+lib/logkit-1.2.jar
+lib/soap.jar
+lib/tidy.jar
+lib/velocity-1.4-dev.jar
+lib/xalan.jar
+lib/xercesimpl.jar
+lib/xml-apis.jar
+lib/xpp3-1.1.3.4.d.jar
+lib/xstream-1.0.1.jar
+lib/opt/activation.jar
+lib/opt/bsf.jar
+lib/opt/bsh-2.0b1.jar
+lib/opt/mail.jar
+[Options]
+relative_paths=true
diff --git a/extras/printvars.bsh b/extras/printvars.bsh
new file mode 100644
index 00000000000..f232d59e31e
--- /dev/null
+++ b/extras/printvars.bsh
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// Sample script to print JMeter variables
+print(">>>>");
+Iterator i = vars.getIterator();
+while(i.hasNext())
+{
+ Map.Entry me = i.next();
+ if(String.class.equals(me.getValue().getClass())){
+ print(me);
+ }
+}
+print("<<<<");
diff --git a/extras/proxycert.cmd b/extras/proxycert.cmd
new file mode 100644
index 00000000000..aeec77002e5
--- /dev/null
+++ b/extras/proxycert.cmd
@@ -0,0 +1,45 @@
+@echo off
+
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem Generate temporary certificate for use with JMeter Proxy recorder
+rem Usage: proxycert [validity(default 1)]
+rem e.g. proxycert 7
+
+setlocal
+
+set KEYSTORE=proxyserver.jks
+if not exist %KEYSTORE% goto NOTEXISTS
+echo %KEYSTORE% exists; please rename or delete it before creating a replacement
+goto :EOF
+:NOTEXISTS
+
+set DNAME="cn=JMeter Proxy (DO NOT TRUST)"
+
+set VALIDITY=1
+if not .%1 == . set VALIDITY=%1
+
+rem Must agree with property proxy.cert.keystorepass
+set STOREPASSWORD=password
+rem Must agree with proxy.cert.keypassword
+set KEYPASSWORD=password
+
+rem generate the keystore with the certificate
+keytool -genkeypair -alias jmeter -keystore %KEYSTORE% -keypass %KEYPASSWORD% -storepass %STOREPASSWORD% -validity %VALIDITY% -keyalg RSA -dname %DNAME%
+
+rem show the contents
+keytool -list -v -keystore %KEYSTORE% -storepass %STOREPASSWORD%
diff --git a/extras/proxycert.sh b/extras/proxycert.sh
new file mode 100644
index 00000000000..d9abbd72a62
--- /dev/null
+++ b/extras/proxycert.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+
+
+## Generate temporary proxyserver for use with JMeter Proxy recorder
+## Usage: sh proxycert.sh [validity(default 1)]
+## e.g. sh proxyxcert.sh 7
+
+KEYSTORE=proxyserver.jks
+if [ -r ${KEYSTORE} ]
+then
+ echo "${KEYSTORE} exists; please rename or delete it before creating a replacement"
+ exit 1
+fi
+
+DNAME="cn=JMeter Proxy (DO NOT TRUST)"
+VALIDITY=${1:-1}
+# Must agree with property proxy.cert.keystorepass
+STOREPASSWORD=password
+# Must agree with proxy.cert.keypassword
+KEYPASSWORD=password
+
+## generate the keystore with the certificate
+keytool -genkeypair -alias jmeter -keystore ${KEYSTORE} -keypass ${KEYPASSWORD} -storepass ${STOREPASSWORD} -validity ${VALIDITY} -keyalg RSA -dname "${DNAME}"
+
+## show the contents
+keytool -list -v -keystore ${KEYSTORE} -storepass ${STOREPASSWORD}
diff --git a/extras/remote.bsh b/extras/remote.bsh
new file mode 100644
index 00000000000..46de81f2398
--- /dev/null
+++ b/extras/remote.bsh
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// remote.bsh
+// Sample remote file for use with bshclient
+//
+// Usage:
+// java -jar ../lib/bshclent.jar localhost 9000 ../extras/bsh.remote [arg1 arg2 ...]
+// Note: port 9000 is specified, but the jar actually uses 9001 (telnet)
+//
+
+print("remote.bsh starting");
+
+if (args.length > 0){
+print("Arguments:");
+print(args);
+}
+
+printsysprop("user.home");
+printsysprop("user.dir");
+
+printprop("log_level.jmeter");
+printprop("log_level.jorphan");
+
+// loglevel("DEBUG","jmeter");
+
+for(i=0;i<10;i++){
+ setprop("EXAMPLE",i.toString());
+ Thread.sleep(1000);
+}
+printprop("EXAMPLE");
+
+print("remote.bsh ended");
\ No newline at end of file
diff --git a/extras/schematic.cmd b/extras/schematic.cmd
new file mode 100644
index 00000000000..d796a17766e
--- /dev/null
+++ b/extras/schematic.cmd
@@ -0,0 +1,24 @@
+@echo off
+
+rem Licensed to the Apache Software Foundation (ASF) under one or more
+rem contributor license agreements. See the NOTICE file distributed with
+rem this work for additional information regarding copyright ownership.
+rem The ASF licenses this file to You under the Apache License, Version 2.0
+rem (the "License"); you may not use this file except in compliance with
+rem the License. You may obtain a copy of the License at
+rem
+rem http://www.apache.org/licenses/LICENSE-2.0
+rem
+rem Unless required by applicable law or agreed to in writing, software
+rem distributed under the License is distributed on an "AS IS" BASIS,
+rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+rem See the License for the specific language governing permissions and
+rem limitations under the License.
+
+rem Drop a JMX file on this script to create a schematic of the test plan as an HTML file
+
+cd /d %~dp0
+set name=%~n1
+if .%1 ==. set name=Test
+call ant -f schematic.xml -Dtest=%name%
+pause
\ No newline at end of file
diff --git a/extras/schematic.xml b/extras/schematic.xml
new file mode 100644
index 00000000000..865e8f62973
--- /dev/null
+++ b/extras/schematic.xml
@@ -0,0 +1,39 @@
+
+
+
+
+ To create the schematic report:
+ ant -Dtest=script
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/schematic.xsl b/extras/schematic.xsl
new file mode 100644
index 00000000000..21f3070186f
--- /dev/null
+++ b/extras/schematic.xsl
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+ Test Plan Schematic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Threads:
+
+ Loops:
+
+ Ramp up:
+
+
+
+
+
+
+
+
+
+
+ ://
+
+ :
+
+ /
+
+
+
+
+
+
+
+
+ Output:
+ XML:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+(
+
+
+
+
+ SimpleController
+
+
+
+
+
+ :
+
+)
+
+
+
+
\ No newline at end of file
diff --git a/extras/startup.bsh b/extras/startup.bsh
new file mode 100644
index 00000000000..0bb859bbd87
--- /dev/null
+++ b/extras/startup.bsh
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+//
+// Sample BeanShell Server Startup file
+//
+// Use as follows:
+// -Jbeanshell.server.port=nnnn
+// -Jbeanshell.server.file=../extras/startup.bsh
+//
+// Defines various utility routines for properties and logging
+//
+//
+
+// Stop exit() from calling System.exit();
+bsh.system.shutdownOnExit = false;
+
+print("Startup script running");
+
+import org.apache.jmeter.util.JMeterUtils;
+import org.apache.jorphan.logging.LoggingManager;
+
+getprop(p){// get a JMeter property
+return JMeterUtils.getPropDefault(p,"");
+}
+
+setprop(p,v){// set a JMeter property
+print("Setting property '"+p+"' to '"+v+"'.");
+JMeterUtils.getJMeterProperties().setProperty(p, v);
+}
+
+printprop(p){// print a JMeter property
+print(p + " = " + getprop(p));
+}
+
+loglevel(String priority, String category){
+LoggingManager.setPriority(priority, category);
+}
+
+logdebug(String text){
+loglevel("DEBUG",text);
+}
+
+loginfo(String text){
+loglevel("INFO",text);
+}
+
+// Define routines to stop the test or a thread
+stopEngine(){// Stop the JMeter test
+print("Stop Engine called");
+org.apache.jmeter.engine.StandardJMeterEngine.stopEngine();
+}
+
+stopEngineNow(){// Stop the JMeter test now
+print("Stop Engine NOW called");
+org.apache.jmeter.engine.StandardJMeterEngine.stopEngineNow();
+}
+
+stopThread(t){// Stop a JMeter thread
+print("Stop Thread "+t+" called");
+ok=org.apache.jmeter.engine.StandardJMeterEngine.stopThread(t);
+if (ok){print("Thread requested to stop");} else { print("Thread not found");}
+}
+
+stopThreadNow(t){// Stop a JMeter thread
+print("Stop Thread Now "+t+" called");
+ok=org.apache.jmeter.engine.StandardJMeterEngine.stopThreadNow(t);
+if (ok){print("Thread stopped");} else { print("Thread not found");}
+}
+
+getsysprop(p){// get a system property
+return System.getProperty(p,"");
+}
+
+setsysprop(p,v){// set a system property
+print("Setting property '"+p+"' to '"+v+"'.");
+System.setProperty(p, v);
+}
+
+printsysprop(p){// print a system property
+print(p + " = " + getsysprop(p));
+}
+
+print("Startup script completed");
\ No newline at end of file
diff --git a/fb-csv.xsl b/fb-csv.xsl
new file mode 100644
index 00000000000..eb4237731ec
--- /dev/null
+++ b/fb-csv.xsl
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+ Priority,Type,Classname,Method,Field,SourceLine
+
+
+
+ ,
+
+
+ ,
+
+
+
+
+ ,
+
+
+
+
+
+ ,
+
+
+
+
+ ,
+
+
+
+ (start:)
+
+
+
+
+
+
+
+
diff --git a/fb-excludes.xml b/fb-excludes.xml
new file mode 100644
index 00000000000..f9e2fbda0d8
--- /dev/null
+++ b/fb-excludes.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -->
+
diff --git a/index.html b/index.html
deleted file mode 100644
index 22c23e83fc7..00000000000
--- a/index.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- Apache JMeter 1.0b
-
-
-
-
-