<?xml version="1.0"?> 
<!--
   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.
-->
<document>   
<properties>     
	<author email="jmeter-dev AT jakarta.apache.org">JMeter developers</author>     
	<title>History of Previous Changes</title>   
</properties> 
<body> 
<section name="History of Previous Changes"> 
<note>
<b>This page details the changes made in previous versions only.</b>
<br></br>
Current changes are detailed in <a href="changes.html">Changes</a>.
</note>
<p><b>Changes sections are chronologically ordered from top (most recent) to bottom 
(least recent)</b></p>  

<!--  ===================  -->

<h3>Version 2.3.1</h3>
<h4>Summary of changes</h4>

<h5>JMeter Proxy</h5>

<p>
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.
</p>
<p>
Ignored proxy samples are now visible in Listeners - the label is enclosed in [ and ] as an indication. 
Proxy documentation has been improved.
</p>

<h5>GUI changes</h5>

<p>The Add menus show element types in the order in which they are processed 
- see <a href="usermanual/test_plan.html#executionorder">Test Plan Execution Order</a>.
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.
</p>

<p>
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.
</p>

<p>
The Options Menu now supports Collapse All and Expand All items to collapse and expand the test tree.
</p>

<h5>Remote testing</h5>

<p>
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.
</p>

<p>
Functions can now be used in Listener filenames (variables do not work).
</p>

<p>
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).
</p>

<h5>Other enhancements</h5>

<p>
JMeter startup no longer loads as many classes; this should reduce memory requirements.
</p>

<p>
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.
</p>

<p>
CSV files with the correct header column names are now automatically recognised when loaded. 
There is no need to configure the properties.
</p>

<p>
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. 
</p>

<p>
General documentation improvements.
</p>

<h5>HTTP</h5>

<p>PUT and DELETE should now work properly. 
Cookie Manager no longer clears manually entered cookies.
</p>
<p>Now handles the META tag http-equiv charset</p>

<h5>JDBC</h5>

<p>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.
</p>

<hr></hr>
<!-- ========================================================= -->

<h4>Incompatible changes</h4>
<ul>
<li>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: <b>server.rmi.create=false</b>.
</li>
<li>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</li>
</ul>

<h4>Bug fixes</h4>
<ul>
<li>Bug 43430 - Count of active threads is incorrect for remote samples</li>
<li>Throughput Controller was not working for "all thread" counts</li>
<li>If a POST body is built from parameter values only, these are now encoded if the checkbox is set.</li>
<li>Bug 43584 - Assertion Failure Message contains a comma that is also used as the delimiter for CSV files</li>
<li>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</li>
<li>Bug 43612 - HTTP PUT does not honor request parameters</li>
<li>Bug 43694 - ForEach Controller (empty collection processing error)</li>
<li>Bug 42012 - Variable Listener filenames do not get processed in remote tests.
Filenames can now include function references; variable references do not work.</li>
<li>Ensure Listener nodes get own save configuration when copy-pasted</li>
<li>Correct Proxy Server include and exclude matching description - port and query are included, contrary to previously documented.</li>
<li>Aggregate Graph and Aggregate Report Column Header is KB/Sec; fixed the values to be KB rather than bytes</li>
<li>
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.
</li>
<li>Default HTTPSampleResult to ISO-8859-1 encoding</li>
<li>Fix default encoding for blank encoding</li>
<li>Fix Https spoofing (port problem) which was broken in 2.3</li>
<li>Fix HTTP (Java) sampler so http.java.sampler.retries means retries, i.e. does not include initial try</li>
<li>Fix SampleResult dataType checking to better detect TEXT documents</li>
</ul>

<h4>Improvements</h4>
<ul>
<li>Add run_gui Ant target, to package and then start the JMeter GUI from Ant</li>
<li>Add File->Revert to easily drop the current changes and reload the project file currently loaded</li>
<li>Bug 31366 - Remember recently opened file(s)</li>
<li>Bug 43351 - Add support for Parameters and script file to all BeanShell test elements</li>
<li>SaveService no longer needs to instantiate classes</li>
<li>New functions: __eval() and __evalVar()</li>
<li>Menu items now appear in execution order</li>
<li>Test Plan items can now only be dropped/pasted/merged into parts of the tree where they are allowed</li>
<li>Property Display to show the value of System and JMeter properties and allow them to be changed</li>
<li>Bug 43451 - Allow Regex Extractor to operate on Response Code/Message</li>
<li>JDBC Sampler now allows INOUT and OUT parameters for Called procedures</li>
<li>JDBC Sampler now allows per-thread connections</li>
<li>Cookie Manager not longer clears cookies defined in the GUI</li>
<li>HTTP Parameters without names are ignored (except for POST requests with no file)</li>
<li>"Save Selection As" added to main menu; now checks only item is selected</li>
<li>Test Plan now has Paste menu item (paste was already supported via ^V)</li>
<li>If the default delimiter does not work when loading a CSV file, guess the delimiter by analysing the header line.</li>
<li>Add optional "loopback" protocol for HttpClient sampler</li>
<li>HTTP Mirror Server now supports blocking waiting for more data to appear, if content-length header is present in request</li>
<li>HTTP Mirror Server GUI now has the Start and Stop buttons in a more visible place</li>
<li>Server mode now creates the RMI registry; to disable set the JMeter property server.rmi.create=false</li>
<li>HTTP Sampler now supports using MIME Type field to specify content-type request header when body is constructed from parameter values</li>
<li>Enable exit after a single server test - define JMeter property server.exitaftertest=true</li>
<li>Added -G option to set properties in remote servers</li>
<li>Added -X option to stop remote servers after non-GUI run</li>
<li>Bug 43485 - Ability to specify keep-alive on SOAP/XML-RPC request</li>
<li>Bug 43678 - Handle META tag http-equiv charset</li>
<li>Bug 42555 - [I18N] Proposed corrections for the french translation</li>
<li>Bug 43727 - Test Action does not support variables or functions</li>
<li>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</li>
<li>The javaScript function now has access to JMeter variables and context etc. See <a href="usermanual/functions.html#__javaScript">JavaScript function</a></li>
<li>Use drop-down list for BSF Sampler language field</li>
<li>Add hostname to items that can be saved in CSV and XML output files.</li>
<li>Errors only flag is now supported when loading XML and CSV files</li>
<li>Ensure ResultCollector uses SaveService encoding</li>
<li>Proxy now rejects attempts to use it with https</li>
<li>Proxy spoofing can now use RE matching to determine which urls to spoof (useful if images are not https)</li>
<li>Proxy spoofing now drops the default HTTPS port (443) when converting https: links to http:</li>
<li>Add Successes Only logging and display</li>
<li>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'</li>
<li>Added Collapse All and Expand All Option menu items</li>
<li>Allow optional definition of extra content-types that are viewable as text</li>
</ul>

<h4>Non-functional Improvements</h4>
<ul>
<li>Functor code tightened up; Functor can now be used with interfaces, as well as pre-defined targets and parameters.</li>
<li>Save graphics function now prompts before overwriting an existing file</li>
<li>Debug Sampler and Debug PostProcessor added.</li>
<li>Fixed up method names in Calculator and SamplingStatCalculator</li>
<li>Tidied up Listener documentation.</li>
</ul>

