Apache JMeter

About

Download

Documentation

Tutorials (PDF format)

Community

Foundation


Changes

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

Version 2.10



New and Noteworthy



Core Improvements


New Performance improvements

  • A Huge performance improvement has been made on High Throughput Tests (no pause), see Bug 54777
  • An issue with unnecessary SSL Context reset has been fixed which improves performances of pure HTTP tests, see Bug 55023
  • Important performance improvement in parsing of Embedded resource in HTML pages thanks to a switch to JODD/Lagarto HTML Parser, see Bug 55632


New CSS/JQuery Tester in View Tree Results

A new CSS/JQuery Tester in View Tree Results that makes CSS/JQuery Extractor a first class citizen in JMeter, you can now test your expressions very easily



Many improvements in HTTP(S) Recording have been made


The "HTTP Proxy Server" test element has been renamed as "HTTP(S) Test Script Recorder".


You can now load test MongoDB through new MongoDB Source Config




Kerberos authentication has been added to Auth Manager



Device can now be used in addition to source IP address



You can now do functional testing of MongoDB scripts through new MongoDB Script



Timeout has been added to OS Process Sampler



Query timeout has been added to JDBC Request



New functions (__urlencode and __urldecode) are now available to encode/decode URL encoded chars



Continuous Integration is now eased by addition of a new flag that forces NON-GUI JVM to exit after test end

See jmeter property:

jmeterengine.force.system.exit


HttpSampler now allows DELETE Http Method to have a body (works for HC4 and HC31 implementations). This allows for example to test Elastic Search APIs



2 implementations of HtmlParser have been added to improve Embedded resources parsing

You can choose the implementation to use for parsing Embedded resources in HTML pages: See jmeter.properties and look at property "htmlParser.className".

  • org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser for optimal performances
  • org.apache.jmeter.protocol.http.parser.JSoupBasedHtmlParser for most accurate parsing and functional testing


Distributed testing has been improved

  • Number of threads on each node are now reported to controller.



  • Performance improvement on BatchSampleSender( Bug 55423 )
  • Addition of 2 SampleSender modes (StrippedAsynch and StrippedDiskStore), see jmeter.properties


ModuleController has been improved to better handle changes to referenced controllers

Improved class loader configuration, see

  • New property "plugin_dependency_paths" for plugin dependencies
  • Properties "search_paths", "user.classpath" and "plugin_dependency_paths" now automatically add all jars from configured directories


Best-practices section has been improved, ensure you read it to get the most out of JMeter

See Best Practices



GUI and ergonomy Improvements


New Templates feature that allows you to create test plan from existing template or merge template into your Test Plan




Workbench can now be saved



Syntax color has been added to scripts elements (BeanShell, BSF, and JSR223), MongoDB and JDBC elements making code much more readable and allowing UNDO/REDO through CTRL+Z/CTRL+Y

BSF Sampler with syntax color


JSR223 Pre Processor with syntax color



Better editors are now available for Test Elements with large text content, like HTTP Sampler, and JMS related Test Element providing line numbering and allowing UNDO/REDO through CTRL+Z/CTRL+Y

