History of Previous Changes

This page details the changes made in previous versions only.
Current changes are detailed in Changes.

Changes sections are chronologically ordered from top (most recent) to bottom (least recent)

Version 3.2

Summary

New and Noteworthy

IMPORTANT CHANGES

JMeter now requires Java 8. Ensure you use the most up to date version.

JMeter logging has been migrated to SLF4J and Log4j 2. This affects configuration and 3rd party plugins, see below "Logging changes".

Starting with JMeter version 3.2 the number of results in View Results Tree is limited by default to 500 entries. If you want more entries, you have to set the property view.results.tree.max_results to a higher value, or to 0, if you don't want to impose any limit. You can set the property in bin/user.properties. More info might be found here.

Core improvements

UX improvements

Report/Dashboard improvements

Documentation improvements

Incompatible changes

Removed elements or functions

Logging changes

JMeter logging has been migrated to SLF4J and Log4j 2. This affects logging configuration and 3rd party plugins (if they use JMeter logging). The following sections describe what changes need to be made.

Setting the logging level and log file

The default logging level can be changed on the command-line using the -L parameter. Likewise the -l parameter can be used to change the name of the log file. However the log_level properties no longer work.

The default logging levels and file name are defined in the log4j2.xml configuration file in the launch directory (usually JMETER_HOME/bin)

If you need to change the level programmatically from Groovy code or Beanshell, you need to do the following:
    import org.apache.logging.log4j.core.config.Configurator;
    ⋮
    final String loggerName = te.getClass().getName(); // te being a JMeter class
    Configurator.setAllLevels(loggerName, Level.DEBUG); 
    

Changes to 3rd party plugin logging

3rd party plugins should migrate their logging code from logkit to slf4j. This is fairly easy and can be done by replacing:
        import org.apache.jorphan.logging.LoggingManager;
        import org.apache.log.Logger;
        ⋮
        private static final Logger log = LoggingManager.getLoggerForClass();
    
By:
        import org.slf4j.Logger;
        import org.slf4j.LoggerFactory;
        ⋮
        private static final Logger log = LoggerFactory.getLogger(YourClassName.class);
    

Improvements

HTTP Samplers and Test Script Recorder

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

Report / Dashboard

General

Non-functional changes

Bug fixes

HTTP Samplers and Test Script Recorder

Other Samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

Report / Dashboard

General

Thanks

We thank all contributors mentioned in bug and improvement sections above:

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:

Apologies if we have omitted anyone else.

Known problems and workarounds

Version 3.1

Summary

New and Noteworthy

Improve Report/Dashboard

The Dashboard has been improved with 3 new graphs and 1 summary table:

New Metrics

A new sent_bytes metric has been introduced which reports the bytes sent to server.
Another metric connect_time has been enabled by default in this version

Handling Big responses

JMeter is now able to handle in terms of metrics responses bigger than 2GB, limit has been increased to 9223372 TB.
To handle such big responses, it can also now truncate part of the response to avoid overflooding memory. See httpsampler.max_bytes_to_store_per_request property.

New __groovy function

Introduce a new function __groovy that enables Groovy functions. This can be handy, as JavaScript can be quite slow (same for BeanShell), when used in highly concurrent test plans.

Use Groovy as default for JSR-223 elements

Groovy is now set as the default language for JSR-223 elements. If you want to use another of the supported language, you have to make an explicit choice.

By default Cache compiled script if available is not checked by default although we advise you to check it and ensure you don't use ${varName} syntax to access JMeter variables but vars.get("varName") instead.

Formatted HTML source view in Results Tree View

The HTML source code in the Results Tree View can now be viewed formatted. This is extremely useful, if the code of the webpage has been stripped of all superfluous whitespace.

New formatted HTML source view
New formatted HTML source view

Ability to update all timers in Test plan with a new property

A new property timer.factor=1.0f has been introduced which allows you to multiply pause times computed by Gaussian, Uniform and Poisson Timers by it. This allows you to update Think Times from one place and let you gain productivity.

Core improvements

Documentation improvements

Incompatible changes

Deprecated and removed elements or functions

These elements do not appear anymore in the menu, if you need them modify not_in_menu property. The JMeter team advises not to use them anymore and migrate to their replacement.

Improvements

HTTP Samplers and Test Script Recorder

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

Report / Dashboard

