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.
Change summary
Section titled “Change summary”| Section | Changes |
|---|---|
| Incompatible changes | 15 |
| Improvements | 61 |
| Bug fixes | 36 |
| Non-functional changes | 17 |
New and Noteworthy
Section titled “New and Noteworthy”Incompatible changes
Section titled “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 to0. 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 byIf ControllerorThroughput Controller) when computing metrics. This provides more accurate metrics - Since version 3.1, Summariser ignores SampleResults generated by
Transaction Controllerwhen computing the live statistics, see Bug 60109 - Since version 3.1, when using Stripped modes (by default
StrippedBatchis used), response will be stripped also for failing SampleResults, you can revert this to previous behaviour by settingsample_sender_strip_also_on_error=falseinuser.properties, see Bug 60137 - Since version 3.1,
jmeter.save.saveservice.connect_timeproperty value istrue, 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
2147483647Bytes, 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_sizewill 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
__jexlfunction, jexl support in BSF and dependency oncommons-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)
Improvements
Section titled “Improvements”HTTP Samplers and Test Script Recorder
Section titled “HTTP Samplers and Test Script Recorder”- 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
2147483647bytes (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
Other samplers
Section titled “Other samplers”- 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.
Controllers
Section titled “Controllers”- 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
Listeners
Section titled “Listeners”- 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
debuglevel instead oferror. - 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.
Functions
Section titled “Functions”- 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
__groovyto 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).
Report / Dashboard
Section titled “Report / Dashboard”- 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)
General
Section titled “General”- Bug 59803Use
isValid()method from JDBC driver, if novalidationQueryis given in JDBC Connection Configuration. - Bug 57493Create a documentation page for properties
- Bug 59924The log level of XXX package is set to
DEBUGiflog_level._XXXX_property value contains spaces, same for__logfunction - 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
ProxyControlonGuiPackage. Based on patches by jarek102 (jarek102 at gmail.com) and Wyatt Epp (wyatt.epp at gmail.com)
Bug fixes
Section titled “Bug fixes”HTTP Samplers and Test Script Recorder
Section titled “HTTP Samplers and Test Script Recorder”- 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.cpsproperty - 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
Other Samplers
Section titled “Other Samplers”- Bug 59113JDBC Connection Configuration : Transaction Isolation level not correctly set if constant used instead of numerical
Controllers
Section titled “Controllers”- Bug 60361ModuleController : If a Test plan contains a Module Controller which references an unexistant Controller, JMeter in GUI mode will not stop
Listeners
Section titled “Listeners”- 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
Functions
Section titled “Functions”General
Section titled “General”- Bug 59400Get rid of UnmarshalException on stopping when
-Xoption 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.familyis 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.propertiesfor 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
Non-functional changes
Section titled “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)
- 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)
Thanks
Section titled “Thanks”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.
Improve Report/Dashboard
Section titled “Improve Report/Dashboard”The Dashboard has been improved with 3 new graphs and 1 summary table:
- Connect Time over Time graph :

- 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
Section titled “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
Section titled “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
Section titled “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
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
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.
Core improvements
Section titled “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.
Documentation improvements
Section titled “Documentation improvements”- Documentation review and improvements for easier startup
- New properties reference documentation section
Useful links
Section titled “Useful links”On this page
On this page
- Overview
- Change summary
- New and Noteworthy
- Incompatible changes
- Improvements
- Bug fixes
- Non-functional changes
- Thanks
- Improve Report/Dashboard
- New Metrics
- Handling Big responses
- New __groovy function
- Use Groovy as default for JSR-223 elements
- Formatted HTML source view in Results Tree View
- Ability to update all timers in Test plan with a new property
- Useful links