Skip to content

JMeter 3.0 Release Notes

Apache JMeter 3.0 release notes with 108 improvements and 59 bug fixes, plus upgrade notes from the official changelog.

Difficulty
intermediate
Guide type
reference
Estimated read time
27 min read
Last verified version
Verified JMeter 3.0
SectionChanges
Incompatible changes30
Improvements108
Bug fixes59
Non-functional changes39
  • Since version 3.0, Groovy-2.4.6 is bundled with JMeter (lib folder), ensure you remove old version or referenced versions through properties search_paths or user.classpath
  • Since version 3.0, jmeter.save.saveservice.assertion_results_failure_message property value is true, meaning CSV file for results will contain an additional column containing assertion result response message, see Bug 58978
  • Since version 3.0, jmeter.save.saveservice.print_field_names property value is true, meaning CSV file for results will contain field names as first line in CSV, see Bug 58991
  • Since version 3.0, jmeter.save.saveservice.idle_time property value is true, meaning CSV/XML result files will contain an additional column containing idle time between samplers, see Bug 57182
  • In RandomTimer class, protected instance timer field has been replaced by getTimer() protected method, this is related to Bug 58100. This may impact 3rd party plugins.
  • Since version 3.0, you can use Nashorn Engine (default javascript engine is Rhino) under Java8 for Elements that use Javascript Engine (__javaScript, IfController). If you want to use it, use property javascript.use_rhino=false, see Bug 58406. :::note Note: in a future version, we will switch to Nashorn by default. Users are encouraged to report any issue related to using Nashorn instead of Rhino. :::
  • Since version 3.0, JMS Publisher will reload contents of file if Message source is “From File” and the “Filename” field changes (e.g. if it uses a variable that has changed)
  • org.apache.jmeter.gui.util.ButtonPanel has been removed, if you use it in your 3rd party plugin or custom development ensure you update your code. See Bug 58687
  • Property jmeterthread.startearlier has been removed. See Bug 58726
  • Property jmeterengine.startlistenerslater has been removed. See Bug 58728
  • Property jmeterthread.reversePostProcessors has been removed. See Bug 58728
  • Property jmeter.toolbar.display has been removed, the toolbar is now always displayed. See Bug 59236
  • Property jmeter.errorscounter.display has been removed, the errors/warnings counter is now always displayed. See Bug 59236
  • Property xml.parser has been removed, it is not used anymore as org.apache.jmeter.util.JMeterUtils#getXMLParser has been deprecated and is not used either. See Bug 59236
  • Summariser listener now shows the duration in the format HH:mm:ss (Hour:Minute:Second), it previously showed the duration in seconds. See Bug 58776
  • org.apache.jmeter.protocol.http.visualizers.RequestViewHTTP.getQueryMap signature has changed, if you use it ensure you update your code. See Bug 58845
  • JMS Subscriber will consider a sample to be an error if the number of received messages is not equal to expected number of messages. It previously considered a sample OK if at least 1 message was received. See Bug 58980
  • Since version 3.0, HTTP(S) Test Script recorder defaults to using port 8888 (as configured when using Recording Template). See Bug 59006
  • Since version 3.0, the parser for embedded resources (replaced since 2.10 by Lagarto based implementation) which relied on the htmlparser library (HtmlParserHTMLParser) has been dropped along with its dependencies.
  • Since version 3.0, support for reading old Avalon format JTL (result) files has been removed, see Bug 59064
  • Since version 3.0, the default property value for http.java.sampler.retries has been changed to 0 (no retry by default) to align it with the behaviour of HttpClient4. :::note Note also that its meaning has changed: before 3.0, http.java.sampler.retries=1 meant No Retry (i.e. total tries = 1), since 3.0 http.java.sampler.retries=1 means 1 retry. (Note: this only applies to the Java HTTP Sampler) ::: See Bug 59103
  • Since 3.0, the following deprecated classes have been dropped - org.apache.jmeter.protocol.http.modifier.UserParameterXMLContentHandler - org.apache.jmeter.protocol.http.modifier.UserParameterXMLErrorHandler - org.apache.jmeter.protocol.http.modifier.UserParameterXMLParser
  • httpsampler.await_termination_timeout has been replaced by httpsampler.parallel_download_thread_keepalive_inseconds which is now the keep alive time for the parallel download threads (in seconds).
  • JDBC Request has been updated to use commons-dbcp2, since then the behaviour is slightly different, ensure you have a correct “Validation Query” for your database. See Bug 58786
  • The following jars have been removed: - excalibur-datasource-2.1.jar (see Bug 59156) - excalibur-instrument-1.0.jar (see Bug 58786) - excalibur-pool-api-2.1.jar (see Bug 58786) - excalibur-pool-impl-2.1.jar (see Bug 58786) - excalibur-pool-instrumented-2.1.jar (see Bug 58786) - htmllexer-2.1.jar (see Bug 59037) - htmlparser-2.1.jar (see Bug 59037) - soap-2.3.1.jar - jdom-1.1.3.jar (see Bug 59156)
  • Maximum number of redirects allowed by JMeter is now 20, it was previously 5. This can be changed with the property httpsampler.max_redirects. See Bug 59382
  • MongoDB elements (MongoDB Source Config, MongoDB Script) have been deprecated and will be removed in the next version of JMeter. They 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. See Bug 58772
  • WebService(SOAP) Request and HTML Parameter Mask which were deprecated in 2.13 version, have now been removed following our deprecation strategy. Classes and properties which were only used by those elements have been dropped: - org.apache.jmeter.protocol.http.util.DOMPool - org.apache.jmeter.protocol.http.util.WSDLException - org.apache.jmeter.protocol.http.util.WSDLHelper - Property soap.document_cache - JAR soap-2.3.1 has been also removed
  • __jexl function (i.e. JEXL 1) has been deprecated and will be removed in next version. See Bug 58903
  • Spline Visualizer listener and Distribution Graph listener have been deprecated and will be removed in the next version of JMeter. They do not appear anymore in the menu, if you need them modify not_in_menu property. JMeter team advises not to use them anymore. See Bug 58791
  • Bug 57696HTTP Request : Improve responseMessage when resource download fails. Contributed by Ubik Load Pack (support at ubikloadpack.com)
  • Bug 57995Use FileServer for HTTP Request files. Implemented by Andrey Pokhilko (andrey at blazemeter.com) and contributed by BlazeMeter Ltd.
  • Bug 58843Improve the usable space in the HTTP sampler GUI. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58852Use less memory for PUT requests. The uploaded data will no longer be stored in the Sampler. This is the same behaviour as with POST requests.
  • Bug 58860HTTP Request : Add automatic variable generation in HTTP parameters table by right click. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58923normalize URIs when downloading embedded resources.
  • Bug 59005HTTP Sampler : Added WebDAV verb (SEARCH).
  • Bug 59006Change Default proxy recording port to 8888 to align it with Recording Template. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 58099Performance : Lazily initialize HttpClient SSL Context to avoid its initialization even for HTTP only scenarios
  • Bug 57577HttpSampler : Retrieve All Embedded Resources, add property “httpsampler.embedded_resources_use_md5” to only compute md5 and not keep response data. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59023HttpSampler UI : rework the embedded resources labels and change default number of parallel downloads to 6. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59028Use SystemDefaultDnsResolver singleton. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59036FormCharSetFinder : Use JSoup instead of deprecated HTMLParser
  • Bug 59034Parallel downloads connection management is not realistic. Contributed by Benoit Wiart (benoit dot wiart at gmail.com) and Philippe Mouawad
  • Bug 59060HTTP Request GUI : Move File Upload to a new Tab to have more space for parameters and prevent incompatible configuration. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59103HTTP Request Java Implementation: Change default “http.java.sampler.retries” to align it on HttpClient behaviour and make the name meaningful
  • Bug 59083HTTP Request : Make Method field editable so that additional methods (WebDAV) can be added easily
  • Bug 59118Add comment in recorded think time by proxy recorder. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 59116Add the possibility to setup a prefix to sampler name recorded by proxy. Partly based on a patch by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 59129HTTP Request : Simplify GUI with simple/advanced Tabs
  • Bug 59033Parallel Download : Rework Parser classes hierarchy to allow plug-in parsers for different mime types
  • Bug 52073Embedded Resources Parallel download : Improve performances by avoiding shutdown of ThreadPoolExecutor at each sample. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59190HTTP(S) Test Script Recorder : Suggested excludes should ignore case. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 59140Parallel Download : Add CSS Parsing to extract links from CSS files
  • Bug 59249Http Request Defaults : Add “Source address” and “Save responses as MD5
  • Bug 59382More realistic default value for httpsampler.max_redirects
  • Bug 57928Add ability to define protocol (http/https) to AccessLogSampler GUI. Contributed by Jérémie Lesage (jeremie.lesage at jeci.fr)
  • Bug 58300Make existing Java Samplers implement Interruptible
  • Bug 58160JMS Publisher : reload file content if file name changes. Based partly on a patch contributed by Maxime Chassagneux (maxime.chassagneux at gmail.com)
  • Bug 58786JDBC Sampler : Replace Excalibur DataSource by more up to date library commons-dbcp2
  • Bug 59205TCP Sampler: Set connect time in sampler when connection is established.
  • Bug 59381JMSPublisher : FileChooserDialog filter does not work for browser buttons. Based partly on a patch contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 58406IfController : Allow use of Nashorn Engine if available for JavaScript evaluation
  • Bug 58281RandomOrderController : Improve randomization algorithm performance. Contributed by Graham Russell (jmeter at ham1.co.uk)
  • Bug 58675Module controller : error message can easily be missed. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58673Module controller : when the target element is disabled the default jtree icons are displayed. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58674Module controller : it should not be possible to select more than one node in the tree. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58680Module Controller : ui enhancement. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58989Record controller gui : add a button to clear all the recorded samples. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58041Tree View Listener should show sample data type
  • Bug 58122GraphiteBackendListener : Add Server Hits metric. Partly based on a patch from Amol Moye (amol.moye at thomsonreuters.com)
  • Bug 58681GraphiteBackendListener : Don’t send data if no sampling occurred
  • Bug 58776Summariser should display a more readable duration
  • Bug 58791Deprecate listeners: Distribution Graph (alpha) and Spline Visualizer
  • Bug 58849View Results Tree : Add a search panel to the request http view to be able to search in the parameters table. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58857View Results Tree : the request view http does not allow to resize the parameters table first column. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58955Request view http does not correctly display http parameters in multipart/form-data. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 55597View Results Tree: Add a search feature to search in recorded samplers
  • Bug 59102View Results Tree: Better default value for “view.results.tree.max_size
  • Bug 59099Backend listener : Add the possibility to consider samplersList as a Regular Expression. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 59424Visualizer : Add “Clear” in popup menu

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