JMeter GUI can now be fully Internationalized, all remaining issues have been fixed
Currently French has all its labels translated. Other languages are partly translated, feel free to contribute translations by reading Localisation (Translator's Guide)

Moving elements in Test plan has been improved in many ways
Drag and drop of elements in Test Plan tree is now much easier and possible on multiple nodes


Note that due to this bug in Java , you cannot drop a node after last node. The workaround is to drop it before this last node and then Drag and Drop the last node before the one you just dropped.

New shortcuts have been added to move elements in the tree.

(alt + Arrow Up) and (alt + Arrow Down) move the element within the parent node
(alt + Arrow Left) and (alt + Arrow Right) move the element up and down in the tree depth


Response Time Graph Y axis can now be scaled



JUnit Sampler gives now more details on configuration errors


Known bugs

  • The Once Only controller behaves correctly under a Thread Group or Loop Controller, but otherwise its behaviour is not consistent (or clearly specified).
  • Listeners don't show iteration counts when a If Controller has a condition which is always false from the first iteration (see Bug 52496 ). A workaround is to add a sampler at the same level as (or superior to) the If Controller. For example a Test Action sampler with 0 wait time (which doesn't generate a sample), or a Debug Sampler with all fields set to False (to reduce the sample size).
  • Webservice sampler does not consider the HTTP response status to compute the status of a response, thus a response 500 containing a non empty body will be considered as successful, see Bug 54006 . To workaround this issue, ensure you always read the response and add a Response Assertion checking text inside the response.
  • The numbers that appear to the left of the green box are the number of active threads / total number of threads, these only apply to a locally run test; they do not include any threads started on remote systems when using client-server mode, (see Bug 54152 ).
  • 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.
  • With Java 1.6 and Gnome 3 on Linux systems, the JMeter menu may not work correctly (shift between mouse's click and the menu). This is a known Java bug (see Bug 54477 ). A workaround is to use a Java 7 runtime (OpenJDK or Oracle JDK).
  • 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.


Incompatible changes

  • SMTP Sampler now uses eml file subject if subject field is empty
  • With this version autoFlush has been turned off on PrintWriter in charge of writing test results. This results in improved throughput for intensive tests but can result in more test data loss in case of JMeter crash (extremely rare). To revert to previous behaviour set jmeter.save.saveservice.autoflush property to true .
  • Shortcut for Function Helper Dialog is now CTRL+SHIFT+F1 (CMD + SHIFT + F1 for Mac OS) . The original key sequence (Ctrl+F1) did not work in some locations (it is consumed by the Java Swing ToolTipManager). It was therefore necessary to change the shortcut.
  • Webservice (SOAP) Request has been removed by default from GUI as Element is deprecated. (Use HTTP Request with Body Data , see also the Template Building a SOAP Webservice Test Plan ), if you need to show it, see property not_in_menu in jmeter.properties
  • Transaction Controller now sets Response Code of Generated Parent Sampler (if Generated Parent Sampler is checked) to response code of first failing child in case of failure of one of the children, in previous versions Response Code was empty.
  • In previous versions, IncludeController could run Test Elements located inside a Thread Group , this behaviour ( which was not documented ) ould result in weird behaviour, it has been removed in this version (see Bug 55464 ). The correct way to include Test Elements is to use Test Fragment as stated in documentation of Include Controller .
  • The retry count for the HttpClient 3.1 and HttpClient 4.x samplers has been changed to 0 . Previously the default was 1, which could cause unexpected additional traffic.
  • Starting with this version, the HTTP(S) Test Script Recorder tries to detect when a sample is the result of a previous redirect. If the current response is a redirect, JMeter will save the redirect URL. When the next request is received, it is compared with the saved redirect URL and if there is a match, JMeter will disable the generated sample. To revert to previous behaviour, set the property proxy.redirect.disabling=false
  • Starting with this version, in HTTP(S) Test Script Recorder if Grouping is set to Put each group in a new Transaction Controller , the Recorder will create Transaction Controller instances with Include duration of timer and pre-post processors in generated sample set to false. This default value reflect more accurately response time.
  • __escapeOroRegexpChars function (which escapes ORO reserved characters) no longer trims the value (see Bug 55328 )
  • The commons-lang-2.6.jar has been removed from embedded libraries in jmeter/lib folder as it is not needed by JMeter at run-time (it is only used by Apache Velocity for generating documentation). If you use any plugin or third-party code that depends on it, you need to add it in jmeter/lib folder


Bug fixes

HTTP Samplers and Proxy

  • Bug 54627 - JMeter Proxy GUI: Type of sampler setting takes the whole screen when there are samplers with long names.
  • Bug 54629 - HTMLParser does not extract <object> tag urls.
  • Bug 55023 - SSL Context reuse feature (51380) adversely affects non-ssl request performance/throughput. based on analysis by Brent Cromarty (brent.cromarty at yahoo.ca)
  • Bug 55092 - Log message "WARN - jmeter.protocol.http.sampler.HTTPSamplerBase: Null URL detected (should not happen)" displayed when embedded resource URL is malformed.
  • Bug 55161 - Useless processing in SoapSampler.setPostHeaders. Contributed by Adrian Nistor (nistor1 at illinois.edu)
  • Bug 54482 - HC fails to follow redirects with non-encoded chars.
  • Bug 54142 - HTTP Proxy Server throws an exception when path contains "|" character.
  • Bug 55388 - HC3 does not allow IP Source field to override httpclient.localaddress.
  • Bug 55450 - HEAD redirects should remain as HEAD
  • Bug 55455 - HTTPS with HTTPClient4 ignores cps setting
  • Bug 55502 - Proxy generates empty http:/ entries when recording
  • Bug 55504 - Proxy incorrectly issues CONNECT requests when browser prompts for certificate override
  • Bug 55506 - Proxy should deliver failed requests to any configured Listeners
  • Bug 55545 - HTTP Proxy Server GUI should not allow both Follow and Auto redirect to be selected

Other Samplers

  • Bug 54913 - JMSPublisherGui incorrectly restores its state. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 55027 - Test Action regression, duration value is not recorded (nightly build).
  • Bug 55163 - BeanShellTestElement fails to quote string when calling testStarted(String)/testEnded(String).
  • Bug 55349 - NativeCommand hangs if no input file is specified and the application requests input.
  • Bug 55462 - System Sampler should not change the sampler label if a sample fails

Controllers

  • Bug 54467 - Loop Controller: compute loop value only once per parent iteration.
  • Bug 54985 - Make Transaction Controller set Response Code of Generated Parent Sampler to response code of first failing child in case of failure of one of its children. Contributed by Mikhail Epikhin (epihin-m at yandex.ru)
  • Bug 54950 - ModuleController : Changes to referenced Module are not taken into account if changes occur after first run and referenced node is disabled.
  • Bug 55201 - ForEach controller excludes start index and includes end index (clarified documentation).
  • Bug 55334 - Adding Include Controller to test plan (made of Include Controllers) without saving TestPlan leads to included code not being taken into account until save.
  • Bug 55375 - StackOverflowError with ModuleController in Non-GUI mode if its name is the same as the target node.
  • Bug 55464 - Include Controller running included thread group

Listeners

  • Bug 54589 - View Results Tree have a lot of Garbage characters if html page uses double-byte charset.
  • Bug 54753 - StringIndexOutOfBoundsException at SampleResult.getSampleLabel() if key_on_threadname=false when using Statistical mode.
  • Bug 54685 - ArrayIndexOutOfBoundsException if "sample_variable" is set in client but not server.
  • Bug 55111 - ViewResultsTree: text not refitted if vertical scrollbar is required. Contributed by Milamber

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

  • Bug 54540 - "HTML Parameter Mask" are not marked deprecated in the IHM.
  • Bug 54575 - CSS/JQuery Extractor : Choosing JODD Implementation always uses JSOUP.
  • Bug 54901 - Response Assertion GUI behaves weirdly.
  • Bug 54924 - XMLAssertion uses JMeter JVM file.encoding instead of response encoding and does not clean threadlocal variable.
  • Bug 53679 - Constant Throughput Timer bug with localization. Reported by Ludovic Garcia

Functions

  • Bug 55328 - __escapeOroRegexpChars trims spaces.

I18N

  • Bug 55437 - ComboStringEditor does not translate EDIT and UNDEFINED strings on language change
  • Bug 55501 - Incorrect encoding for French description of __char function. Contributed by Antonio Gomes Rodrigues (ra0077 at gmail.com)

General

  • Bug 54504 - Resource string not found: [clipboard_node_read_error].
  • Bug 54538 - GUI: context menu is too big.
  • Bug 54847 - Cut & Paste is broken with tree multi-selection. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 54870 - Tree drag and drop may lose leaf nodes (affected nightly build). Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 55056 - wasted work in Data.append(). Contributed by Adrian Nistor (nistor1 at illinois.edu)
  • Bug 55129 - Change Javadoc generation per CVE-2013-1571, VU#225657.
  • Bug 55187 - Integer overflow when computing ONE_YEAR_MS in HTTP CacheManager.
  • Bug 55208 - JSR223 language entries are duplicated; fold to lower case.
  • Bug 55203 - TestBeanGUI - wrong language settings found.
  • Bug 55065 - Useless processing in Spline3.converge(). Contributed by Adrian Nistor (nistor1 at illinois.edu)
  • Bug 55064 - Useless processing in ReportTreeListener.isValidDragAction(). Contributed by Adrian Nistor (nistor1 at illinois.edu)
  • Bug 55242 - BeanShell Client jar throws exceptions after upgrading to 2.8.
  • Bug 55288 - JMeter should default to 0 retries for HTTP requests.
  • Bug 55405 - ant download_jars task fails if lib/api or lib/doc are missing. Contributed by Antonio Gomes Rodrigues.
  • Bug 55427 - TestBeanHelper should ignore properties not supported by GenericTestBeanCustomizer
  • Bug 55459 - Elements using ComboStringEditor lose the input value if user selects another Test Element
  • Bug 54152 - In distributed testing : activeThreads always show 0 in GUI and Summariser
  • Bug 55509 - Allow Plugins to be notified of remote thread number progression
  • Bug 55572 - Detail popup of parameter does not show a Scrollbar when content exceeds display
  • Bug 55580 - Help pane does not scroll to start for links
  • Bug 55600 - JSyntaxTextArea : Strange behaviour on first undo
  • Bug 55655 - NullPointerException when Remote stopping /shutdown all if one engine did not start correctly. Contributed by UBIK Load Pack (support at ubikloadpack.com)
  • Bug 55657 - Remote and Local Stop/Shutdown buttons state does not take into account local / remote status


Improvements

HTTP Samplers and Proxy

  • HTTP Request: Small user interaction improvements in Row parameter Detail Box. Contributed by Milamber
  • Bug 55255 - Allow Body in HTTP DELETE method to support API that use it (like ElasticSearch).
  • Bug 53480 - Add Kerberos support to Http Sampler (HttpClient4). Based on patch by Felix Schumacher (felix.schumacher at internetallee.de)
  • Bug 54874 - Support device in addition to source IP address. Based on patch by Dan Fruehauf (malkodan at gmail.com)
  • Bug 55488 - Add .ico and .woff file extension to default suggested exclusions in proxy recorder. Contributed by Antonio Gomes Rodrigues
  • Bug 55525 - Proxy should support alias for keyserver entry
  • Bug 55531 - Proxy recording and redirects. Added code to disable redirected samples.
  • Bug 55507 - Proxy SSL recording does not handle external embedded resources well
  • Bug 55632 - Have a new implementation of htmlParser for embedded resources parsing with better performances
  • Bug 55653 - HTTP(S) Test Script Recorder should set TransactionController property "Include duration of timer and pre-post processors in generated sample" to false

Other samplers

  • Bug 54788 - JMS Point-to-Point Sampler - GUI enhancements to increase readability and ease of use. Contributed by Bruno Antunes (b.m.antunes at gmail.com)
  • Bug 54798 - Using subject from EML-file for SMTP Sampler. Contributed by Mikhail Epikhin (epihin-m at yandex.ru)
  • Bug 54759 - SSLPeerUnverifiedException using HTTPS , property documented.
  • Bug 54896 - JUnit sampler gives only "failed to create an instance of the class" message with constructor problems.
  • Bug 55084 - Add timeout support for JDBC Request. Contributed by Mikhail Epikhin (epihin-m at yandex.ru)
  • Bug 55403 - Enhancement to OS sampler: Support for timeout
  • Bug 55518 - Add ability to limit number of cached PreparedStatements per connection when "Prepared Select Statement", "Prepared Update Statement" or "Callable Statement" query type is selected

Controllers

  • Bug 54271 - Module Controller breaks if test plan is renamed.

Listeners

  • Bug 54532 - Improve Response Time Graph Y axis scale with huge values or small values (< 1000ms). Add a new field to define increment scale. Contributed by Milamber based on patch by Luca Maragnani (luca.maragnani at gmail.com)
  • Bug 54576 - View Results Tree : Add a CSS/JQuery Tester.
  • Bug 54777 - Improve Performance of default ResultCollector. Based on patch by Mikhail Epikhin (epihin-m at yandex.ru)
  • Bug 55389 - Show IP source address in request data

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

  • Bug 54789 - XPath Assertion - GUI enhancements to increase readability and ease of use.

Functions

  • Bug 54991 - Add functions to encode/decode URL encoded chars (__urlencode and __urldecode). Contributed by Milamber.

I18N

  • Bug 55241 - Need GUI Editor to process fields which are based on Enums with localised display strings
  • Bug 55440 - ComboStringEditor should allow tags to be language dependent
  • Bug 55432 - CSV Dataset Config loses sharing mode when switching languages

General

  • Bug 54584 - MongoDB plugin. Based on patch by Jan Paul Ettles (janpaulettles at gmail.com)
  • Bug 54669 - Add flag forcing non-GUI JVM to exit after test. Contributed by Scott Emmons
  • Bug 42428 - Workbench not saved with Test Plan. Contributed by Dzmitry Kashlach (dzmitrykashlach at gmail.com)
  • Bug 54825 - Add shortcuts to move elements in the tree. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 54834 - Improve Drag & Drop in the jmeter tree. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 54839 - Set the application name on Mac. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 54841 - Correctly handle the quit shortcut on Mac Os (CMD-Q). Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 54844 - Set the application icon on Mac Os. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 54864 - Enable multi selection drag & drop in the tree without having to start dragging before releasing Shift or Control. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 54945 - Add Shutdown Hook to enable trapping kill or CTRL+C signals.
  • Bug 54990 - Download large files avoiding outOfMemory.
  • Bug 55085 - UX Improvement : Ability to create New Test Plan from Templates. Contributed by UBIK Load Pack (support at ubikloadpack.com)
  • Bug 55172 - Provide plugins a way to add Top Menu and menu items.
  • Bug 55202 - Add syntax color for scripts elements (BeanShell, BSF, and JSR223) and JDBC elements with RSyntaxTextArea. Contributed by Milamber based on patch by Marko Vlahovic (vlahovic74 at gmail.com)
  • Bug 55175 - HTTPHC4Impl refactoring to allow better inheritance.
  • Bug 55236 - Templates - provide button to reload template details.
  • Bug 55237 - Template system should support relative fileName entries.
  • Bug 55423 - BatchSampleSender: Reduce locking granularity by moving listener.processBatch outside of synchronized block
  • Bug 55424 - Add Stripping to existing SampleSenders
  • Bug 55451 - Test Element GUI with JSyntaxTextArea scroll down when text content is long enough to add a Scrollbar
  • Bug 55513 - StreamCopier cannot be used with System.err or System.out as it closes the output stream
  • Bug 55514 - SystemCommand should support arbitrary input and output streams
  • Bug 55515 - SystemCommand should support chaining of commands
  • Bug 55606 - Use JSyntaxtTextArea for Http Request, JMS Test Elements
  • Bug 55651 - Change JMeter application icon to Apache plume icon


Non-functional changes

  • Updated to jsoup-1.7.2
  • Bug 54776 - Update the dependency on Bouncy Castle to 1.48. Contributed by Emmanuel Bourg (ebourg at apache.org)
  • Updated to HttpComponents Client 4.2.6 (from 4.2.3)
  • Updated to HttpComponents Core 4.2.5 (from 4.2.3)
  • Updated to commons-codec 1.8 (from 1.6)
  • Updated to commons-io 2.4 (from 2.2)
  • Updated to commons-logging 1.1.3 (from 1.1.1)
  • Updated to commons-net 3.3 (from 3.1)
  • Updated to jdom-1.1.3 (from 1.1.2)
  • Updated to jodd-lagarto and jodd-core 3.4.8 (from 3.4.1)
  • Updated to junit 4.11 (from 4.10)
  • Updated to slf4j-api 1.7.5 (from 1.7.2)
  • Updated to tika 1.4 (from 1.3)
  • Updated to xmlgraphics-commons 1.5 (from 1.3.1)
  • Updated to xstream 1.4.4 (from 1.4.2)
  • Updated to BouncyCastle 1.49 (from 1.48)
  • Bug 54912 - JMeterTreeListener should use constants. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 54903 - Remove the dependency on the Activation Framework. Contributed by Emmanuel Bourg (ebourg at apache.org)
  • Moved commons-lang (2.6) to lib/doc as it's only needed by Velocity.
  • Re-organised and simplified NOTICE and LICENSE files.
  • Bug 55411 - NativeCommand could be useful elsewhere. Copied code to o.a.jorphan.exec.
  • Bug 55435 - ComboStringEditor could be simplified to make most settings final
  • Bug 55436 - ComboStringEditor should implement ClearGui
  • Bug 55463 - Component.requestFocus() is discouraged; use requestFocusInWindow() instead
  • Bug 55486 - New JMeter Logo. Contributed by UBIK Load Pack (support at ubikloadpack.com)
  • Bug 55548 - Tidy up use of TestElement.ENABLED; use TestElement.isEnabled()/setEnabled() throughout
  • Bug 55617 - Improvements to jorphan collection. Contributed by Benoit Wiart (benoit.wiart at gmail.com)
  • Bug 55623 - Invalid/unexpected configuration values should not be silently ignored
  • Bug 55626 - Rename HTTP Proxy Server as HTTP(S) Test Script Recorder


Thanks

We thank all contributors mentioned in bug and improvement sections above.
We also thank bug reporters who helped us improve JMeter.
For this release we want to give special thanks to the following reporters for the clear reports and tests made after our fixes:

  • Immanuel Hayden (immanuel.hayden at gmail.com)
  • Danny Lade (dlade at web.de)
  • Brent Cromarty (brent.cromarty at yahoo.ca)
  • Wolfgang Heider (wolfgang.heider at racon.at)
  • Shmuel Krakower (shmulikk at gmail.com)
Apologies if we have omitted anyone else.




Copyright © 1999-2013, Apache Software Foundation
Apache, Apache JMeter, JMeter, the Apache feather, and the Apache JMeter logo are trademarks of the Apache Software Foundation.