Skip to content

JMeter 3.1 Release Notes

Apache JMeter 3.1 release notes with 61 improvements and 36 bug fixes, plus upgrade notes from the official changelog.

Difficulty
intermediate
Guide type
reference
Estimated read time
13 min read
Last verified version
Verified JMeter 3.1
SectionChanges
Incompatible changes15
Improvements61
Bug fixes36
Non-functional changes17
  • 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 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 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](/./api/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 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 beginning or end of your variable names. See Bug 60221
  • 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 Bug 53039

Deprecated and removed elements or functions

Section titled “Deprecated and removed elements or functions”
  • Bug 60222Remove deprecated elements Distribution Graph, Spline Visualizer
  • Bug 60224Deprecate [Monitor Results](/./usermanual/component-reference/#Monitor_Results_(DEPRECATED)) listener. It will be dropped in next version.
  • Bug 60323Deprecate BSF Elements (Use JSR223 Elements instead). They will probably be dropped in N+2 version. The following elements are deprecated: - [BSF Sampler](/./usermanual/component-reference/#BSF_Sampler_(DEPRECATED)) - [BSF Listener](/./usermanual/component-reference/#BSF_Listener_(DEPRECATED)) - [BSF Assertion](/./usermanual/component-reference/#BSF_Assertion_(DEPRECATED)) - [BSF Timer](/./usermanual/component-reference/#BSF_Timer_(DEPRECATED)) - [BSF PreProcessor](/./usermanual/component-reference/#BSF_PreProcessor_(DEPRECATED)) - [BSF PostProcessor](/./usermanual/component-reference/#BSF_PostProcessor_(DEPRECATED))
  • Bug 60225Drop deprecated __jexl function, jexl support in BSF and dependency on commons-jexl-1.1.jar. This function can be easily replaced with [__jexl3](/./usermanual/functions/#__jexl3) function
  • Bug 60268Drop org.apache.jmeter.gui.action.Analyze and deprecate org.apache.jmeter.reporters.FileReporter (will be removed in next version)
  • Bug 59882Reduce memory allocations for better throughput. Contributed by Benoit Wiart (b.wiart at ubik-ingenierie.com) through PR#217 and PR#228
  • Bug 59885Optimize css parsing for embedded resources download by introducing a cache. Contributed by Benoit Wiart (b.wiart at ubik-ingenierie.com) through PR#219
  • Bug 60092View Result Tree: Add shortened version of the PUT body to sampler result.
  • Bug 60229Add 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 53039HTTP Request : Be able to handle responses which size exceeds 2147483647 bytes (that is 2GB)
  • Bug 60265HTTP Request : In Files Upload Tab you cannot resize columns
  • Bug 60318Ignore CSS warnings when parsing with ph-css library.
  • Bug 60358Http Request : Allow sending Body Data for HTTP GET request
  • PR#211Differentiate the timing for JDBC Sampler. Use latency and connect time. Contributed by Thomas Peyrard (thomas.peyrard at murex.com)
  • Bug 59620Fix button action in “JMS Publisher → Random File from folder specified below” to allow to select a directory
  • Bug 60066Handle CLOBs and BLOBs and limit them if necessary when storing them in result sampler.
  • Bug 59351Improve log/error/message for IncludeController. Partly contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 60023ThroughputController : Make “Percent Executions” and global the default values. Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • Bug 60082Validation mode : Be able to force Throughput Controller to run as if it was set to 100%
  • Bug 59349Trim spaces in input filename in IncludeController.
  • Bug 60081Interleave Controller : Add an option to alternate across threads
  • Bug 59953GraphiteBackendListener : Add Average metric. Partly contributed by Maxime Chassagneux (maxime.chassagneux at gmail.com)
  • Bug 59975View Results Tree : Text renderer annoyingly scrolls down when content is bulky. Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • Bug 60109Summariser : Make it ignore TC generated SampleResult in its summary computations
  • Bug 59948Add a formatted and sane HTML source code render to View Results Tree
  • Bug 60252Add sent kbytes/s to Aggregate Report and Summary report
  • Bug 60267UX : 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)

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

Section titled “Timers, Assertions, Config, Pre- & Post-Processors”
  • Bug 59845Log messages about JSON Path mismatches at debug level instead of error.
  • PR#212Allow multiple selection and delete in HTTP Authorization Manager. Based on a patch by Benoit Wiart (b.wiart at ubik-ingenierie.com)
  • Bug 59816PR#213Allow multiple selection and delete in HTTP Header Manager. Based on a patch by Benoit Wiart (b.wiart at ubik-ingenierie.com)
  • Bug 59967CSS/JQuery Extractor : Allow empty default value. Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • Bug 59974Response Assertion : Add button “Add from clipboard”. Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • Bug 60050CSV Data Set : Make it clear in the logs when a thread will exit due to this configuration
  • Bug 59962Cache Manager does not update expires date when response code is 304.
  • Bug 60018Timer : Add a factor to apply on pauses. Partly based on a patch by Ubik Load Pack (support at ubikloadpack.com)
  • Bug 60203Use more available space for textarea in XPath Assertion.
  • Bug 60220Rename JSON Path Post Processor to JSON Extractor
  • Bug 60221CSV DataSet : trim variable names
  • Bug 59329Trim spaces in input filename in CSVDataSet.
  • Bug 59963New 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 59991New function __groovy to evaluate Groovy Script. Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • PR#214Add spanish translation for delayed starting of threads. Contributed by Asier Lostalé (asier.lostale at openbravo.com).
  • Bug 60348Change chinese translation for Save as. Contributed by XMeter (support at xmeter.net).
  • Bug 59954Web Report/Dashboard : Add average metric
  • Bug 59956Web Report / Dashboard : Add ability to generate a graph for a range of data
  • Bug 60065Report / Dashboard : Improve Dashboard Error Summary by adding response message to “Type of error”. Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • Bug 60079Report / Dashboard : Add a new “Response Time Overview” graph
  • Bug 60080Report / Dashboard : Add a new “Connect Time Over Time ” graph. Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • Bug 60091Report / Dashboard : Have a new report containing min/max and percentiles graphs.
  • Bug 60108Report / Dashboard : In Requests Summary rounding is too aggressive
  • Bug 60098Report / Dashboard : Reduce default value for “jmeter.reportgenerator.statistic_window” to reduce memory impact
  • Bug 60115Add date format property for start/end date filter into Report generator
  • Bug 60171Report / Dashboard : Active Threads Over Time should stack lines to give the total amount of threads running
  • Bug 60250Report / Dashboard : Need to Add Sent KB/s in Statistics Report of HTML Dashboard
  • Bug 60287Report / 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 59803Use isValid() method from JDBC driver, if no validationQuery is given in JDBC Connection Configuration.
  • Bug 57493Create a documentation page for properties
  • Bug 59924The log level of XXX package is set to DEBUG if log_level._XXXX_ property value contains spaces, same for __log function
  • Bug 59777Extract SLF4J binding into its own jar and make it a JMeter lib. :::note 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 60085Remove 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 60137In Distributed testing when using StrippedXXXX modes strip response also on error
  • Bug 60106Settings defaults : Switch “jmeter.save.saveservice.connect_time” to true (after 3.0)
  • PR#229 tiny memory allocation improvements. Contributed by Benoit Wiart (b.wiart at ubik-ingenierie.com)
  • Bug 59945For all JSR223 elements, if script language has not been chosen on the UI, the script will be interpreted as a groovy script.
  • Bug 60266Usability/ 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 57305Remove dependency of ProxyControl on GuiPackage. Based on patches by jarek102 (jarek102 at gmail.com) and Wyatt Epp (wyatt.epp at gmail.com)
  • Bug 58888HTTP(S) Test Script Recorder (ProxyControl) does not add TestElement’s returned by SamplerCreator#createChildren()
  • Bug 59902Https handshake failure when setting httpclient.socket.https.cps property
  • Bug 60084JMeter 3.0 embedded resource URL is silently encoded
  • Bug 60376Http Test Script Recorder : If deflate is used by server then recording may break application
  • Bug 59113JDBC Connection Configuration : Transaction Isolation level not correctly set if constant used instead of numerical
  • Bug 60361ModuleController : If a Test plan contains a Module Controller which references an unexistant Controller, JMeter in GUI mode will not stop
  • Bug 59712Display original query in RequestView when decoding fails. Based on a patch by Teemu Vesala (teemu.vesala at qentinel.com)
  • Bug 60278Since 2.13 (and Bug 57514), Aggregate Graph, Summary Report and Aggregate Report lost precision in the Error, Rate and Bandwidth values saved in the saved file csv
  • Bug 60360View Result Tree : Request Tab does not show body of a DELETE request

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

Section titled “Timers, Assertions, Config, Pre- & Post-Processors”
  • Bug 59964JSR223 Test Element : Cache compiled script if available is not correctly reset. Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • Bug 59609Format extracted JSON Objects in JSON Post Processor correctly as JSON.
  • Bug 60332View Results Tree : With Windows LAF, JSON Extractor does not show JSON Path Expression and Result panel
  • Bug 59400Get rid of UnmarshalException on stopping when -X option is used.
  • Bug 59607JMeter crashes when reading large test plan (greater than 2GB). Based on fix by Felix Draxler (felix.draxler at sap.com)
  • Bug 59621Error count in report dashboard is one off.
  • Bug 59657Only set font in JSyntaxTextArea, when property jsyntaxtextarea.font.family is set.
  • Bug 59720Batch test file comparisons fail on Windows as XML files are generated as EOL=LF
  • Code cleanups. Patches by Graham Russell (graham at ham1.co.uk)
  • Bug 59722Use StandardCharsets to reduce the possibility of misspelling Charset names.
  • Bug 59723Use jmeter.properties for testing whenever possible
  • Bug 59726Unit test to check that CSV header text and sample format don’t change unexpectedly
  • Bug 59889Change encoding to UTF-8 in reports for dashboard.
  • Bug 60053In Non GUI mode, a Stacktrace is shown at end of test while report is being generated
  • Bug 60049When 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 60089Report / Dashboard : Bytes throughput Over Time has reversed Sent and Received bytes. Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • Bug 60090Report / Dashboard : Empty Transaction Controller should not count in metrics
  • Bug 60103Report / Dashboard : Requests summary includes Transaction Controller leading to wrong percentage
  • Bug 60105Report / Dashboard : Report requires Transaction Controller “generate parent sample” option to be checked, fix related issues
  • Bug 60107Report / Dashboard : In StatisticSummary, TransactionController SampleResult makes Total line wrong
  • Bug 60110Report / Dashboard : In Response Time Percentiles, slider is useless
  • Bug 60135Report / Dashboard : Active Threads Over Time should be in OverTime section
  • Bug 60125Report / Dashboard : Dashboard cannot be generated if the default delimiter is \t. Based on a report from Tamas Szabadi (tamas.szabadi at rightside.co)
  • Bug 59439Report / Dashboard : AbstractOverTimeGraphConsumer.createGroupInfos() should be abstract
  • Bug 59918Ant generated HTML report is broken (extras folder)
  • Bug 60295JSON Extractor doesn’t index array elements when only one element is found. Based on a patch by Roberto Braga (roberto.braga at sociale.it)
  • Bug 60299Thread Group with Scheduler : Weird behaviour when End-Time is in the past
  • 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)
  • PR#215Reduce duplicated code by using the newly added method GuiUtils#cancelEditing. Contributed by Benoit Wiart (b.wiart at ubik-ingenierie.com)
  • PR#218Misc cleanup. Contributed by Benoit Wiart (b.wiart at ubik-ingenierie.com)
  • PR#216Re-use pattern when possible. Contributed by Benoit Wiart (b.wiart at ubik-ingenierie.com)
  • Bug 60364Document Test Coverage. Contributed by Thomas Schapitz (ts-nospam12 at online.de)

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

  • Felix Draxler (felix.draxler at sap.com)
  • Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Graham Russell (graham at ham1.co.uk)
  • Teemu Vesala (teemu.vesala at qentinel.com)
  • Asier Lostalé (asier.lostale at openbravo.com)
  • Thomas Peyrard (thomas.peyrard at murex.com)
  • Benoit Wiart (b.wiart at ubik-ingenierie.com)
  • Maxime Chassagneux (maxime.chassagneux at gmail.com)
  • Ubik Load Pack
  • Tamas Szabadi (tamas.szabadi at rightside.co)
  • Roberto Braga (roberto.braga at soziale.it)
  • jarek102 at gmail.com
  • Wyatt Epp (wyatt.epp at gmail.com)
  • Thomas Schapitz (ts-nospam12 at online.de)

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.

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

  • Connect Time over Time graph : dashboard/report_connect_time_over_time.png
  • Response Time Percentiles Over Time (successful responses) graph : dashboard/response_time_percentiles_over_time.png
  • Response Time Overview graph : dashboard/response_time_overview.png
  • Top 5 errors by Sampler table : dashboard/top_5_errors_by_sampler.png
  • More details on errors in Errors table
  • Average response time added to Statistics table : dashboard/report_statistics.png
  • Active Threads table now stacks threads : dashboard/report_active_threads_over_time.png

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

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.

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

Section titled “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.

Formatted HTML source view in Results Tree View

Section titled “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

Section titled “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.

  • 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.
  • Documentation review and improvements for easier startup
  • New properties reference documentation section
On this page