Section titled “Timers, Assertions, Config, Pre- & Post-Processors”
  • Bug 58303Change usage of bouncycastle api in SMIMEAssertion to get rid of deprecation warnings.
  • Bug 58515New JSON related components : JSON-PATH Extractor and JSON-PATH Renderer in View Results Tree. Donated by Ubik Load Pack (support at ubikloadpack.com).
  • Bug 58698Correct parsing of auth-files in HTTP Authorization Manager.
  • Bug 58756CookieManager : Cookie Policy select box content must depend on Cookie implementation.
  • Bug 56358Cookie manager supports cross port cookies and RFC6265. Thanks to Oleg Kalnichevski (olegk at apache.org)
  • Bug 58773TestCacheManager : Add tests for CacheManager that use HttpClient 4
  • Bug 58742CompareAssertion : Reset data in TableEditor when switching between different CompareAssertions in gui. Based on a patch by Vincent Herilier (vherilier at gmail.com)
  • Bug 59108TableEditor: Allow rows to be moved up and down. Contributed by Vincent Herilier (vherilier at gmail.com)
  • Bug 58848Argument Panel : when adding an argument (add button or from clipboard) scroll the table to the new line. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58865Allow empty default value in the Regular Expression Extractor. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59156XMLAssertion : drop jdom dependency by using XMLReader
  • Bug 59328Better tooltip for Variable Names in CSVDataSet. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 58477 __javaScript function : Allow use of Nashorn engine for Java8 and later versions
  • Bug 58903Provide __jexl3 function that uses commons-jexl3 and deprecated __jexl (1.1) function
  • Bug 58736Add Sample Timeout support
  • Bug 57913Automated backups of last saved JMX files. Contributed by Benoit Vatan (benoit.vatan at gmail.com)
  • Bug 57988Shortcuts (Ctrl + 1Ctrl + 9) to quickly add elements into test plan. Implemented by Andrey Pokhilko (andrey at blazemeter.com) and contributed by BlazeMeter Ltd.
  • Bug 58100Performance enhancements : Replace Random by ThreadLocalRandom.
  • Bug 58677TestSaveService#testLoadAndSave use the wrong set of files. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58689Add shortcuts to expand / collapse a part of the tree. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58696Create Ant task to setup Eclipse project
  • Bug 58653New JMeter Dashboard/Report with Dynamic Graphs, Tables to help analyzing load test results. Developed by Ubik-Ingenierie and contributed by Decathlon S.A. and Ubik-Ingenierie / UbikLoadPack
  • Bug 58699Workbench changes neither saved nor prompted for saving upon close. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58728Drop old behavioural properties
  • Bug 57319Upgrade to HttpClient 4.5.2. With the big help from Oleg Kalnichevski (olegk at apache.org) and Gary Gregory (ggregory at apache.org).
  • Bug 58772Deprecate MongoDB related elements
  • Bug 58782ThreadGroup : Improve ergonomy
  • Bug 58165Show the time elapsed since the start of the load test in GUI mode. Partly based on a contribution from Maxime Chassagneux (maxime.chassagneux at gmail.com)
  • Bug 58814JVM no longer recognizes option MaxLiveObjectEvacuationRatio; remove from comments
  • Bug 58810Config Element Counter (and others): Check Boxes Toggle Area Too Big
  • Bug 56554JSR223 Test Element : Generate compilation cache key automatically. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58911Header Manager : it should be possible to copy/paste between Header Managers. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58864Arguments Panel : when moving parameter with up / down, ensure that the selection remains visible. Based on a contribution by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58968Add a new template to allow to record script with think time included. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 58978Settings defaults : Switch “jmeter.save.saveservice.assertion_results_failure_message” to true (after 2.13)
  • Bug 58991Settings defaults : Switch “jmeter.save.saveservice.print_field_names” to true (after 2.13)
  • Bug 57182Settings defaults : Switch “jmeter.save.saveservice.idle_time” to true (after 2.13)
  • Bug 58870TableEditor: minimum size is too small. Contributed by Vincent Herilier (vherilier at gmail.com)
  • Bug 58933JSyntaxTextArea : Ability to set font. Contributed by Denis Kirpichenkov (denis.kirpichenkov at gmail.com)
  • Bug 58793Create developers page explaining how to build and contribute
  • Bug 59046JMeter Gui Replace controller should keep the name and the selection. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59038Deprecate HTTPClient 3.1 related elements
  • Bug 59094Drop support of old JMX file format
  • Bug 59082Remove the “TestCompiler.useStaticSet” parameter. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59093Option parsing error message can be ‘lost
  • Bug 58715Feature request: Bundle groovy-all with JMeter
  • Bug 58426Improve display of JMeter on high resolution devices (HiDPI) (part 1 of enhancement)
  • Bug 59105TableEditor : Add ability to paste rows from clipboard and delete multiple selection. Contributed by Vincent Herilier (vherilier at gmail.com)
  • Bug 59197Thread Group : it should be possible to only run a single threadgroup or a selection of threadgroups with a popup menu. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59207Change the font color of errorsOrFatalsLabel to red when an error occurs. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 58941Create a new Starter that runs thread groups in validation mode (1 thread only, 1 iteration, no pause all customizable)
  • Bug 59236JMeter Properties : Make some cleanup
  • Bug 59240Introduce a slf4j adapter for Logkit (this allows using slf4j within plugins and core code)
  • Bug 59153Stop test if CSVDataSet is accessing non-existing file. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 59320Better tooltip in GUI with GenericTestBeanCustomizer (CSV Data Set Config, JDBC Connection Configuration, Keystore Configuration, …) . Based on a patch by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 59171Sample Result SaveConfig Dialog is generated in random order
  • Bug 59425Display error about missing help page inside the help pane
  • Bug 57806audio/x-mpegurl” mime type is erroneously considered as binary by ViewResultsTree. Contributed by Ubik Load Pack (support at ubikloadpack.com).
  • Bug 57858Don’t call sampleEnd twice in HTTPHC4Impl when a RuntimeException or an IOException occurs in the sample method.
  • Bug 57921HTTP/1.1 without keep-alive “Connection” response header no longer uses infinite keep-alive.
  • Bug 57956The hc.parameters reference in jmeter.properties doesn’t work when JMeter is not started in bin.
  • Bug 58137JMeter fails to download embedded URLs that contain illegal characters in URL (it does not escape them).
  • Bug 58201Make usage of port in the host header more consistent across the different http samplers.
  • Bug 58453HTTP Test Script Recorder : NullPointerException when disabling Capture HTTP Headers
  • Bug 57804HTTP Request doesn’t reuse cached SSL context when using Client Certificates in HTTPS (only fixed for HttpClient4 implementation)
  • Bug 58800proxy.pause default value: fix documentation
  • Bug 58844Buttons enable / disable is broken in the arguments panel. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58861When clicking on up, down or detail while in a cell of the argument panel, newly added content is lost. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 57935SSL SNI extension not supported by HttpClient 4.2.6
  • Bug 59044Http Sampler : It should not be possible to select the multipart encoding if the method is not POST. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59008Http Sampler: Infinite recursion SampleResult on frame depth limit reached
  • Bug 58881HTTP Request : HTTPHC4Impl shows exception when server uses “deflate” compression
  • Bug 58583HTTP client fails to close connection if server misbehaves by not sending “connection: close”, violating HTTP RFC 2616 / RFC 7230
  • Bug 58950NoHttpResponseException when Pause between samplers exceeds keepalive sent by server
  • Bug 59085Http file panel : data lost on browse cancellation. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 56141Application does not behave correctly when using HTTP Recorder. With the help of Dan (java.junkee at yahoo.com)
  • Bug 59079httpsampler.max_redirects” property is not enforced when “Redirect Automatically” is used
  • Bug 58811When pasting arguments between http samplers the column “Encode” and “Include Equals” are lost. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58013Enable all protocols that are enabled on the default SSLContext for usage with the SMTP Sampler.
  • Bug 58209JMeter hang when testing javasampler because HashMap.put() is called from multiple threads without sync.
  • Bug 58301Use typed methods such as setInt, setDouble, setDate, … for prepared statement #27
  • Bug 58851Add a dependency on hamcrest-core to allow JUnit tests with annotations to work
  • Bug 58947Connect metric is wrong when ConnectException occurs
  • Bug 58980JMS Subscriber will return successful as long as 1 message is received. Contributed by Harrison Termotto (harrison dot termotto at stonybrook.edu)
  • Bug 59075JMS Publisher: NumberFormatException is thrown if priority or expiration field is empty
  • Bug 59345SMTPSampler connection leak. Based on a patch by Luca Maragnani (luca dot maragnani at gmail dot com)
  • Bug 58600Display correct filenames, when they are searched by IncludeController
  • Bug 58678Module Controller : limit target element selection. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58714Module controller : it should not be possible to add a timer as child. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59067JMeter fails to iterate over Controllers that are children of a TransactionController having “Generate parent sample” checked after an assertion error occurs on a Thread Group with “Start Next Thread Loop”. Contributed by Benoit Wiart(benoit dot wiart at gmail.com)
  • Bug 59076Test should fail if a module controller cannot find its replacement subtree
  • Bug 58033SampleResultConverter should note that it cannot record non-TEXT data
  • Bug 58845Request http view doesn’t display all the parameters. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58413ViewResultsTree : Request HTTP Renderer does not show correctly parameters that contain ampersand (&). Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59172SampleResult SaveConfig does not allow some fields to be disabled
  • Bug 58329Response Time Graph and Aggregate Graph : Save graph to file does not take into account the settings changed since last click on Graph. Contributed by David Coppens (d.l.coppens at gmail.com)

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