General

Non-functional changes

Bug fixes

HTTP Samplers and Test Script Recorder

Other Samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Thanks

We thank all contributors mentioned in bug and improvement sections above:

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:

Apologies if we have omitted anyone else.

Known problems and workarounds

Version 3.0

Summary

New and Noteworthy

Test plan creation and debugging improvements

New Search Feature in View Results Tree to allow searching for text / regexp in Request/Responses/Headers/Cookies/… This will ease correlation and Test plans creation

New JSON Post Processor to better extract data from JSON content using user friendly JSON-PATH syntax

JSON is now a first class citizen in JMeter with the introduction of a new JSONPath post processor. This post processor is very similar to Regular Expression Post Processor but is well suited for JSON code. It is based on Jayway JSON Path library

New validation feature, in one click run a selection of Thread Groups with 1 user, no pause and 1 iteration

JSR223 Test Elements do not require a Cache Compilation Key anymore

Just check Cache compiled script if available checkbox and the elements (Pre-Processor, Post-Processor, Assertions, Listeners, …) will pre-compile the script and cache the compiled code if the underlying language supports it

Nashorn can now be used as Javascript engine providing better performance and easier usage

To enable Nashorn, you need to set in user.properties:

javascript.use_rhino=false

Nashorn can be used with Java 8 in the following elements:

Jexl3 has been integrated. It provides new scripting features and much better documentation

JEXL3 can now be used thanks to a new function __jexl3. JEXL is a language very similar to JSTL.

Simplified HTTP Request UI

A new "Advanced" tab has been added to HTTP Request to simplify configuration. The file upload feature has been moved into a dedicated tab. This increases the space available for parameters in UI and simplifies the UX.

HTTP Request Defaults improvements

You can now configure Source Address (IP Spoofing like feature) and "Save response as MD5 hash" in Advanced Tab

Reporting improvements

New Reporting Feature generating dynamic Graphs in HTML pages (APDEX, Summary report and Graphs)

A dynamic HTML report can now be generated either at the end of a load test or from a result file whenever you want. See Generating dashboard for more details. This report provides the following metrics:

GraphiteBackendListener has a new Server Hits metric

Summariser displays a more readable duration

Now duration are display in the format hours:minutes:seconds

Generate Summary Results +      1 in 00:00:01 =    1.7/s Avg:     1 Min:     1 Max:     1 Err:     0 (0.00%) Active: 1 Started: 1 Finished: 0
Generate Summary Results +    138 in 00:00:09 =   16.2/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%) Active: 9 Started: 9 Finished: 0
Generate Summary Results =    139 in 00:00:09 =   15.3/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%)
Generate Summary Results +    467 in 00:00:10 =   47.0/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%) Active: 19 Started: 19 Finished: 0
Generate Summary Results =    606 in 00:00:19 =   31.9/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%)
⋮
Generate Summary Results +   1662 in 00:00:10 =  166.1/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%) Active: 50 Started: 50 Finished: 0
Generate Summary Results =  28932 in 00:03:19 =  145.4/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%)
Generate Summary Results +   1664 in 00:00:10 =  166.4/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%) Active: 50 Started: 50 Finished: 0
Generate Summary Results =  30596 in 00:03:29 =  146.4/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%)
Generate Summary Results +   1661 in 00:00:10 =  166.1/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%) Active: 50 Started: 50 Finished: 0
Generate Summary Results =  32257 in 00:03:39 =  147.3/s Avg:     0 Min:     0 Max:     1 Err:     0 (0.00%)

BackendListener now allows you to define sampler list as a regular expression

You can now use a regular expression to select the samplers you want to filter. Use parameter: useRegexpForSamplersList=true and put a regex in parameter samplersList

Protocols and Load Testing improvements

Migration to HttpClient 4.5.2 has been started. Although not completely finished, it improves many areas in JMeter

Migration to HttpClient 4.5.2 improves the following fields of JMeter:

Parallel Downloads is now realistic and scales much better:

Introduction of Sample Timeout feature

This new Sample Timeout Pre-Processor allows you to apply a Timeout on the elements that are in its scope. In the screenshot below the 10 second timeout applies to the Debug Sampler and HTTP Request elements.

JDBC request now uses DBCP2 pool

