<?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>Changes</title>   
</properties> 
<body> 
<section name="Changes"> 

<note>
<b>This page details the changes made in the current version only.</b>
<br></br>
Earlier changes are detailed in the <a href="changes_history.html">History of Previous Changes</a>.
</note>

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

<h2>Version 2.3.2</h2>

<h3>Summary of main changes</h3>

<h4>Bug fixes</h4>
<p>
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:
<ul>
<li>image/*</li>
<li>audio/*</li>
<li>video/*</li>
</ul>
All other types are now assumed to be text.
</p>

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

<h4>Improvements</h4>

<p>
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 <b>proxy.binary.types</b>.
</p>

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

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

<p>CSV fields in JTL files can now contain delimiters. 
CSV and XML files can now contain additional variables (define the JMeter property <b>sample_variables</b>).</p>

<p>Response Assertion can now match on substrings (i.e. not regular expression). 
Regex extractor can operate on variables.</p>

<p>
XPath processing is improved; Tidy errors are handled better.
</p>

<p>Save Table Data buttons added to Summary and Aggregate reports to allow easy saving of the calculated data.</p>

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

<p>
A simple HTTP Cache Manager has been added. This needs further development.
</p>

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

<p>
MailReader sampler now supports POP3S and IMAPS protocols. Individual mails are now added as sub-samples.
</p>

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

<p>Number of classes loaded in non-GUI mode is much reduced.</p>

<h3>Known bugs</h3>

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

<p>Once Only controller behaves OK under a Thread Group or Loop Controller,
but otherwise its behaviour is not consistent (or clearly specified).</p>

<p>
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. 
</p>
<h3>Incompatible changes</h3>
<ul>
<li>
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.
</li>
<li>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.</li>
<li>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)
</li>
<li>
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 '.
</li>
<li>
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.
</li>
</ul>

<h3>Bug fixes</h3>
<ul>
<li>Check that the CSV delimiter is reasonable.</li>
<li>Fix Switch Controller to work properly with functions and variables</li>
<li>Bug 44011 - application/soap+xml not treated as a text type</li>
<li>Bug 43427 - Simple Controller is only partly executed in While loop</li>
<li>Bug 33954 - Stack Overflow in If/While controllers (may have been fixed previously)</li>
<li>Bug 44022 - Memory Leak when closing test plan</li>
<li>Bug 44042 - Regression in Cookie Manager (Bug introduced in 2.3.1)</li>
<li>Bug 41028 - JMeter server doesn't alert the user when the host is defined as a loopback address</li>
<li>Bug 44142 - Function __machineName causes NPE if parameters are omitted.</li>
<li>Bug 44144 - JMS point-to-point: request response test does not work</li>
<li>Bug 44314 - Not possible to add more than one SyncTimer</li>
<li>Capture Tidy console error output and log it</li>
<li>Fix problems using Tidy(tolerant parser) in XPath Assertion and XPath Extractor</li>
<li>Bug 44374 - improve timer calculation</li>
<li>Regular Expression Extractor now deletes all stale variables from previous matches.</li>
<li>Bug 44707 - Running remote test changes internal test plan</li>
<li>Bug 44625 - Cannot have two or more FTP samplers with different "put" and "get" actions</li>
<li>Bug 40850 - BeanShell memory leak</li>
<li>Ensure ResponseCode and ResponseMessage are set for successful JDBC samples</li>
<li>FTPSampler now detects and reports failure to open the remote file</li>
<li>Class directories defined in search_paths and user.classpath no longer need trailing "/"</li>
<li>Bug 44852 SOAP/ XML-RPC Request does not show Request details in View Results Tree</li>
<li>WebService(SOAP) Sampler ResponseData now includes the EOLs sent by server</li>
<li>Bug 44910 - close previous socket (if any) in TCP Sampler</li>
<li>Bug 44912 - Filter not working in Log Parser</li>
<li>The BeanShell and BSF component documentation made some incorrect references to the "SampleResponse" object;
this has been corrected to "SampleResult"</li>
<li>BSF Sampler now works properly with Javascript</li>
<li>Test Action "Stop Test" now works</li>
<li>Bug 42833 - Argument class uses LinkedHashMap in getArgumentsAsMap() to preserve ordering</li>
<li>Bug 45093 - SizeAssertion did not call getBytes()</li>
<li>Bug 45007 - Rewrite Location headers when using Proxy HTTPS spoofing</li>
<li>Use CRLF rather than LF in Proxy when returning headers to the client</li>
<li>Bug 45007 - fix content length header if content may have been changed</li>
</ul>

<h3>Improvements</h3>
<ul>
<li>CSV files can now handle fields with embedded delimiters.</li>
<li>longSum() function added</li>
<li>Bug 43382 - configure Tidy output (warnings, errors) for XPath Assertion and Post-Processor</li>
<li>Bug 43984 - trim spaces from port field</li>
<li>Add optional comment to __log() function</li>
<li>Make Random function variable name optional</li>
<li>Reduce class loading in non-GUI mode by only looking for Functions in class names
that contain '.functions.' and don't contain '.gui.'</li>
<li>Bug 43379 - Switch Controller now supports selection by name as well as number</li>
<li>Can specify list of variable names to be written to JTL files (CSV and XML format)</li>
<li>Now checks that the remoteStart options -r and -R are only used with non_GUI -n option</li>
<li>Bug 44184 - Allow header to be saved with Aggregate Graph data</li>
<li>Added "Save Table Data" buttons to Aggregate and Summary Reports - save table as CSV format with header</li>
<li>Allow most functions to be used on the Test Plan. 
Note __evalVar(), __split() and __regex() cannot be used on the Test Plan.</li>
<li>Allow Global properties to be loaded from a file, e.g. -Gglobal.properties</li>
<li>Add "Substring" option to Response Assertion</li>
<li>Bug 44378 - Turkish localisation</li>
<li>Add optional output variable name to Jexl function</li>
<li>Add application/vnd.wap.xhtml+xml as a text type</li>
<li>Add means to override maximum display size in View Results Tree - set the property: view.results.tree.max_size</li>
<li>Use Tidy to display XML in View Results Tree Listener (avoids fetching DTDs)</li>
<li>Bug 44487 - German translation</li>
<li>
As a special case, if the HTTP Sampler path starts with "http://" or "https://" then this is used as the full URL.
</li>
<li>Bug 44575 - Result Saver can now save only successful results</li>
<li>Bug 44650 - CSV Dataset now handles quoted column values</li>
<li>Bug 44600 - 1-ms resolution timer when running with Java 1.5+</li>
<li>Bug 44632 - Text input enhancement to FTP Sampler</li>
<li>Bug 42204 - add thread group name to Aggregate and Summary reports</li>
<li>FTP Sampler sets latency = time to login</li>
<li>FTP Sampler sets a URL if it can</li>
<li>Bug 41921 - add option for samplers to store MD5 of response; done for HTTP Samplers.</li>
<li>Regex Function can now also be applied to a variable rather than just the previous sample result.</li>
<li>Remove HTML Parameter Mask,HTTP User Parameter Modifier from menus as they are deprecated</li>
<li>Bug 44807 - allow session ids to be terminated by backslash</li>
<li>Bug 44784 - allow for broken server returning additional charset</li>
<li>Added TESTSTART.MS property / variable = test start time in milliseconds</li>
<li>Add POP3S and IMAPS protocols to Mail Reader Sampler.</li>
<li>Mail Reader Sampler now creates a sub-sample for each mail.</li>
<li>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)
</li>
<li>JUnit sampler GUI now also finds Test classes defined in user.classpath</li>
<li>
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 '
</li>
<li>Webservice(SOAP) Sampler can now load local WSDL files using the file: protocol</li>
<li>Bug 44872 - Add "All Files" filter to Open File dialogs</li>
<li>Mirror server can now be run independently (mirror-server.cmd and mirror-server.sh)</li>
<li>Bug 19128 - Added multiple file POST support to HTTP Samplers</li>
<li>Allow use of special name LAST to mean the last test run; applies to -t, -l, -j flags</li>
<li>Bug 44418/42178 - CSV Dataset file handling improvements</li>
<li>Give BeanShell, Javascript and Jexl functions access to JMeter properties via the "props" object</li>
<li>Give BSF Sampler access to JMeter Properties via "props" object</li>
<li>Add Jexl as a supported BSF Sampler language</li>
<li>Give Beanshell test elements access to JMeter Properties via "props" object</li>
<li>Added BSF PreProcessor, PostProcessor and Assertion test elements</li>
<li>All BSF elements now have access to System.out via the variable "OUT"</li>
<li>Summariser updated to handle variable names</li>
<li>Synchronisation added to Summary and Aggregate Report to try to prevent occasional lost samples</li>
<li>Bugs 44808, 39641 - Proxy support for binary requests</li>
<li>Bug 28502 - HTTP Resource Cache</li>
</ul>

<h3>Non-functional changes</h3>
<ul>
<li>Better handling of MirrorServer startup problems and improved unit test.</li>
<li>Build process now detects missing 3rd party libraries and reports need for both binary and source archives</li>
<li>Skip BeanShell tests if jar is not present</li>
<li>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</li>
<li>Use properties for log/logn function descriptions</li>
<li>Check that all jmx files in the demos directory can be loaded OK</li>
<li>Update copyright to 2008; use copy tag instead of numeric character in HTML output</li>
<li>Methods called from constructors must not be overridable: make GUI init methods private</li>
<li>Make static variables final if possible</li>
<li>Split changes into current and previous</li>
</ul>
</section> 
</body> 
</document>