Section titled “Timers, Assertions, Config, Pre- & Post-Processors”
  • Bug 58079Do not cache HTTP samples that have a Vary header when using a HTTP CacheManager.
  • Bug 58912Response assertion gui : Deleting more than 1 selected row deletes only one row. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 57825__Random function fails if min value is equal to max value (regression related to Bug 54453)
  • Bug 54826Don’t fail on long strings in JSON responses when displaying them as JSON in View Results Tree.
  • Bug 57734Maven transient dependencies are incorrect for 2.13 (Fixed group ids for Commons Pool and Math)
  • Bug 57731TESTSTART.MS has always the value of the first Test started in Server mode in NON GUI Distributed testing
  • Bug 58016 Error type casting using external SSL Provider. Contributed by Kirill Yankov (myworkpostbox at gmail.com)
  • Bug 58293SOAP/XML-RPC Sampler file browser generates NullPointerException
  • Bug 58685JDatefield : Make the modification of the date with up/down arrow work. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58693Fix “Cannot nest output folder ‘jmeter/build/components’ inside output folder ‘jmeter/build’” when setting up eclipse
  • Bug 58781Command line option “-?” shows Unknown option
  • Bug 57821Command-line option “-X --remoteexit” doesn’t work since 2.13 (regression related to Bug 57500)
  • Bug 58795NPE may occur in GuiPackage#getTestElementCheckSum with some 3rd party plugins
  • Bug 58913When closing JMeter should not interpret cancel as “destroy my test plan”. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59096Search Feature : Case insensitive search is not really case insensitive
  • Bug 59193ant run_gui fails with ClassNotFoundException or IllegalAccessError when accessing classes from dependencies not loaded through Thread.currentThread().getContextClassLoader()
  • Bug 59225Bad display of running indicator icon. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Bug 56927Disable language change during a test
  • Bug 59391In Distributed mode, the client exits abnormally at the end of test
  • Bug 59397build.xml does not make dist.executables executable on Unix systems
  • Updated to httpclient, httpmime 4.5.2 (from 4.2.6)
  • Updated to tika-core and tika-parsers 1.12 (from 1.7)
  • Updated to commons-math3 3.6.1 (from 3.4.1)
  • Updated to commons-pool2 2.4.2 (from 2.3)
  • Updated to commons-lang 3.4 (from 3.3.2)
  • Updated to rhino-1.7.7.1 (from 1.7R5)
  • Updated to jodd-3.6.7.jar (from 3.6.4)
  • Updated to jsoup-1.8.3 (from 1.8.1)
  • Updated to rsyntaxtextarea-2.5.8 (from 2.5.6)
  • Updated to slf4j-1.7.12 (from 1.7.10)
  • Updated to xmlgraphics-commons-2.0.1 (from 1.5)
  • Updated to commons-collections-3.2.2 (from 3.2.1)
  • Updated to commons-net 3.4 (from 3.3)
  • Updated to slf4j 1.7.13 (from 1.7.12)
  • Bug 57981Require a minimum of Java 7. Partly contributed by Graham Russell (jmeter at ham1.co.uk)
  • Bug 58684JMeterColor does not need to extend java.awt.Color. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58687ButtonPanel should die. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58705Make org.apache.jmeter.testelement.property.MultiProperty iterable. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58729Cleanup extras folder for maintainability
  • Bug 57110Fixed spelling+grammar, formatting, removed commented out code etc. Contributed by Graham Russell (jmeter at ham1.co.uk)
  • Correct instructions on running JMeter in help.txt. Contributed by Pascal Schumacher (pascalschumacher at gmx.net)
  • Bug 58704Non regression testing : Ant task batchtest fails if tests and run in a non en_EN locale and use a JMX file that uses a CSV DataSet
  • Bug 58897Improve JUnit Test code. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58949Cleanup of LDAP code. Based on a patch by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58897Improve JUnit Test code. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58967Use JUnit categories to exclude tests that need a gui. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59003ClutilTestCase testSingleArg8 and testSingleArg9 are identical
  • Bug 59064Remove OldSaveService which supported very old Avalon format JTL (result) files
  • Bug 59165RSyntaxTextArea not compatible with headless testing
  • Bug 59021Use Double#compare instead of reimplementing it in NumberProperty#compareTo
  • Bug 59037Drop HtmlParserHTMLParser and dependencies on htmlparser and htmllexer
  • Bug 58465JMS Read response field is badly named and documented
  • Bug 58601Change check for modification of saveservice.properties from SVN Revision ID to sha1 sum of the file itself.
  • Bug 58726Remove the jmeterthread.startearlier parameter. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 58784Make JMeterUtils#runSafe sync/async awt invocation configurable and change the visualizers to use the async version.
  • Bug 58790Issue in CheckDirty and its relation to ActionRouter
  • Bug 59095Remove UserParameterXMLParser that was deprecated eight years ago. Contributed by Benoit Wiart (benoit dot wiart at gmail.com)
  • Bug 59262Add list of binary jars to LICENSE; use that for unit tests
  • Bug 59353Add “Deprecated and removed elements” in “Incompatible changes” part in changes.xml. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)

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

  • Ubik Load Pack
  • Benoit Vatan (benoit.vatan at gmail.com)
  • Jérémie Lesage (jeremie.lesage at jeci.fr)
  • Kirill Yankov (myworkpostbox at gmail.com)
  • Amol Moye (amol.moye at thomsonreuters.com)
  • Samoht-fr (https://github.com/Samoht-fr)
  • Graham Russell (jmeter at ham1.co.uk)
  • Maxime Chassagneux (maxime.chassagneux at gmail.com)
  • Benoit Wiart (benoit.wiart at gmail.com)
  • Decathlon S.A.
  • Ubik-Ingenierie S.A.S.
  • Oleg Kalnichevski (olegk at apache.org)
  • Pascal Schumacher (pascalschumacher at gmx.net)
  • Vincent Herilier (vherilier at gmail.com)
  • Florent Sabbe (f dot sabbe at ubik-ingenierie.com)
  • Antonio Gomes Rodrigues (ra0077 at gmail.com)
  • Harrison Termotto (harrison dot termotto at stonybrook.edu
  • Denis Kirpichenkov (denis.kirpichenkov at gmail.com)
  • Gary Gregory (ggregory at apache.org)
  • David Coppens (d.l.coppens at gmail.com)
  • Luca Maragnani (luca dot maragnani at gmail dot com)
  • Philip Helger (http://www.helger.com) for his CSS Parser and for taking into account our bug reports very rapidly
  • Irek Pastusiak (the.automatic.tester at gmail.com)

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:

  • purnasatyap at gmail dot com for the tests and reports on nightly build
  • Sergey Batalin (sergey_batalin at mail dot ru) for the tests and reports on nightly build
  • Vincent Daburon (vdaburon at gmail dot com) for the tests and reports on nightly build

Apologies if we have omitted anyone else.

Test plan creation and debugging improvements

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

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

changes/3.0/view_results_tree_search_feature.png

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

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

changes/3.0/json_path_extractor.png

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

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

changes/3.0/thread_group_validate.png

JSR223 Test Elements do not require a Cache Compilation Key anymore

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

changes/3.0/jsr223_cache_compiled.png

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

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

  • IfController
  • JSR223 Test elements with javascript language selected
  • __javaScript function

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

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

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.

changes/3.0/http_request_basic.png

changes/3.0/http_request_advanced.png

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

changes/3.0/http_request_defaults_advanced.png

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

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

  • APDEX (Application Performance Index) table that computes the APDEX based on configurable values for tolerated and satisfied thresholds
  • A request summary graph showing the Success and failed transaction percentage: changes/3.0/report_apdex_and_summary.png
  • A Statistics table providing in one table a summary of all metrics per transaction including 3 configurable percentiles : changes/3.0/report_statistics.png
  • An error table providing a summary of all errors and their proportion in the total requests : changes/3.0/report_errors.png
  • Zoomable chart where you can check/uncheck every transaction to show/hide it for: - Response times Over Time : changes/3.0/report_response_times_over_time.png - Bytes throughput Over Time : changes/3.0/report_bytes_throughput_over_time.png - Latencies Over Time : changes/3.0/report_latencies_over_time.png - Hits per second : changes/3.0/report_hits_per_second.png - Response codes per second : changes/3.0/report_codes_per_second.png - Transactions per second : changes/3.0/report_transactions_per_second.png - Response Time vs Request per second : changes/3.0/report_response_time_vs_request.png - Latency vs Request per second : changes/3.0/report_latencies_vs_request.png - Response times percentiles : changes/3.0/report_response_time_percentiles.png - Active Threads Over Time : changes/3.0/report_active_threads_over_time.png - Times vs Threads : changes/3.0/report_time_vs_threads.png - Response Time Distribution : changes/3.0/report_response_time_distribution.png

GraphiteBackendListener has a new Server Hits metric

Section titled “GraphiteBackendListener has a new Server Hits metric”

Summariser displays a more readable duration

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

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

changes/3.0/graphite_backend_listener_regex.png

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

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

  • Support of recent RFC like HTTP State Management Mechanism RFC-6265 for Cookies, you should use now HC4CookieHandler in HTTP Cookie Manager component and select standard Cookie policy
  • Server Name Indication (SNI) support for HttpClient4 implementation
  • Improved and better performing validation mechanism for Stale connections and Keep-Alive management, see properties httpclient4.validate_after_inactivity and httpclient4.time_to_live
  • Many bug fixes since previous version 4.2.6 used in JMeter 2.13, see HttpClient 4.5.X release notes
  • Better support of HTTP RFC 2616 / RFC 7230 and fixes to issues with deflate compression management

Parallel Downloads is now realistic and scales much better:

Section titled “Parallel Downloads is now realistic and scales much better:”
  • Parsing of CSS imported files (through @import) or embedded resources (background, images, …)
  • Lazy initialization of SSL context: For 15 Threads 138% more sampling in 5 minutes for HTTP only tests. Gain increases as number of threads increases
  • Rework of Connection management for Parallel Download: This better simulates current browser behaviour and improves throughput. For 15 Threads 135% extra samples in 5 minutes.
  • Reuse of Threads used for Parallel downloads through a ThreadPool: This improves throughput and increases JMeter scalability for such tests
  • Total of 750% more throughput found on test with 15 threads, the more threads you have the more the gain
  • You can now compute and store just the MD5 of embedded resources instead of storing the entire response, this can be done by setting the property httpsampler.embedded_resources_use_md5=true

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.

changes/3.0/sample_timeout.png

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.

changes/3.0/jdbc_connection_configuration.png

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

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

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

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

changes/3.0/thread_group_starters.png

  • Add most used elements (Ctrl + 0Ctrl + 9), configurable through gui.quick__XXX_ properties
  • Shortcuts to expand nodes

Configuration simplification with better defaults

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

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.

  • Migration to Java7 source code and use of its syntactic sugar
  • Major code cleanups
  • Full review of documentation and improvement both in content and presentation
  • Migration of many tests to JUnit 4
  • Better management of Headless tests
  • More Unit Tests

Deprecated Libraries dropped or replaced by up to date ones:

  • Excalibur replaced by commons-dbcp
  • htmllexer, htmlparser removed
  • soap removed
  • jdom removed

Slf4j can now be used within Plugins and core code

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

On this page