<!--  ===================  -->

<h3>Version 2.3</h3>

<h3>Fixes since 2.3RC4</h3>

<h4>Bug fixes</h4>
<ul>
<li>Fix NPE in SampleResultConverter - XStream PrettyPrintWriter cannot handle nulls</li>
<li>If Java HTTP sampler sees null ResponseMessage, replace with HTTP header</li>
<li>Bug 43332 - 2.3RC4 does not clear Guis based on TestBean</li>
<li>Bug 42948 - Problems with Proxy gui table fields in Java 1.6</li>
<li>Fixup broken jmeter-server script</li>
<li>Bug 43364 - option to revert If Controller to pre 2.3RC3 behaviour</li>
<li>Bug 43449 - Statistical Remote mode does not handle Latency</li>
<li>Bug 43450 (partial fix) - Allow SampleCount and ErrorCount to be saved to/restored from files</li>
</ul>

<h4>Improvements</h4>
<ul>
<li>Add nameSpace option to XPath extractor</li>
<li>Add NULL parameter option to JDBC sampler</li>
<li>Add documentation links for Rhino and BeanShell to functions; clarify variables and properties</li>
<li>Ensure uncaught exceptions are logged</li>
<li>Look for user.properties and system.properties in JMeter bin directory if not found locally</li>
</ul>

<h4>Fixes since 2.3RC3</h4>
<ul>
<li>Fixed NPE in Summariser (bug introduced in 2.3RC3)</li>
<li>Fixed setup of proxy port (bug introduced in 2.3RC3)</li>
<li>Fixed errors when running non-GUI on a headless host (bug introduced in 2.3RC3)</li>
<li>Bug 43054 - SSLManager causes stress tests to saturate and crash (bug introduced in 2.3RC3)</li>
<li>Clarified HTTP Request Defaults usage of the port field</li>
<li>Bug 43006 - NPE if icon.properties file not found</li>
<li>Bug 42918 - Size Assertion now treats an empty response as having zero length</li>
<li>Bug 43007 - Test ends before all threadgroups started</li>
<li>Fix possible NPE in HTTPSampler2 if 302 does not have Location header.</li>
<li>Bug 42919 - Failure Message blank in CSV output [now records first non-blank message]</li>
<li>Add link to Extending JMeter PDF</li>
<li>Allow for quoted charset in Content-Type parsing</li>
<li>Bug 39792 - ClientJMeter synchronisation needed</li>
<li>Bug 43122 - GUI changes not always picked up when short-cut keys used (bug introduced in 2.3RC3)</li>
<li>Bug 42947 - TestBeanGUI changes not picked up when short-cut keys used</li>
<li>Added serializer.jar (needed for update to xalan 2.7.0)</li>
<li>Bug 38687 - Module controller does not work in non-GUI mode</li>
</ul>

<h4>Improvements since 2.3RC3</h4>
<ul>
<li>Add stop thread option to CSV Dataset</li>
<li>Updated commons-httpclient to 3.1</li>
<li>Bug 28715 - allow variable cookie values (set CookieManager.allow_variable_cookies=false to disable)</li>
<li>Bug 40873 - add JMS point-to-point non-persistent delivery option</li>
<li>Bug 43283 - Save action adds .jmx if not present; checks for existing file on Save As</li>
<li>Control+A key does not work for Save All As; changed to Control+Shift+S</li>
<li>Bug 40991 - Allow Assertions to check Headers</li>
</ul>

<h3>Version 2.3RC3</h3>

