This page details the changes made in the current version only.
Earlier changes are detailed in the History of Previous Changes.

Version 4.0


New and Noteworthy

Core improvements

JMeter now supports JAVA 9.

New Boundary Extractor element available which provides easy extraction with better performances

New JSON Assertion element available to assert on JSON responses.

New Precise Throughput Timer element available which produces Poisson arrivals with given constant throughput.

JMS Point-to-Point sampler has been enhanced with read, browse, clear options.

Best property values are now selected on many Test Elements to ensure best practices are the defaults:

Loop controller and ForEach Controller now expose their current iteration as a variable named __jm__<Name of your element>__idx that you can use like this for example for a Loop Controller named MyLoopController:

. See Bug 61802

Cookies are now shown in View Results Tree during recording. They were previously always shown as empty.

Response Assertion now allows you to customize assertion message and assert on Request Data.

UX improvements

JMeter now uses Darcula LAF by default

Workbench has been dropped from UI, you can now use Non Test Elements as immediate children of Test Plan.

Menu UX have been improved to make most used elements available more rapidly.

HTTP(S) Test Script Recorder now allows you to name your transactions while recording in a more human readable way.

UX improvements made on, among the most notable :


New Function __digest provides easy computing of SHA-XXX, MDX hashes:

${__digest(MD5,Apache JMeter 4.0 rocks !,,,)}
will return 0e16c3ce9b6c9971c69ad685fd875d2b

New Function __dateTimeConvert provides easy conversion between date formats:

${__dateTimeConvert(01 Jan 2017,dd MMM yyyy,dd/MM/yyyy,)}
will return 01/01/2017

New Function __changeCase provides ability to switch to Upper / Lower / Capitalized cases

${__changeCase(Avaro omnia desunt\, inopi pauca\, sapienti nihil,UPPER,)}

New Functions __isVarDefined and __isPropDefined provide testing of properties and variables availability

will return true
will return true

Scripting and Plugin Development

You can now call SampleResult#setIgnore() if you don't want your sampler to be visible in results

JavaSamplerContext used by AbstractJavaSamplerClient has been enhanced with new methods to easy plugin development.

JMeter now distributes additional Maven sources and javadoc artifacts into Maven repository

Plugins can now register listeners to be notified when a Test Plan is opened/closed

Live Reporting and Web Report

InfluxDB backend listener now allows you to add custom tags by adding them with prefix TAG_, see Bug 61794

In Web Report responseTime distribution graph is more precise

Some bugfixes have been made on report generation, see Bug 61900, Bug 6190061956, Bug 61899. Graphs Latency Vs Request and Response Time Vs Request did not exceed 1000 RPS due to Bug 61962

Configuration of JMeter environment

JVM settings for the JMeter start scripts can be placed in a separate file (bin/ on Unix and bin\setenv.bat on Windows), that gets called on startup. The startup script itself does not have to be edited anymore.

Incompatible changes


HTTP Samplers and Test Script Recorder

Other samplers



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



Report / Dashboard


Non-functional changes

Bug fixes

HTTP Samplers and Test Script Recorder

Other Samplers



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



Report / Dashboard



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