JDBC Request and JDBC Connection Configuration have been updated to replace old Excalibur Pool by Apache Commons DBCP2 pool. As a consequence properties have been migrated to equivalent when available and UI has been updated. Note that unlike Excalibur, Commons DBCP uses the validation query when creating the pool. So make sure the query is valid. The default query suits many databases, but not all - for example Oracle requires 'SELECT 1 FROM DUAL' or similar.

UX Improvements:

Better display in HiDPI screens

See JMeter with a HiDPI screen on Linux or Windows in Hints and Tips section in user manual

New Icon look and Logo

JMeter has a new Logo created by Felix Schumacher.
Icons have also been refreshed to give a more modern style and make them more meaningful

Lots of fixes of annoying little bugs

Around 40 UI fixes have been made to either fix buggy, confusing behaviour or simplify usage by not allowing incompatible options to be selected

Improved Thread Group UI and related actions (Start, Start No Timers, Validate)

Creating and testing a Test Plan before Load Test has been much simplified by allowing you to only start a selection of Thread Group, start them without applying Timers (thus gaining time) or start them using a new Validation mode. This validation mode allows you to start a Thread Group (without modifying it) with 1 thread, 1 iteration and without applying timers. This validation mode can be customized.

New shortcuts

Core improvements

Configuration simplification with better defaults

Default values for many properties have been modified to make JMeter configuration optimal Out of the box. Read "Incompatible changes" section for more details.

Apache Groovy bundled with JMeter

Apache Groovy, the well-known JVM scripting language, is now bundled with Apache JMeter in lib folder. This allows you to use it immediately through JSR223 Elements by selecting the Groovy language.

Superfluous and old properties removed

Old properties that existed to maintain backward compatibility or to offer some superfluous customization have been removed. Read "Incompatible changes" section to see which properties have been removed.

Code and documentation improvements

Improvements to unit tests

Dependencies refresh

Deprecated Libraries dropped or replaced by up to date ones:

Slf4j can now be used within Plugins and core code

You can now use SLF4J logging wrapper in your custom plugins or org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient subclasses.

Incompatible changes

Deprecated and removed elements

Improvements

HTTP Samplers and Test Script Recorder

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

Bug fixes

HTTP Samplers and Test Script Recorder

Other Samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Thanks

We thank all contributors mentioned in bug and improvement sections above:

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:

Apologies if we have omitted anyone else.

Known problems and workarounds

Version 2.13

Summary

New and Noteworthy

New Elements

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 or 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
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:

GUI Improvements

Module Controller

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, toggle, etc.). Three sizes are now available for the icons: 22x22, 32x32 and 48x48.
The property to define your preferred 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

Improvements

HTTP Samplers and Test Script Recorder

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

Bug fixes

HTTP Samplers and Test Script Recorder

Other Samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

General

Thanks

We thank all contributors mentioned in bug and improvement sections above:


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: Apologies if we have omitted anyone else.

Known bugs

Version 2.12

Summary

New and Noteworthy

Java 8 support

Now, JMeter 2.12 is compliant with Java 8.

New Elements

Critical Section Controller

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:

Core Improvements

Smarter Recording of Http Test Plans

Test Script Recorder has been improved in many ways

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 conditional 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

Incompatible changes

Bug fixes

HTTP Samplers and Test Script Recorder

Other Samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Improvements

HTTP Samplers and Test Script Recorder

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

Thanks

We thank all contributors mentioned in bug and improvement sections above:


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: Apologies if we have omitted anyone else.

Version 2.11

Summary

New and Noteworthy

HTTP(S) Test Script Recorder improvements

Following improvements have been made since major changes introduced in JMeter 2.10 on HTTP(S) Test Script Recorder:

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

Incompatible changes

Bug fixes

HTTP Samplers and Test Script Recorder

Other Samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Improvements

HTTP Samplers and Proxy

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

Thanks

We thank all contributors mentioned in bug and improvement sections above:


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: Apologies if we have omitted anyone else.

Version 2.10

Summary

New and Noteworthy

Core Improvements

New Performance improvements

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".

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".

Distributed testing has been improved

ModuleController has been improved to better handle changes to referenced controllers

Improved class loader configuration, see Bug 55503

Best-practices section has been improved, ensure you read it to get the most out of JMeter

See Best Practices

GUI and ergonomy Improvements

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

Incompatible changes