<h4>Known problems/restrictions:</h4>
<p>
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.
</p>
<p>
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 <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=39337">Bug 39337</a>.
To avoid the problem, try a more recent version of Java, or switch to the HTTPClient version of the HTTP Request sampler.
</p>
<p>Transaction Controller parent mode does not support nested Transaction Controllers.
Doing so may cause a Null Pointer Exception in TestCompiler.
</p>
<p>Thread active counts are always zero in CSV and XML files when running remote tests.
</p>
<p>The property file_format.testlog=2.1 is treated the same as 2.2.
However JMeter does honour the 3 testplan versions.</p>
<p>
Bug 22510 - JMeter always uses the first entry in the keystore.
</p>
<p>
Remote mode does not work if JMeter is installed in a directory where the path name contains spaces.
</p>
<p>
BeanShell test elements leak memory.
This can be reduced by using a file instead of including the script in the test element.
</p>
<p>
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.
</p>
<p>
CSV Dataset variables are defined after configuration processing is completed,
so they cannot be used for other configuration items such as JDBC Config.
(see <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=40934">Bug 40394 </a>)
</p>

<h4>Summary of changes (for more details, see below)</h4>
<p>
Some of the main enhancements are:
</p>
<ul>
<li>Htmlparser 2.0 now used for parsing</li>
<li>HTTP Authorisation now supports domain and realm</li>
<li>HttpClient options can be specified via httpclient.parameters file</li>
<li>HttpClient now behaves the same as Java Http for SSL certificates</li>
<li>HTTP Mirror Server to allow local testing of HTTP samplers</li>
<li>HTTP Proxy supports XML-RPC recording, and other proxy improvements</li>
<li>__V() function allows support of nested variable references</li>
<li>LDAP Ext sampler optionally parses result sets and supports secure mode</li>
<li>FTP Sampler supports Ascii/Binary mode and upload</li>
<li>Transaction Controller now optionally generates a Sample with subresults</li>
<li>HTTPS session contexts are now per-thread, rather than shared. This gives better emulation of multiple users</li>
<li>BeanShell elements now support ThreadListener and TestListener interfaces</li>
<li>Coloured icons in Tree View Listener and elsewhere to better differentiate failed samples.</li>
</ul>
<p>
The main bug fixes are:
</p>
<ul>
<li>HTTPS (SSL) handling now much improved</li>
<li>Various Remote mode bugs fixed</li>
<li>Control+C and Control+V now work in the test tree</li>
<li>Latency and Encoding now available in CSV log output</li>
<li>Test elements no longer default to previous contents; test elements no longer cleared when changing language.</li>
</ul>

<h4>Incompatible changes (usage):</h4>
<p>
<b>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.</b>
<br></br>
The new arrangement is more flexible, as it allows arbitrary system properties to be defined.
</p>
<p>
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:
<pre>
https.sessioncontext.shared=true
</pre>
</p>
<p>
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.
</p>
<p>
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:
<br/>
jmeterthread.reversePostProcessors=true
</p>
<p>
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.
</p>
<p>
Control-Z no longer used for Remote Start All - this now uses Control+Shift+R
</p>
<p>
HttpClient now uses pre-emptive authentication. 
This can be changed by setting the following:
<pre>
jmeter.properties:
httpclient.parameters.file=httpclient.parameters

httpclient.parameters:
http.authentication.preemptive$Boolean=false
</pre>
</p>

<p>
The port field in HTTP Request Defaults is no longer ignored for https samplers if it is set to 80.
</p>

<h4>Incompatible changes (development):</h4>
<p>
<b>N.B.</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.
</p>
<p>
Calulator and SamplingStatCalculator classes no longer provide any formatting of their data.
Formatting should now be done using the jorphan.gui Renderer classes.
</p>
<p>
Removed deprecated method JMeterUtils.split() - use JOrphanUtils version instead.
</p>
<p>
Removed method saveUsingJPEGEncoder() from SaveGraphicsService.
It was unused so far, and used the only Sun-specific class in JMeter.
</p>


<h4>New functionality/improvements:</h4>
<ul>
<li>Add Domain and Realm support to HTTP Authorisation Manager</li>
<li>HttpClient now behaves the same as the JDK http sampler for invalid certificates etc</li>
<li>Added httpclient.parameters.file to allow HttpClient parameters to be defined</li>
<li>Bug 33964 - Http Requests can send a file as the entire post body if name/type are omitted</li>
<li>Bug 41705 - add content-encoding option to HTTP samplers for POST requests</li>
<li>Bug 40933, 40945 - optional RE matching when retrieving embedded resource URLs</li>
<li>Bug 27780 - (patch 19936) create multipart/form-data HTTP request without uploading file</li>
<li>Bug 42098 - Use specified encoding for parameter values in HTTP GET</li>
<li>Bug 42506 - JMeter threads now use independent SSL sessions</li>
<li>Bug 41707 - HTTP Proxy XML-RPC support</li>
<li>Bug 41880 - Add content-type filtering to HTTP Proxy Server</li>
<li>Bug 41876 - Add more options to control what the HTTP Proxy generates</li>
<li>Bug 42158 - Improve support for multipart/form-data requests in HTTP Proxy server</li>
<li>Bug 42173 - Let HTTP Proxy handle encoding of request, and undecode parameter values</li>
<li>Bug 42674 - default to pre-emptive HTTP authorisation if not specified</li>
<li>Support "file" protocol in HTTP Samplers</li>
<li>Http Autoredirects are now enabled by default when creating new samplers</li>

<li>Bug 40103 - various LDAP enhancements</li>
<li>Bug 40369 - LDAP: Stable search results in sampler</li>
<li>Bug 40381 - LDAP: more descriptive strings</li>

<li>BeanShell Post-Processor no longer ignores samples with zero-length result data</li>
<li>Added beanshell.init.file property to run a BeanShell script at startup</li>
<li>Bug 39864 - BeanShell init files now found from currrent or bin directory</li>
<li>BeanShell elements now support ThreadListener and TestListener interfaces</li>
<li>BSF Sampler passes additional variables to the script</li>

<li>Added timeout for WebService (SOAP) Sampler</li>

<li>Bug 40825 - Add JDBC prepared statement support</li>
<li>Extend JDBC Sampler: Commit, Rollback, AutoCommit</li>

<li>Bug 41457 - Add TCP Sampler option to not re-use connections</li>

<li>Bug 41522 - Use JUnit sampler name in sample results</li>

<li>Bug 42223 - FTP Sampler can now upload files</li>

<li>Bug 40804 - Change Counter default to max = Long.MAX_VALUE</li>

<li>Use property jmeter.home (if present) to override user.dir when starting JMeter</li>
<li>New -j option to easily change jmeter log file</li>

<li>HTTP Mirror Server Workbench element</li>

<li>Bug 41253 - extend XPathExtractor to work with non-NodeList XPath expressions</li>
<li>Bug 42088 - Add XPath Assertion for booleans</li>

<li>Added __V variable function to resolve nested variable names</li>

<li>Bug 40369 - Equals Response Assertion</li>
<li>Bug 41704 - Allow charset encoding to be specified for CSV DataSet</li>
<li>Bug 41259 - Comment field added to all test elements</li>
<li>Add standard deviation to Summary Report</li>
<li>Bug 41873 - Add name to AssertionResult and display AssertionResult in ViewResultsFullVisualizer</li>
<li>Bug 36755 - Save XML test files with UTF-8 encoding</li>
<li>Use ISO date-time format for Tree View Listener (previously the year was not shown)</li>
<li>Improve loading of CSV files: if possible, use header to determine format; guess timestamp format if not milliseconds</li>
<li>Bug 41913 - TransactionController now creates samples as sub-samples of the transaction</li>
<li>Bug 42582 - JSON pretty printing in Tree View Listener</li>
<li>Bug 40099 - Enable use of object variable in ForEachController</li>

<li>Bug 39693 - View Result Table uses icon instead of check box</li>
<li>Bug 39717 - use icons in the results tree</li>
<li>Bug 42247 - improve HCI</li>
<li>Allow user to cancel out of Close dialogue</li>
</ul>

<h4>Non-functional improvements:</h4>
<ul>
<li>Functor calls can now be unit tested</li>
<li>Replace com.sun.net classes with javax.net</li>
<li>Extract external jar definitions into build.properties file</li>
<li>Use specific jar names in build classpaths so errors are detected sooner</li>
<li>Tidied up ORO calls; now only one cache, size given by oro.patterncache.size, default 1000</li>
<li>Bug 42326 - Order of elements in .jmx files changes</li>
</ul>

<h4>External jar updates:</h4>
<ul>
<li>Htmlparser 2.0-20060923</li>
<li>xstream 1.2.1/xpp3_min-1.1.3.4.O</li>
<li>Batik 1.6</li>
<li>BSF 2.4.0</li>
<li>commons-collections 3.2</li>
<li>commons-httpclient-3.1-rc1</li>
<li>commons-jexl 1.1</li>
<li>commons-lang-2.3 (added)</li>
<li>JUnit 3.8.2</li>
<li>velocity 1.5</li>
<li>commons-io 1.3.1 (added)</li>
</ul>

<h4>Bug fixes:</h4>
<ul>
<li>Bug 39773 - NTLM now needs local host name - fix other call</li>
<li>Bug 40438 - setting "httpclient.localaddress" has no effect</li>
<li>Bug 40419 - Chinese messages translation fix</li>
<li>Bug 39861 - fix typo</li>
<li>Bug 40562 - redirects no longer invoke RE post processors</li>
<li>Bug 40451 - set label if not set by sampler</li>
<li>Fix NPE in CounterConfig.java in Remote mode</li>
<li>Bug 40791 - Calculator used by Summary Report</li>
<li>Bug 40772 - correctly parse missing fields in CSV log files</li>
<li>Bug 40773 - XML log file timestamp not parsed correctly</li>
<li>Bug 41029 - JMeter -t fails to close input JMX file</li>
<li>Bug 40954 - Statistical mode in distributed testing shows wrong results</li>
<li>Fix ClassCast Exception when using sampler that returns null, e..g TestAction</li>
<li>Bug 41140 - Post-processors are run in reverse order</li>
<li>Bug 41277 - add Latency and Encoding to CSV output</li>
<li>Bug 41414 - Mac OS X may add extra item to -jar classpath</li>
<li>Fix NPE when saving thread counts in remote testing</li>
<li>Bug 34261 - NPE in HtmlParser (allow for missing attributes)</li>
<li>Bug 40100 - check FileServer type before calling close</li>
<li>Bug 39887 - jmeter.util.SSLManager: Couldn't load keystore error message</li>
<li>Bug 41543 - exception when webserver returns "500 Internal Server Error" and content-length is 0</li>
<li>Bug 41416 - don't use chunked input for text-box input in SOAP-RPC sampler</li>
<li>Bug 39827 - SOAP Sampler content length for files</li>
<li>Fix Class cast exception in Clear.java</li>
<li>Bug 40383 - don't set content-type if already set</li>
<li>Mailer Visualiser test button now works if test plan has not yet been saved</li>
<li>Bug 36959 - Shortcuts "ctrl c" and "ctrl v" don't work on the tree elements</li>
<li>Bug 40696 - retrieve embedded resources from STYLE URL() attributes</li>
<li>Bug 41568 - Problem when running tests remotely when using a 'Counter'</li>
<li>Fixed various classes that assumed timestamps were always end time stamps:
<ul>
<li>SamplingStatCalculator</li>
<li>JTLData</li>
<li>RunningSample</li>
</ul>
</li>
<li>Bug 40325 - allow specification of proxyuser and proxypassword for WebServiceSampler</li>
<li>Change HttpClient proxy definition to use NTCredentials; added http.proxyDomain property for this</li>
<li>Bug 40371 - response assertion "pattern to test" scrollbar problem</li>
<li>Bug 40589 - Unescape XML entities in embedded URLs</li>
<li>Bug 41902 - NPE in HTTPSampler when responseCode = -1</li>
<li>Bug 41903 - ViewResultsFullVisualizer : status column looks bad when you do copy and paste</li>
<li>Bug 41837 - Parameter value corruption in proxy</li>
<li>Bug 41905 - Can't cut/paste/select Header Manager fields in Java 1.6</li>
<li>Bug 41928 - Make all request headers sent by HTTP Request sampler appear in sample result</li>
<li>Bug 41944 - Subresults not handled recursively by ResultSaver</li>
<li>Bug 42022 - HTTPSampler does not allow multiple headers of same name</li>
<li>Bug 42019 - Content type not stored in redirected HTTP request with subresults</li>
<li>Bug 42057 - connection can be null if method is null</li>
<li>Bug 41518 - JMeter changes the HTTP header Content Type for POST request</li>
<li>Bug 42156 - HTTPRequest HTTPClient incorrectly urlencodes parameter value in POST</li>
<li>Bug 42184 - Number of bytes for subsamples not added to sample when sub samples are added</li>
<li>Bug 42185 - If a HTTP Sampler follows a redirect, and is set up to download images, then images are downloaded multiple times</li>
<li>Bug 39808 - Invalid redirect causes incorrect sample time</li>
<li>Bug 42267 - Concurrent GUI update failure in Proxy Recording</li>
<li>Bug 30120 - Name of simple controller is resetted if a new simple controller is added as child</li>
<li>Bug 41078 - merge results in name change of test plan</li>
<li>Bug 40077 - Creating new Elements copies values from Existing elements</li>
<li>Bug 42325 - Implement the "clear" method for the LogicControllers</li>
<li>Bug 25441 - TestPlan changes sometimes detected incorrectly (isDirty)</li>
<li>Bug 39734 - Listeners shared after copy/paste operation</li>
<li>Bug 40851 - Loop controller with 0 iterations, stops evaluating the iterations field</li>
<li>Bug 24684 - remote startup problems if spaces in the path of the jmeter</li>
<li>Use Listener configuration when loading CSV data files</li>
<li>Function methods setParameters() need to be synchronized</li>
<li>Fix CLI long optional argument to require "=" (as for short options)</li>
<li>Fix SlowSocket to work properly with Httpclient (both http and https)</li>
<li>Bug 41612 - Loop nested in If Controller behaves erratically</li>
<li>Bug 42232 - changing language clears UDV contents</li>
<li>Jexl function did not allow variables</li>
</ul>

<h3>Version 2.2</h3>

<h4>Incompatible changes:</h4>
<p>
The time stamp is now set to the sampler start time (it was the end).
To revert to the previous behaviour, change the property <b>sampleresult.timestamp.start</b> to false (or comment it)
</p>
<p>The JMX output format has been simplified and files are not backwards compatible</p>
<p>
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.
</p>
<p>
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:
<br/>
jmeterengine.startlistenerslater=false
</p>

<p>
The GUI now expands the tree by default when loading a test plan.
This can be disabled by setting the JMeter property <b>onload.expandtree=false</b>
</p>

<h4>Known problems:</h4>
<ul>
<li>Post-processors run in reverse order (see bug 41140)</li>
<li>Module Controller does not work in non-GUI mode</li>
<li>Aggregate Report and some other listeners use increasing amounts of memory as a test progresses</li>
<li>Does not always handle non-default encoding properly</li>
<li>Spaces in the installation path cause problems for client-server mode</li>
<li>Change of Language does not propagate to all test elements</li>
<li>SamplingStatCalculator keeps a List of all samples for calculation purposes; 
this can cause memory exhaustion in long-running tests</li>
<li>Does not properly handle server certificates if they are expired or not installed locally</li>
</ul>

<h4>New functionality:</h4>
<ul>
<li>Report function</li>
<li>XPath Extractor Post-Processor. Handles single and multiple matches.</li>
<li>Simpler JMX file format (2.2)</li>
<li>BeanshellSampler code can update ResponseData directly</li>
<li>Bug 37490 - Allow UDV as delay in Duration Assertion</li>
<li>Slow connection emulation for HttpClient</li>
<li>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</li>
<li>Enhanced the documentation for webservice sampler to explain how it works with CSVDataSet</li>
<li>Enhanced the documentation for javascript function to explain escaping comma</li>
<li>Allow CSV Data Set file names to be absolute</li>
<li>Report Tree compiler errors better</li>
<li>Don't reset Regex Extractor variable if default is empty</li>
<li>includecontroller.prefix property added</li>
<li>Regular Expression Extractor sets group count</li>
<li>Can now save entire screen as an image, not just the right-hand pane</li>
<li>Bug 38901 - Add optional SOAPAction header to SOAP Sampler</li>
<li>New BeanShell test elements: Timer, PreProcessor, PostProcessor, Listener</li>
<li>__split() function now clears next variable, so it can be used with ForEach Controller</li>
<li>Bug 38682 - add CallableStatement functionality to JDBC Sampler</li>
<li>Make it easier to change the RMI/Server port</li>
<li>Add property jmeter.save.saveservice.xml_pi to provide optional xml processing instruction in JTL files</li>
<li>Add bytes and URL to items that can be saved in sample log files (XML and CSV)</li>
<li>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.
</li>
<li>Change jmeter.bat DOS script so it works from any directory</li>
<li>New -N option to define nonProxyHosts from command-line</li>
<li>New -S option to define system properties from input file</li>
<li>Bug 26136 - allow configuration of local address</li>
<li>Expand tree by default when loading a test plan - can be disabled by setting property onload.expandtree=false</li>
<li>Bug 11843 - URL Rewriter can now cache the session id</li>
<li>Counter Pre-Processor now supports formatted numbers</li>
<li>Add support for HEAD PUT OPTIONS TRACE and DELETE methods</li>
<li>Allow default HTTP implementation to be changed</li>
<li>Optionally save active thread counts (group and all) to result files</li>
<li>Variables/functions can now be used in Listener file names</li>
<li>New __time() function; define START.MS/START.YMD/START.HMS properties and variables</li>
<li>Add Thread Name to Tree and Table Views</li>
<li>Add debug functions: What class, debug on, debug off</li>
<li>Non-caching Calculator - used by Table Visualiser to reduce memory footprint</li>
<li>Summary Report - similar to Aggregate Report, but uses less memory</li>
<li>Bug 39580 - recycle option for CSV Dataset</li>
<li>Bug 37652 - support for Ajp Tomcat protocol</li>
<li>Bug 39626 - Loading SOAP/XML-RPC requests from file</li>
<li>Bug 39652 - Allow truncation of labels on AxisGraph</li>
<li>Allow use of htmlparser 1.6</li>
<li>Bug 39656 - always use SOAP action if it is provided</li>
<li>Automatically include properties from user.properties file</li>
<li>Add __jexl() function - evaluates Commons JEXL expressions</li>
<li>Optionally load JMeter properties from user.properties and system properties from system.properties.</li>
<li>Bug 39707 - allow Regex match against URL</li>
<li>Add start time to Table Visualiser</li>
<li>HTTP Samplers can now extract embedded resources for any required media types</li>
</ul>

<h4>Bug fixes:</h4>
<ul>
<li>Fix NPE when no module selected in Module Controller</li>
<li>Fix NPE in XStream when no ResponseData present</li>
<li>Remove ?xml prefix when running with Java 1.5 and no x-jars</li>
<li>Bug 37117 - setProperty() function should return ""; added optional return of original setting</li>
<li>Fix CSV output time format</li>
<li>Bug 37140 - handle encoding better in RegexFunction</li>
<li>Load all cookies, not just the first; fix class cast exception</li>
<li>Fix default Cookie path name (remove page name)</li>
<li>Fixed resultcode attribute name</li>
<li>Bug 36898 - apply encoding to RegexExtractor</li>
<li>Add properties for saving subresults, assertions, latency, samplerData, responseHeaders, requestHeaders &amp; encoding</li>
<li>Bug 37705 - Synch Timer now works OK after run is stopped</li>
<li>Bug 37716 - Proxy request now handles file Post correctly</li>
<li>HttpClient Sampler now saves latency</li>
<li>Fix NPE when using JavaScript function on Test Plan</li>
<li>Fix Base Href parsing in htmlparser</li>
<li>Bug 38256 - handle cookie with no path</li>
<li>Bug 38391 - use long when accumulating timer delays</li>
<li>Bug 38554 - Random function now uses long numbers</li>
<li>Bug 35224 - allow duplicate attributes for LDAP sampler</li>
<li>Bug 38693 - Webservice sampler can now use https protocol</li>
<li>Bug 38646 - Regex Extractor now clears old variables on match failure</li>
<li>Bug 38640 - fix WebService Sampler pooling</li>
<li>Bug 38474 - HTML Link Parser doesn't follow frame links</li>
<li>Bug 36430 - Counter now uses long rather than int to increase the range</li>
<li>Bug 38302 - fix XPath function</li>
<li>Bug 38748 - JDBC DataSourceElement fails with remote testing</li>
<li>Bug 38902 - sometimes -1 seems to be returned unnecessarily for response code</li>
<li>Bug 38840 - make XML Assertion thread-safe</li>
<li>Bug 38681 - Include controller now works in non-GUI mode</li>
<li>Add write(OS,IS) implementation to TCPClientImpl</li>
<li>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"</li>
<li>Fix counter function so each counter instance is independent (previously the per-user counters were shared between instances of the function)</li>
<li>Fix TestBean Examples so that they work</li>
<li>Fix JTidy parser so it does not skip body tags with background images</li>
<li>Fix HtmlParser parser so it catches all background images</li>
<li>Bug 39252 set SoapSampler sample result from XML data</li>
<li>Bug 38694 - WebServiceSampler not setting data encoding correctly</li>
<li>Result Collector now closes input files read by listeners</li>
<li>Bug 25505 - First HTTP sampling fails with "HTTPS hostname wrong: should be 'localhost'"</li>
<li>Bug 25236 - remove double scrollbar from Assertion Result Listener</li>
<li>Bug 38234 - Graph Listener divide by zero problem</li>
<li>Bug 38824 - clarify behaviour of Ignore Status</li>
<li>Bug 38250 - jmeter.properties "language" now supports country suffix, for zh_CN and zh_TW etc</li>
<li>jmeter.properties file is now closed after it has been read</li>
<li>Bug 39533 - StatCalculator added wrong items</li>
<li>Bug 39599 - ConcurrentModificationException</li>
<li>HTTPSampler2 now handles Auto and Follow redirects correctly</li>
<li>Bug 29481 - fix reloading sample results so subresults not counted twice</li>
<li>Bug 30267 - handle AutoRedirects properly</li>
<li>Bug 39677 - allow for space in JMETER_BIN variable</li>
<li>Use Commons HttpClient cookie parsing and management. Fix various problems with cookie handling.</li>
<li>Bug 39773 - NTCredentials needs host name</li>
</ul>	
	
<h4>Other changes</h4>
<ul>
<li>Updated to HTTPClient 3.0 (from 2.0)</li>
<li>Updated to Commons Collections 3.1</li>
<li>Improved formatting of Request Data in Tree View</li>
<li>Expanded user documentation</li>
<li>Added MANIFEST, NOTICE and LICENSE to all jars</li>
<li>Extract htmlparser interface into separate jarfile to make it possible to replace the parser</li>
<li>Removed SQL Config GUI as no longer needed (or working!)</li>
<li>HTTPSampler no longer logs a warning for Page not found (404)</li>
<li>StringFromFile now callable as __StringFromFile (as well as _StringFromFile)</li>
<li>Updated to Commons Logging 1.1</li>
</ul>

<!--  ===================  -->


<hr/>
<h3>Version 2.1.1</h3>
<h4>New functionality:</h4>
<ul>
<li>New Include Controller allows a test plan to reference an external jmx file</li>
<li>New JUnitSampler added for using JUnit Test classes</li>
<li>New Aggregate Graph listener is capable of graphing aggregate statistics</li>
<li>Can provide additional classpath entries using the property user.classpath and on the Test Plan element</li>
</ul>
<h4>Bug fixes:</h4>
<ul>
<li>AccessLog Sampler and JDBC test elements populated correctly from 2.0 test plans</li>
<li>BSF Sampler now populates filename and parameters from saved test plan</li>
<li>Bug 36500 - handle missing data more gracefully in WebServiceSampler</li>
<li>Bug 35546 - add merge to right-click menu</li>
<li>Bug 36642 - Summariser stopped working in 2.1</li>
<li>Bug 36618 - CSV header line did not match saved data</li>
<li>JMeter should now run under JVM 1.3 (but does not build with 1.3)</li>
</ul>	
	

<!--  ===================  -->

<h3>Version 2.1</h3>
<h4>New functionality:</h4>
<ul>
<li>New Test Script file format - smaller, more compact, more readable</li>
<li>New Sample Result file format - smaller, more compact</li>
<li>XSchema Assertion</li>
<li>XML Tree display</li>
<li>CSV DataSet Config item</li>
<li>New JDBC Connection Pool Config Element</li>
<li>Synchronisation Timer</li>
<li>setProperty function</li>
<li>Save response data on error</li>
<li>Ant JMeter XSLT now optionally shows failed responses and has internal links</li>
<li>Allow JavaScript variable name to be omitted</li>
<li>Changed following Samplers to set sample label from sampler name</li>
<li>All Test elements can be saved as a graphics image to a file</li>
<li>Bug 35026 - add RE pattern matching to Proxy</li>
<li>Bug 34739 - Enhance constant Throughput timer</li>
<li>Bug 25052 - use response encoding to create comparison string in Response Assertion</li>
<li>New optional icons</li>
<li>Allow icons to be defined via property files</li>
<li>New stylesheets for 2.1 format XML test output</li>
<li>Save samplers, config element and listeners as PNG</li>
<li>Enhanced support for WSDL processing</li>
<li>New JMS sampler for topic and queue messages</li>
<li>How-to for JMS samplers</li>
<li>Bug 35525 - Added Spanish localisation</li>
<li>Bug 30379 - allow server.rmi.port to be overridden</li>
<li>enhanced the monitor listener to save the calculated stats</li>
<li>Functions and variables now work at top level of test plan</li>
</ul>
<h4>Bug fixes:</h4>
<ul>
<li>Bug 34586 - XPath always remained as /</li>
<li>BeanShellInterpreter did not handle null objects properly</li>
<li>Fix Chinese resource bundle names</li>
<li>Save field names if required to CSV files</li>
<li>Ensure XML file is closed</li>
<li>Correct icons now displayed for TestBean components</li>
<li>Allow for missing optional jar(s) in creating menus</li>
<li>Changed Samplers to set sample label from sampler name as was the case for HTTP</li>
<li>Fix various samplers to avoid NPEs when incomplete data is provided</li>
<li>Fix Cookie Manager to use seconds; add debug</li>
<li>Bug 35067 - set up filename when using -t option</li>
<li>Don't substitute TestElement.* properties by UDVs in Proxy</li>
<li>Bug 35065 - don't save old extensions in File Saver</li>
<li>Bug 25413 - don't enable Restart button unnecessarily</li>
<li>Bug 35059 - Runtime Controller stopped working</li>
<li>Clear up any left-over connections created by LDAP Extended Sampler</li>
<li>Bug 23248 - module controller didn't remember stuff between save and reload</li>
<li>Fix Chinese locales</li>
<li>Bug 29920 - change default locale if necessary to ensure default properties are picked up when English is selected.</li>
<li>Bug fixes for Tomcat monitor captions</li> 
<li>Fixed webservice sampler so it works with user defined variables</li>
<li>Fixed screen borders for LDAP config GUI elements</li>
<li>Bug 31184 - make sure encoding is specified in JDBC sampler</li>
<li>TCP sampler - only share sockets with same host:port details; correct the manual</li>
<li>Extract src attribute for embed tags in JTidy and Html Parsers</li>
</ul>	

<!--  ===================  -->

<h3>Version 2.0.3</h3>
<h4>New functionality:</h4>
<ul>
<li>XPath Assertion and XPath Function</li>
<li>Switch Controller</li>
<li>ForEach Controller can now loop through sets of groups</li>
<li>Allow CSVRead delimiter to be changed (see jmeter.properties)</li>
<li>Bug 33920 - allow additional property files</li>
<li>Bug 33845 - allow direct override of Home dir</li>
</ul>
<h4>Bug fixes:</h4>
<ul>
<li>Regex Extractor nested constant not put in correct place (32395)</li>
<li>Start time reset to now if necessary so that delay works OK.</li>
<li>Missing start/end times in scheduler are assumed to be now, not 1970</li>
<li>Bug 28661 - 304 responses not appearing in listeners</li>
<li>DOS scripts now handle different disks better</li>
<li>Bug 32345 - HTTP Rewriter does not work with HTTP Request default</li>
<li>Catch Runtime Exceptions so an error in one Listener does not affect others</li>
<li>Bug 33467 - __threadNum() extracted number wrongly </li>
<li>Bug 29186,33299 - fix CLI parsing of "-" in second argument</li>
<li>Fix CLI parse bug: -D arg1=arg2. Log more startup parameters.</li>
<li>Fix JTidy and HTMLParser parsers to handle form src= and link rel=stylesheet</li>
<li>JMeterThread now logs Errors to jmeter.log which were appearing on console</li>
<li>Ensure WhileController condition is dynamically checked</li>
<li>Bug 32790 ensure If Controller condition is re-evaluated each time</li>
<li>Bug 30266 - document how to display proxy recording responses</li>
<li>Bug 33921 - merge should not change file name</li>
<li>Close file now gives chance to save changes</li>
<li>Bug 33559 - fixes to Runtime Controller</li>
</ul>
<h4>Other changes:</h4>
<ul>
<li>To help with variable evaluation, JMeterThread sets "sampling started" a bit earlier (see jmeter.properties)</li>
<li>Bug 33796 - delete cookies with null/empty values</li>
<li>Better checking of parameter count in JavaScript function</li>
<li>Thread Group now defaults to 1 loop instead of forever</li>
<li>All Beanshell access is now via a single class; only need BSH jar at run-time</li>
<li>Bug 32464 - document Direct Draw settings in jmeter.bat</li>
<li>Bug 33919 - increase Counter field sizes</li>
<li>Bug 32252 - ForEach was not initialising counters</li>
</ul>

<!--  ===================  -->

<h3>Version 2.0.2</h3>
<h4>New functionality:</h4>
<ul>
<li>While Controller</li>
<li>BeanShell intilisation scripts</li>
<li>Result Saver can optionally save failed results only</li>
<li>Display as HTML has option not to download frames and images etc</li>
<li>Multiple Tree elements can now be enabled/disabled/copied/pasted at once</li>
<li>__split() function added</li>
<li>(28699) allow Assertion to regard unsuccessful responses - e.g. 404 - as successful</li>
<li>(29075) Regex Extractor can now extract data out of http response header as well as the body</li>
<li>__log() functions can now write to stdout and stderr</li>
<li>URL Modifier can now optionally ignore query parameters</li>
</ul>
<h4>Bug fixes:</h4>
<ul>
<li>If controller now works after the first false condition (31390)</li>
<li>Regex GUI was losing track of Header/Body checkbox (29853)</li>
<li>Display as HTML now handles frames and relative images</li>
<li>Right-click open replaced by merge</li>
<li>Fix some drag and drop problems</li>
<li>Fixed foreach demo example so it works</li>
<li>(30741) SSL password prompt now works again </li>
<li>StringFromFile now closes files at end of test; start and end now optional as intended</li>
<li>(31342) Fixed text of SOAP Sampler headers</li>
<li>Proxy must now be stopped before it can be removed (25145)</li>
<li>Link Parser now supports BASE href (25490)</li>
<li>(30917) Classfinder ignores duplicate names</li>
<li>(22820) Allow Counter value to be cleared</li>
<li>(28230) Fix NPE in HTTP Sampler retrieving embedded resources</li>
<li>Improve handling of StopTest; catch and log some more errors</li>
<li>ForEach Controller no longer runs any samples if first variable is not defined</li>
<li>(28663) NPE in remote JDBC execution</li>
<li>(30110) Deadlock in stopTest processing</li>
<li>(31696) Duration not working correctly when using Scheduler</li>
<li>JMeterContext now uses ThreadLocal - should fix some potential NPE errors</li>
</ul>
<h3>Version 2.0.1</h3>
<p>Bug fix release. TBA.</p>
<h3>Version 2.0</h3>
<ul>
	<li>HTML parsing improved; now has choice of 3 parsers, and most embedded elements can now be detected and downloaded.</li>
<li>Redirects can now be delegated to URLConnection by defining the JMeter property HTTPSamper.delegateRedirects=true (default is false) </li>
<li>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 </li>
<li>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. </li>
<li>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) </li>
<li>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 </li>
<li>Proxy server has option to skip recording browser headers </li>
<li>Proxy restart works better (stop waits for daemon to finish) </li>
<li>Scheduler ignores start if it has already passed </li>
<li>Scheduler now has delay function </li>
<li>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. </li>
<li>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 </li>
<li>Test Plan has a comment field</li>
	
	<li>Help Page can now be pushed to background</li>
	<li>Separate Function help page</li>
	<li>New / amended functions</li>
	<ul>
	  <li>__property() and __P() functions</li>
	  <li>__log() and __logn() - for writing to the log file</li>
      <li>_StringFromFile can now process a sequence of files, e.g. dir/file01.txt, dir/file02.txt etc </li>
      <li>_StringFromFile() funtion can now use a variable or function for the file name </li>
	</ul>
	<li>New / amended Assertions</li>
	<ul>
        <li>Response Assertion now works for URLs, and it handles null data better </li>
        <li>Response Assertion can now match on Response Code and Response message as well </li>
		<li>HTML Assertion using JTidy to check for well-formed HTML</li>
	</ul>
	<li>If Controller (not fully functional yet)</li>
	<li>Transaction Controller (aggregates the times of its children)</li>
	<li>New Samplers</li>
		<ul>
			<li>Basic BSF Sampler (optional)</li>
			<li>BeanShell Sampler (optional, needs to be downloaded from www.beanshell.org</li>
			<li>Basic TCP Sampler</li>
		</ul>
     <li>Optionally start BeanShell server (allows remote access to JMeter variables and methods) </li>
</ul>
<h3>Version 1.9.1</h3>
<p>TBA</p>
<h3>Version 1.9</h3>
<ul>
<li>Sample result log files can now be in CSV or XML format</li>
<li>New Event model for notification of iteration events during test plan run</li>
<li>New Javascript function for executing arbitrary javascript statements</li>
<li>Many GUI improvements</li>
<li>New Pre-processors and Post-processors replace Modifiers and Response-Based Modifiers. </li>
<li>Compatible with jdk1.3</li>
<li>JMeter functions are now fully recursive and universal (can use functions as parameters to functions)</li>
<li>Integrated help window now supports hypertext links</li>
<li>New Random Function</li>
<li>New XML Assertion</li>
<li>New LDAP Sampler (alpha code)</li>
<li>New Ant Task to run JMeter (in extras folder)</li>
<li>New Java Sampler test implementation (to assist developers)</li>
<li>More efficient use of memory, faster loading of .jmx files</li>
<li>New SOAP Sampler (alpha code)</li>
<li>New Median calculation in Graph Results visualizer</li>
<li>Default config element added for developer benefit</li>
<li>Various performance enhancements during test run</li>
<li>New Simple File recorder for minimal GUI overhead during test run</li>
<li>New Function: StringFromFile - grabs values from a file</li>
<li>New Function: CSVRead - grabs multiple values from a file</li>
<li>Functions now longer need to be encoded - special values should be escaped 
with "\" if they are literal values</li>
<li>New cut/copy/paste functionality</li>
<li>SSL testing should work with less user-fudging, and in non-gui mode</li>
<li>Mailer Model works in non-gui mode</li>
<li>New Througput Controller</li>
<li>New Module Controller</li>
<li>Tests can now be scheduled to run from a certain time till a certain time</li>
<li>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</li>
<li>ThreadGroups can now be run either serially or in parallel (default)</li>
<li>New command line options to override properties</li>
<li>New Size Assertion</li>

</ul>

<h3>Version 1.8.1</h3>
<ul>
<li>Bug Fix Release.  Many bugs were fixed.</li>
<li>Removed redundant "Root" node from test tree.</li>
<li>Re-introduced Icons in test tree.</li>
<li>Some re-organization of code to improve build process.</li>
<li>View Results Tree has added option to view results as web document (still buggy at this point).</li>
<li>New Total line in Aggregate Listener (still buggy at this point).</li>
<li>Improvements to ability to change JMeter's Locale settings.</li>
<li>Improvements to SSL Manager.</li>
</ul>

<h3>Version 1.8</h3>
<ul>
<li>Improvement to Aggregate report's calculations.</li>
<li>Simplified application logging.</li>
<li>New Duration Assertion.</li>
<li>Fixed and improved Mailer Visualizer.</li>
<li>Improvements to HTTP Sampler's recovery of resources (sockets and file handles).</li>
<li>Improving JMeter's internal handling of test start/stop.</li>
<li>Fixing and adding options to behavior of Interleave and Random Controllers.</li>
<li>New Counter config element.</li>
<li>New User Parameters config element.</li>
<li>Improved performance of file opener.</li>
<li>Functions and other elements can access global variables.</li>
<li>Help system available within JMeter's GUI.</li>
<li>Test Elements can be disabled.</li>
<li>Language/Locale can be changed while running JMeter (mostly).</li>
<li>View Results Tree can be configured to record only errors.</li>
<li>Various bug fixes.</li>
</ul>

<b>Changes: for more info, contact <a href="mailto:mstover1@apache.org">Michael Stover</a></b>
<h3>Version 1.7.3</h3>
<ul>
<li>New Functions that provide more ability to change requests dynamically during test runs.</li>
<li>New language translations in Japanese and German.</li>
<li>Removed annoying Log4J error messages.</li>
<li>Improved support for loading JMeter 1.7 version test plan files (.jmx files).</li>
<li>JMeter now supports proxy servers that require username/password authentication.</li>
<li>Dialog box indicating test stopping doesn't hang JMeter on problems with stopping test.</li>
<li>GUI can run multiple remote JMeter servers (fixes GUI bug that prevented this).</li>
<li>Dialog box to help created function calls in GUI.</li>
<li>New Keep-alive switch in HTTP Requests to indicate JMeter should or should not use Keep-Alive for sockets.</li>
<li>HTTP Post requests can have GET style arguments in Path field.  Proxy records them correctly now.</li>
<li>New User-defined test-wide static variables.</li>
<li>View Results Tree now displays more information, including name of request (matching the name
in the test tree) and full request and POST data.</li>
<li>Removed obsolete View Results Visualizer (use View Results Tree instead).</li>
<li>Performance enhancements.</li>
<li>Memory use enhancements.</li>
<li>Graph visualizer GUI improvements.</li>
<li>Updates and fixes to Mailer Visualizer.</li>
</ul>
 
<h3>Version 1.7.2</h3>
<ul>
<li>JMeter now notifies user when test has stopped running.</li>
<li>HTTP Proxy server records HTTP Requests with re-direct turned off.</li>
<li>HTTP Requests can be instructed to either follow redirects or ignore them.</li>
<li>Various GUI improvements.</li>
<li>New Random Controller.</li>
<li>New SOAP/XML-RPC Sampler.</li>
</ul>

<h3>Version 1.7.1</h3>
<ul>
<li>JMeter's architecture revamped for a more complete separation between GUI code and
test engine code.</li>
<li>Use of Avalon code to save test plans to XML as Configuration Objects</li>
<li>All listeners can save data to file and load same data at later date.</li>
</ul>

<h3>Version 1.7Beta</h3> 
<ul> 
	<li>Better XML support for special characters (Tushar Bhatia) </li> 
	<li>Non-GUI functioning  &amp; Non-GUI test plan execution  (Tushar Bhatia)</li> 
	<li>Removing Swing dependence from base JMeter classes</li> 
	<li>Internationalization (Takashi Okamoto)</li> 
	<li>AllTests bug fix (neth6@atozasia.com)</li> 
	<li>ClassFinder bug fix (neth6@atozasia.com)</li> 
	<li>New Loop Controller</li> 
	<li>Proxy Server records HTTP samples from browser 
		(and documented in the user manual)</li> <li>Multipart Form support</li> 
	<li>HTTP Header class for Header customization</li> 
	<li>Extracting HTTP Header information from responses (Jamie Davidson)</li> 
	<li>Mailer Visualizer re-added to JMeter</li> 
	<li>JMeter now url encodes parameter names and values</li> 
	<li>listeners no longer give exceptions if their gui's haven't been initialized</li> 
	<li>HTTPS and Authorization working together</li> 
	<li>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) </li> 
	<li>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)</li>  
	<li>New Ramp-up feature (Jonathan O'Keefe)</li> 
	<li>New visualizers (Neth)</li> 
	<li>New Assertions for functional testing</li> 
</ul>  

<h3>Version 1.6.1</h3> 
<ul> 
	<li>Fixed saving and loading of test scripts (no more extra lines)</li> 
	<li>Can save and load special characters (such as &quot;&amp;&quot; and &quot;&lt;&quot;).</li> 
	<li>Can save and load timers and listeners.</li> 
	<li>Minor bug fix for cookies (if you cookie value 
		contained an &quot;=&quot;, then it broke).</li> 
	<li>URL's can sample ports other than 80, and can test HTTPS, 
		provided you have the necessary jars (JSSE)</li> 
</ul> 

<h3>Version 1.6 Alpha</h3> 
<ul> 
	<li>New UI</li> 
	<li>Separation of GUI and Logic code</li> 	
	<li>New Plug-in framework for new modules</li> 
	<li>Enhanced performance</li> 
	<li>Layering of test logic for greater flexibility</li> 
	<li>Added support for saving of test elements</li> 
	<li>Added support for distributed testing using a single client</li> 

</ul> 
<h3>Version 1.5.1</h3> 
<ul> 
	<li>Fixed bug that caused cookies not to be read if header name case not as expected.</li> 
	<li>Clone entries before sending to sampler - prevents relocations from messing up 
		information across threads</li> 
	<li>Minor bug fix to convenience dialog for adding paramters to test sample.  
		Bug prevented entries in dialog from appearing in test sample.</li> 
	<li>Added xerces.jar to distribution</li> 
	<li>Added junit.jar to distribution and created a few tests.</li> 
	<li>Started work on new framework.  New files in cvs, but do not effect program yet.</li> 
	<li>Fixed bug that prevent HTTPJMeterThread from delaying according to chosen timer.</li> 
</ul>  
<p> 
<h3>Version 1.5</h3> 
<ul>   
	<li>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.</li>   
	<li>The UI has been updated to make entering test samples more convenient.</li>   
	<li>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.</li>   
	<li>It is now possible to save and load test samples.</li>   
	<li>....and many more minor changes/improvements...</li> 
</ul> 
</p> 
<p> 
<b>Apache JMeter 1.4.1-dev</b> (<a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>)  
<ul>
   <li>Cleaned up URLSampler code after tons of patches for better readability. (SM)</li>
   <li>Made JMeter send a special &quot;user-agent&quot; identifier. (SM)</li>
   <li>Fixed problems with redirection not sending cookies and authentication info and removed
     a warning with jikes compilation. Thanks to <a href="mailto:wtanaka@yahoo.com">Wesley
     Tanaka</a> for the patches (SM)</li>
   <li>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 <a
     href="mailto:gjohnson@investlearning.com">Graham Johnson</a> for the patches (SM)</li>
   <li>Fixed a problem with POST actions. Thanks to <a href="mailto:sschaub@bju.edu">Stephen
     Schaub</a> for the patch (SM)</li>
 </ul>
 </p>
 <p>
 <b>Apache JMeter 1.4</b> - Jul 11 1999 (<a href="mailto:cimjpno@be.ibm.com">Jean-Pierre Norguet</a>,
 <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>)
  <ul>
   <li>Fixed a problem with POST actions. Thanks to <a href="mailto:bburns@labs.gte.com">Brendan
     Burns</a> for the patch (SM)</li>
   <li>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)</li>
   <li>Added the simple Spline sample visualizer (JPN)</li> 
