Response Time Percentiles Over Time (successful responses) graph :
-
Response Time Overview graph :
-
Top 5 errors by Sampler table :
-
More details on errors in Errors table
-
Average response time added to Statistics table :
-
Active Threads table now stacks threads :
-
-
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
+
IMPORTANT CHANGES
-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.
+JMeter now requires Java 8. Ensure you use the most up to date version.
-
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.
+JMeter logging has been migrated to SLF4J and Log4j 2.
+This affects configuration and 3rd party plugins, see below "Logging changes".
-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
-
Various GUI and UX fixes
-
Memory usage improvements
-
JDBC Request is now able to return Blob/Clob and computes latency and connect time
-
CSS Parsing introduced in 3.0 has been optimized by introduction of a parsing cache
-
HTTP Request is now able to handle body in GET request, this is useful for Elastic Search requests for example.
+
JMeter now provides a new BackendListener implementation that interfaces InfluxDB.
+
+This implementation sends data using Asynchronous HTTP calls to InfluxDB through its HTTP API
+and give you the following graphs with annotations:
+
+
+
DNS Cache Manager now has a table to allow static host resolution.
+
+
+
JMS Publisher and Subscriber now allow reconnection on error with pause.
+
+
+
+
Variables in JMS Publisher are now supported for all types of messages. Add the encoding type of the file to parse its content
+
+
XPath Extractor now allows extraction randomly, by index or for all matches.
+
+
+
Response Assertion now allows to work on Request Header, provides a "OR" combination and has a better cell renderer
+
+
+
JMeter now uses Oracle Nashorn Javascript engine instead of Rhino. This provides a faster execution of Javascript.
+
HTTP HC4 Implementation now provides preemptive Basic Auth enabled by default
+
Embedded resources download in CSS has been improved to avoid useless repetitive parsing to find the resources
+
An important work on code quality and code coverage with tests has been done since Sonar has been setup on the project.
+You can see Sonar report here.
+
-
Documentation improvements
+
UX improvements
-
Documentation review and improvements for easier startup
When running a Test, GUI is now more responsive and less impacting on memory usage thanks to a limitation on the number of Sample Results
+listeners hold and a rework of the way GUI is updated
+
HTTP Request GUI has been simplified and provides more place for parameters and body.
+
+
+
HTTP(S) Test Script Recorder has been simplified and clarified.
+
+
+
+
A replace feature has been added to Search feature to allow replacement in some elements.
+
+
+
View Results Tree now provides a more up to date Browser renderer which requires JavaFX.
+
You can now add through a contextual menu think times, this will add think times between samplers and Transaction Controllers
+ of selected node.
+
+
+
You can now apply a naming policy to children of a Transaction Controller. A default policy exists but you can implement your own
+ through org.apache.jmeter.gui.action.TreeNodeNamingPolicy
+ and configuring property naming_policy.impl
+
+
+
Sorting per column has been added to View Results in Table, Summary Report, Aggregate Report and Aggregate Graph elements.
+
+
+
Report/Dashboard improvements
+
+
+Statistics have been reorganized to clarify report:
+
+
+
+It is now possible to customize APDEX thresholds per transaction based on regular expression or sample name.
+The below example will apply different thresholds for samples sample(\\d+), sampleA and scenarioB
+than default ones (500 and 1500 for satisfied and tolerated thresholds) declared:
+
PDF Documentations have been migrated and updated to HTML user manual
+
Incompatible changes
-
A cache for CSS Parsing of URLs has been introduced in this version, it is enabled by default. It is controlled by property css.parser.cache.size. It can be disabled by setting its value to 0. See
- Bug
- 59885
-
ThroughputController defaults have changed. Now defaults are Percent Executions which is global and no more per user. See
- Bug
- 60023
-
Since version 3.1, HTML report ignores empty Transaction Controller (possibly generated by If Controller or Throughput Controller) when computing metrics. This provides more accurate metrics
-
Since version 3.1, Summariser ignores SampleResults generated by Transaction Controller when computing the live statistics, see
- Bug
- 60109
-
Since version 3.1, when using Stripped modes (by default StrippedBatch is used), response will be stripped also for failing SampleResults, you can revert this to previous behaviour by setting sample_sender_strip_also_on_error=false in user.properties, see
+
The following jars have been removed after migration from LogKit to SLF4J (see
Bug
- 60137
-
Since version 3.1, jmeter.save.saveservice.connect_time property value is true, meaning CSV file for results will contain an additional column containing connection time, see
+ 60589):
+
+
ApacheJMeter_slf4j_logkit.jar
+
avalon-framework-4.1.4.jar
+
avalon-framework-4.1.4.jar
+
commons-logging-1.2.jar
+
excalibur-logger-1.1.jar
+
logkit-2.0.jar
+
+
+
The commons-httpclient-3.1.jar has been removed after drop of HC3.1 support(see
Bug
- 60106
-
Since version 3.1, Random Timer subclasses (Gaussian Random Timer, Uniform Random Timer and Poisson Random Timer) implement interface org.apache.jmeter.timers.ModifiableTimer
-
Since version 3.1, if you don't select any language in JSR223 Test Elements, Apache Groovy language will be used. See
+ 60727)
+
JMeter now sets through -Djava.security.egd=file:/dev/urandom the algorithm for secure random
+
Process Sampler now returns error code 500 when an error occurs. It previously returned an empty value.
+
In org.apache.jmeter.protocol.http.sampler.HTTPHCAbstractImpl two protected static fields (localhost and nonProxyHostSuffixSize) have been renamed to (LOCALHOST and NON_PROXY_HOST_SUFFIX_SIZE)
+ to follow static fields naming convention
+
JMeter now uses by default Oracle Nashorn engine instead of Mozilla Rhino for better performances. This should not have an impact unless
+ you use some advanced features. You can revert back to Rhino by settings property javascript.use_rhino=true.
+ You can read this migration guide for more details on Nashorn. See
Bug
- 59945
-
Since version 3.1, CSV DataSet now trims variable names to avoid issues due to spaces between variables names when configuring CSV DataSet. This should not have any impact for you unless you use space at the begining or end of your variable names. See
+ 60672
Since version 3.1, HTTP Request is able when using HttpClient4 (default) implementation to handle responses bigger than 2147483647 Bytes, that is 2GB. To allow this two properties have been introduced:
-
-
httpsampler.max_bytes_to_store_per_request (defaults to 10MB) will control what is held in memory. By default JMeter will only keep in memory the first 10MB of a response. If you have responses larger than this value and use assertions that are after the first 10MB, then you must increase this value
-
httpsampler.max_buffer_size will control the buffer used to read the data. Previously JMeter used a buffer equal to Content-Length header which could lead to failures and make JMeter less resistant to faulty applications, but note this may impact response times and give slightly different results
- than previous versions if your application returned a Content-Length header higher than current default value (65KB)
-
- See
+ 60729
+ -
+ The Random Variable Config Element now allows minimum==maximum. Previous versions logged an error when minimum==maximum and did not set the configured variable.
+ 60730
+ -
+ The JSON PostProcessor now sets the _ALL variable (assuming Compute concatenation var was checked)
+ even if the JSON path matches only once. Previous versions did not set the _ALL variable in this case.
-
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.
Drop deprecated class org.apache.jmeter.protocol.system.NativeCommand
+
Drop deprecated class org.apache.jmeter.protocol.http.config.gui.MultipartUrlConfigGui
+
Drop deprecated class org.apache.jmeter.testelement.TestListener
+
Drop deprecated class org.apache.jmeter.reporters.FileReporter
+
Drop deprecated class org.apache.jmeter.protocol.http.modifier.UserSequence
+
Drop deprecated class org.apache.jmeter.protocol.http.parser.HTMLParseError
+
Drop unused methods org.apache.jmeter.protocol.http.control.HeaderManager#getSOAPHeader
+ and org.apache.jmeter.protocol.http.control.HeaderManager#setSOAPHeader(Object)
-
- Bug
- 60225
- -
- Drop deprecated __jexl function, jexl support in BSF and dependency on commons-jexl-1.1.jar. This function can be easily replaced with __jexl3 function
-
- Bug
- 60268
- -
- Drop org.apache.jmeter.gui.action.Analyze and deprecate org.apache.jmeter.reporters.FileReporter (will be removed in next version)
+
org.apache.jmeter.protocol.http.util.Base64Encode has been deprecated, you can use java.util.Base64 as a replacement
+
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:
+
Bug
- 60229
+ 57242
-
- Add a new metric : sent_bytes. Implemented by Philippe Mouawad (p.mouawad at ubik-ingenierie.com) and contributed by Ubik Load Pack (support at ubikloadpack.com)
Bug
- 60358
+ 60896
-
- Http Request : Allow sending Body Data for HTTP GET request
+ HTTP(S) Test Script Recorder : Improve UX by reducing number of properties on screen
Other samplers
-
- Pull request #211
- -
- Differentiate the timing for JDBC Sampler. Use latency and connect time. Contributed by Thomas Peyrard (thomas.peyrard at murex.com)
Bug
- 60066
+ 60585
-
- Handle CLOBs and BLOBs and limit them if necessary when storing them in result sampler.
+ JMS Publisher and JMS Subscriber : Allow reconnection on error and pause between errors. Based on
+ Pull request #240 from by Logan Mauzaize (logan.mauzaize at gmail.com) and Maxime Chassagneux (maxime.chassagneux at gmail.com).
+
+ Pull request #259 - Refactored and reformatted SmtpSampler. Contributed by Graham Russell (graham at ham1.co.uk)
Controllers
-
- Bug
- 59351
- -
- Improve log/error/message for IncludeController. Partly contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
-
- Bug
- 60023
- -
- ThroughputController : Make "Percent Executions" and global the default values. Contributed by Ubik Load Pack (support at ubikloadpack.com)
-
- Bug
- 60082
- -
- Validation mode : Be able to force Throughput Controller to run as if it was set to 100%
-
- Bug
- 59349
- -
- Trim spaces in input filename in IncludeController.
Bug
- 59975
+ 60542
-
- View Results Tree : Text renderer annoyingly scrolls down when content is bulky. Contributed by Ubik Load Pack (support at ubikloadpack.com)
Bug
- 60267
+ 60678
-
- UX : In View Results Tree it should be possible to close the Configure popup by typing escape. Contributed by Ubik Load Pack (support at ubikloadpack.com)
Bug
- 59845
- -
- Log messages about JSON Path mismatches at debug level instead of error.
-
- Pull request #212
+ 60691
-
- Allow multiple selection and delete in HTTP Authorization Manager. Based on a patch by Benoit Wiart (b.wiart at ubik-ingenierie.com)
Bug
- 59816
- -
-
- Pull request #213
+ 60687
-
- Allow multiple selection and delete in HTTP Header Manager. Based on a patch by Benoit Wiart (b.wiart at ubik-ingenierie.com)
Bug
- 59329
+ 59174
-
- Trim spaces in input filename in CSVDataSet.
+ Add a table with static hosts to the DNS Cache Manager. This enables better virtual hosts testing with HttpClient4.
Functions
-
- Bug
- 59963
- -
- New function __RandomFromMultipleVars: Ability to compute a random value from values of one or more variables. Contributed by Ubik Load Pack (support at ubikloadpack.com)
-
- Bug
- 59991
- -
- New function __groovy to evaluate Groovy Script. Contributed by Ubik Load Pack (support at ubikloadpack.com)
I18N
-
- Pull request #214
- -
- Add spanish translation for delayed starting of threads. Contributed by Asier Lostalé (asier.lostale at openbravo.com).
Bug
- 60287
+ 60654
-
- Report / Dashboard : Have a new Top5 Errors by sampler table in Dashboard. Implemented by Philippe Mouawad (p.mouawad at ubik-ingenierie.com) and contributed by Ubik Load Pack (support at ubikloadpack.com)
Bug
- 59777
+ 60565
-
- Extract SLF4J binding into its own jar and make it a JMeter lib.
-
If you get a warning about multiple SLF4J bindings on startup. Remove either the Apache JMeter provided binding
- lib/ApacheJMeter_slf4j_logkit.jar, or all of the other reported bindings.
- For more information you can have a look at SLF4Js own info page.
Bug
- 60085
+ 60564
-
- Remove cache for prepared statements, as it didn't work with the current JDBC pool implementation and current JDBC drivers should support caching of prepared statements themselves.
Bug
- 60266
+ 60815
-
- Usability/ UX : It should not be possible to close/exit/Revert/Load/Load a recent project or create from template a JMeter plan or open a new one if a test is running
Bug
- 57305
+ 60886
-
- Remove dependency of ProxyControl on GuiPackage. Based on patches by jarek102 (jarek102 at gmail.com) and Wyatt Epp (wyatt.epp at gmail.com)
+ Build improvements to better enable builds in environments that are behind a proxy. Partly contributed by Michael Osipov (michaelo at apache.org)
Non-functional changes
-
Updated to jsoup-1.10.1 (from 1.8.3)
-
Updated to ph-css 4.1.6 (from 4.1.4)
-
Updated to tika-core and tika-parsers 1.14 (from 1.12)
-
Updated to commons-io 2.5 (from 2.4)
-
Updated to commons-lang3 3.5 (from 3.4)
-
Updated to commons-net 3.5 (from 3.4)
-
Updated to groovy 2.4.7 (from 2.4.6)
-
Updated to httpcore 4.4.5 (from 4.4.4)
-
Updated to slf4j-api 1.7.21 (from 1.7.13)
-
Updated to rsyntaxtextarea-2.6.0 (from 2.5.8)
-
Updated to xstream 1.4.9 (from 1.4.8)
-
Updated to jodd 3.7.1 (from 3.6.7.jar)
-
Updated to xmlgraphics-commons 2.1 (from 2.0.1)
-
- Pull request #215
- -
- Reduce duplicated code by using the newly added method GuiUtils#cancelEditing.
- Contributed by Benoit Wiart (b.wiart at ubik-ingenierie.com)
-
- Pull request #218
- -
- Misc cleanup. Contributed by Benoit Wiart (b.wiart at ubik-ingenierie.com)
Bug
- 60361
+ 60689
-
- ModuleController : If a Test plan contains a Module Controller which references an unexistant Controller, JMeter in GUI mode will not stop
Bug
- 59964
+ 60837
-
- JSR223 Test Element : Cache compiled script if available is not correctly reset. Contributed by Ubik Load Pack (support at ubikloadpack.com)
Bug
- 60049
+ 60919
-
- When using Timers with high delays or Constant Throughput Timer with low throughput, Scheduler may take a lot of time to exit, same for Shutdown test
Bug
- 60089
+ 60775
-
- Report / Dashboard : Bytes throughput Over Time has reversed Sent and Received bytes. Contributed by Ubik Load Pack (support at ubikloadpack.com)
Bug
- 60125
+ 60621
-
- Report / Dashboard : Dashboard cannot be generated if the default delimiter is \t. Based on a report from Tamas Szabadi (tamas.szabadi at rightside.co)
Bug
- 60295
+ 60857
-
- JSON Extractor doesn't index array elements when only one element is found. Based on a patch by Roberto Braga (roberto.braga at sociale.it)
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:
+
Tuukka Mustonen (tuukka.mustonen at gmail.com) who gave us a lot of useful feedback which helped resolve
+ Bug
+ 60689 and
+ Bug
+ 60690
+
Amar Darisa (amar.darisa at gmail.com) who helped us with his feedback on
+ Bug
+ 60682
Apologies if we have omitted anyone else.
@@ -816,7 +880,13 @@ Apologies if we have omitted anyone else
The Once Only controller behaves correctly under a Thread Group or Loop Controller,
but otherwise its behaviour is not consistent (or clearly specified).
@@ -829,17 +899,6 @@ the total number of threads only applies
-Note that there is a bug in Java
-on some Linux systems that manifests itself as the following error when running the test cases or JMeter itself:
-
- [java] WARNING: Couldn't flush user prefs:
- java.util.prefs.BackingStoreException:
- java.lang.IllegalArgumentException: Not supported: indent-number
-
-This does not affect JMeter operation. This issue is fixed since Java 7b05.
-
-
-
Note that under some windows systems you may have this WARNING:
java.util.prefs.WindowsPreferences
@@ -850,17 +909,11 @@ The fix is to run JMeter as Administrato
-With Oracle Java 7 and Mac Book Pro Retina Display, the JMeter GUI may look blurry.
-This is a known Java bug, see Bug JDK-8000629.
-A workaround is to use a Java 7 update 40 runtime which fixes this issue.
-
-
-
You may encounter the following error:
java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
if you run a HTTPS request on a web site with a SSL certificate (itself or one of SSL certificates in its chain of trust) with a signature
algorithm using MD2 (like md2WithRSAEncryption) or with a SSL certificate with a size lower than 1024 bits.
-This error is related to increased security in Java 7 version u16 (MD2) and version u40 (Certificate size lower than 1024 bits), and Java 8 too.
+This error is related to increased security in Java 8+.
To allow you to perform your HTTPS request, you can downgrade the security of your Java installation by editing
the Java jdk.certpath.disabledAlgorithms property. Remove the MD2 value or the constraint on size, depending on your case.
@@ -875,7 +928,7 @@ See JDK-8065373
-The fix is to use JDK7_u79, JDK8_u45 or later.
+The fix is to use JDK8_u45 or later.
@@ -884,7 +937,7 @@ View Results Tree may fail to display so
54586.
This is due to a known Java bug which fails to parse "px" units in row/col attributes.
See Bug JDK-8031109
-The fix is to use JDK9 b65 or later.
+The fix is to use JDK9 b65 or later (but be aware that Java 9 is not certified yet for JMeter).
@@ -899,7 +952,7 @@ The fix is to use JDK 8 b132 or later.