Bug fixes

HTTP Samplers and Proxy

Other Samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Improvements

HTTP Samplers and Proxy

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

Thanks

We thank all contributors mentioned in bug and improvement sections above:


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: 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

* 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.

* 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):

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:

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

Other Samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Improvements

HTTP Samplers

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

Version 2.8

New and Noteworthy

Core Improvements:

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:

See JMeter Performances across versions

OS Process Sampler

Allow defining files for stdout/stderr/stdin.

HTTP Request: PATCH verb

Add PATCH verb to HTTP sampler

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)

Miscellaneous

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):

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 occurred 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

Other Samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Improvements

HTTP Samplers

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

Version 2.7

New and Noteworthy

OS Process Sampler

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

New Visual Indicator of number of ERROR/FATAL messages in logs

Indicator shows number of ERROR/FATAL messages 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);
public void populateSampler(HTTPSamplerBase sampler, HttpRequestHdr request, Map<String, String> pageEncodings, Map<String, String> formEncodings) throws Exception;

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

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

Other Samplers

Controllers

Listeners

Assertions

Functions

I18N

General

Improvements

HTTP Samplers

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

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

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:

Aggregate Graph bar

Counter - new reset option

Add an option to reset counter on each Thread Group iteration

Functions

User Defined Variable improvements

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

Other Samplers

Controllers

Listeners

Assertions

Functions

I18N

General

Improvements

HTTP Samplers

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

Version 2.5.1

Summary of main changes

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:

httpclient4.retrycount=3
httpclient3.retrycount=3

Bug fixes

HTTP Samplers and Proxy

Other Samplers

Controllers

Listeners

Assertions

Functions

I18N

General

Improvements

HTTP Samplers

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

Version 2.5

Summary of main changes

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

Other Samplers

Controllers

Listeners

Assertions

Functions

I18N

General

Improvements

HTTP Samplers

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

Version 2.4

Summary of main changes

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

Other Samplers

Controllers

Listeners

Assertions

Functions

I18N

General

Improvements

HTTP Samplers

Other samplers

Controllers

Listeners

Timers, Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

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

Other Samplers

Controllers

Listeners

I18N

General

Improvements

Other samplers

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 Portuguese 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:

These are implemented in the AbstractTestElement class which all elements should extend so this is unlikely to cause a problem.

Bug fixes

HTTP Samplers and Proxy

Other Samplers

Controllers

Listeners

Assertions

Functions

I18N

General

Improvements

HTTP Samplers

Other samplers

Controllers

Listeners

Assertions, Config, Pre- & Post-Processors

Functions

I18N

General

Non-functional changes

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:

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 successfully. 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

Bug fixes

Improvements

Non-functional changes

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

Bug fixes

Improvements

Non-functional Improvements

Version 2.3

Fixes since 2.3RC4

Bug fixes

Improvements

Fixes since 2.3RC3

Improvements since 2.3RC3

Version 2.3RC3

Known problems/restrictions:

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:

The main bug fixes are:

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 Authorization 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:

jmeter.properties:
httpclient.parameters.file=httpclient.parameters

httpclient.parameters:
http.authentication.preemptive$Boolean=false

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.

Calculator 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:

Non-functional improvements:

External jar updates:

Bug fixes:

Version 2.2

Incompatible changes:

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:

New functionality:

Bug fixes:

Other changes


Version 2.1.1

New functionality:

Bug fixes:

Version 2.1

New functionality:

Bug fixes:

Version 2.0.3

New functionality:

Bug fixes:

Other changes:

Version 2.0.2

New functionality:

Bug fixes:

Version 2.0.1

Bug fix release. TBA.

Version 2.0

Version 1.9.1

TBA

Version 1.9

Version 1.8.1

Version 1.8

Version 1.7.3

Version 1.7.2

Version 1.7.1

Version 1.7Beta

Version 1.6.1

Version 1.6 Alpha

Version 1.5.1

Version 1.5

Apache JMeter 1.4.1-dev

Apache JMeter 1.4 - Jul 11 1999

Apache JMeter 1.3 - Apr 16 1999

Apache JMeter 1.2 - Mar 17 1999

Apache JMeter 1.1 - Feb 24 1999

Apache JMeter 1.0.1 - Jan 25 1999

Apache JMeter 1.0 - Dec 15 1998