</ul> </p>
  <p><b>Apache JMeter 1.3</b> - Apr 16 1999
  (<a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>,
 <a href="mailto:luta.raphael@networks.vivendi.net">Raphaël Luta</a>)
<ul>
   <li>Run the Garbage Collector and run finalization before starting to sampling to ensure
     same state every time (SM)</li>
   <li>Fixed some NullPointerExceptions here and there (SM)</li>
   <li>Added HTTP authentication capabilities (RL)</li>
   <li>Added windowed sample visualizer (SM)</li>
   <li>Fixed stupid bug for command line arguments. Thanks to <a
     href="mailto:jbracer@infoneers.com">Jorge Bracer</a> for pointing this out (SM)</li> 
</ul> </p>
  <p><b>Apache JMeter 1.2</b> - Mar 17 1999 (<a href="mailto:sdowd@arcmail.com">Sean Dowd</a>, 
<a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>)  
<ul>
   <li>Integrated cookie capabilities with JMeter (SM)</li>
   <li>Added the Cookie manager and Netscape file parser (SD)</li>
   <li>Fixed compilation error for JDK 1.1 (SD)</li> </ul> </p>  
<p> <b>Apache JMeter 1.1</b> - Feb 24 1999 (<a href="mailto:sdowd@arcmail.com">Sean Dowd</a>, 
<a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>)  
<ul>
   <li>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 <a
     href="mailto:chatfield@evergreen.com">Simon Chatfield</a> for the very nice suggestions
     and code examples.</li>
   <li>Removed the TextVisualizer and replaced it with the much more useful FileVisualizer (SM)</li>
   <li>Added the known bug list (SM)</li>
   <li>Removed the Java Apache logo (SM)</li>
   <li>Fixed a couple of typos (SM)</li>
   <li>Added UNIX makefile (SD)</li> </ul> </p> 
<p> <b>Apache JMeter 1.0.1</b> - Jan 25 1999 (<a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>)  
<ul>
   <li>Removed pending issues doc issues (SM)</li>
   <li>Fixed the unix script (SM)</li>
   <li>Added the possibility of running the JAR directly using &quot;java -jar
     ApacheJMeter.jar&quot; with Java 2 (SM)</li>
   <li>Some small updates: fixed Swing location after Java 2(tm) release, license update and
     small cleanups (SM)</li> 
</ul> </p> 
<p> <b>Apache JMeter 1.0</b> - Dec 15 1998 (<a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>) 
<ul>
   <li>Initial version. (SM)</li> 
</ul> </p> 
</section> 
</body> 
</document>
