Apache JMeter


Changes

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

Version 5.6

Summary



New and Noteworthy



Improvements

Thread Groups

  • Issue #5682Pull request #717 - Open Model Thread Group: avoid skipping rows from CSV Data Set Config
  • Support custom thread group implementations in "Add think time" and "Save as test fragment" actions
  • Open Model Thread Group: interrupt pending HTTP requests and other Interruptible test elements on test stop

HTTP Samplers and Test Script Recorder

  • Pull request #5911 - Use Caffeine for caching HTTP headers instead of commons-collections4 LRUMap
  • Pull request #5947 - Fetch resources referenced in <link "rel"="preload"...> elements
  • Pull request #5869 - Allow more templates to format sampler names in the recorder: #{url}, #{method}, #{scheme}, #{host}, #{port}

Other samplers

  • Pull request #5909 - Use Caffeine for caching compiled scripts in JSR223 samplers instead of commons-collections4 LRUMap

Controllers

Listeners

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

Report / Dashboard

General

  • Pull request #5792 - Add KeyStroke for start_no_timers (Start no pauses: CRTL+SHIFT+n)
  • Pull request #5899 - Speed up CPU-bound tests by skipping recoverRunningVersion for elements that are shared between threads (the ones that implement NoThreadClone)
  • Pull request #5914 - Use Locale.ROOT instead of default locale for toUpperCase, and toLowerCase to avoid surprises with dotless I in tr_TR locale
  • Pull request #5885 - Use Java's ServiceLoader for loading plugins instead of classpath scanning. It enables faster startup
  • Pull request #5788 - FunctionProperty no longer caches the value. Previously it cached the values based on iteration number only which triggered wrong results on concurrent executions. The previous behavior can be temporary restored with function.cache.per.iteration property.
  • Pull request #5920 - Improve HTTP HeaderManager performance when it contains many headers: skip reinitialization on each iteration
  • Pull request #5920 - Use AtomicInteger and AtomicLong instead of synchronized primitives for JMeterContextService#numberOfThreads
  • Pull request #5920 - Cache bean properties in TestBeanHelper and avoid synchronization, so test plans with TestBean-based elements is faster
  • Pull request #5920 - Improve computation when many threads actively produce samplers by using LongAdder and similar concurrency classes to avoid synchronization in Calculator
  • Pull request #5920 - Reduce synchronization contention on AbstractTestElement that are shared between threads (the ones that implement NoThreadClone)
  • Pull request #5934 - Added caching for date formatters for __time function
  • Pull request #710 - Issue #5666Added Shortcut key event for Reset search: ctrl + alt + F, cmd + alt + F
  • Pull request #5959 - TestElement has been migrated to Kotlin, so nullable types are annotated better
  • Pull request #5944 - Add PI for declaring TestElement schemas so element properties are easier to access in code (see TestElementSchema, TestElement#getSchema(), TestElement#getProps())
  • Pull request #5944 - Enable usage of ${...} expressions for checkbox controls (see context menus for checkboxes, however, the individual components should be adapted individually)
  • Pull request #678 - Experimental Kotlin and Java DSL for programmatic test plan generation (see Creating a plan with Kotlin DSL)


Non-functional changes



Bug fixes

HTTP Samplers and Test Script Recorder

Other Samplers

Controllers

Listeners

  • Issue #5740Pull request #5741 - Fix Aggregated Graph component to cope with empty names of samplers
  • Issue #5807Fix an ArrayIndexOutOfBoundsException on HTTP parameters line on special case when key and value are empty, i.e.: "k1=v1&=&k2=v2"
  • Issue #5654Pull request #5785 - Fix InfluxDBRawBackendListenerClient missing data. Allow InfluxDB to insert multiple entries with the same timestamp but with different threadName. Contributed by Victor Peralta (vperaltac at github)

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

  • Pull request #5717 - Add jsonpath string to JSON Path Assertion error message so the error is easier to understand
  • Pull request #723 - Use correct number format on JSON Path Assertion. Contributed by andreaslind01 (andreaslind01 at gmail.com)

Functions

I18N

Report / Dashboard

  • Bug 66140 - Guess the delimiter of the CSV source, when configured one seems wrong. This is in line with the behaviour of CSVSaveService.

Documentation

  • Issue #5694Document changed formatter for __time(). A warning will be logged, if the code u is found in the format string, as the meaning for that code has changed from day-of-week to year.

General

  • Bug 66157 - Pull request #719 - Correct theme for darklaf on rsyntaxtextarea
  • Issue #5872Pull request #5874 - Trim name in Argument objects.
  • Pull request #693 - Avoid wrong results when Object.hashCode() happen to collide. Use IdentityHashMap instead of HashMap when key is TestElement
  • Refresh UI when dragging JMeter window from one monitor to another, so rich syntax text areas are properly editable after window movement
  • Pull request #5984 - AbstractTestElement#clone might produce non-identical clones if element constructor adds a non-default property value


Thanks

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

We also thank bug reporters who helped us improve JMeter.

Apologies if we have omitted anyone else.



Known problems and workarounds

  • The Once Only controller behaves correctly under a Thread Group or Loop Controller, but otherwise its behaviour is not consistent (or clearly specified).
  • The numbers that appear to the left of the green box are the number of active threads / total number of threads, the total number of threads only applies to a locally run test, otherwise it will show 0 (see Bug 55510 ).
  • Note that under some windows systems you may have this WARNING:
    java.util.prefs.WindowsPreferences
    WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0
    x80000002. Windows RegCreateKeyEx(…) returned error code 5.
    
    The fix is to run JMeter as Administrator, it will create the registry key for you, then you can restart JMeter as a normal user and you won't have the warning anymore.
  • You may encounter the following error:
    java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
    if you run a HTTPS request on a web site with a SSL certificate (itself or one of SSL certificates in its chain of trust) with a signature algorithm using MD2 (like md2WithRSAEncryption) or with a SSL certificate with a size lower than 1024 bits. This error is related to increased security in Java 8+.
    To allow you to perform your HTTPS request, you can downgrade the security of your Java installation by editing the Java jdk.certpath.disabledAlgorithms property. Remove the MD2 value or the constraint on size, depending on your case.
    This property is in this file:
    JAVA_HOME/jre/lib/security/java.security
    See Bug 56357 for details.
  • Under Mac OSX Aggregate Graph will show wrong values due to mirroring effect on numbers. This is due to a known Java bug, see Bug JDK-8065373 The fix is to use JDK8_u45 or later.
  • View Results Tree may fail to display some HTML code under HTML renderer, see Bug 54586 . This is due to a known Java bug which fails to parse "px" units in row/col attributes. See Bug JDK-8031109 The fix is to use JDK9 b65 or later.
  • JTable selection with keyboard (SHIFT + up/down) is totally unusable with Java 7 on Mac OSX. This is due to a known Java bug JDK-8025126 The fix is to use JDK 8 b132 or later.
  • Since Java 11 the JavaScript implementation Nashorn has been deprecated. Java will emit the following deprecation warnings, if you are using JavaScript based on Nashorn.
    Warning: Nashorn engine is planned to be removed from a future JDK release
    
    To silence these warnings, add -Dnashorn.args=--no-deprecation-warning to your Java arguments. That can be achieved by setting the enviroment variable JVM_ARGS
    export JVM_ARGS="-Dnashorn.args=--no-deprecation-warning"
    
  • With Java 15 the JavaScript implementation Nashorn has been removed. To add back a JSR-223 compatible JavaScript engine you have two options:
    Use Mozilla Rhino
    Copy rhino-engine-1.7.14.jar into $JMETER_HOME/lib/ext.
    Use OpenJDK Nashorn
    The OpenJDK Nashorn implementation comes as a module. To use it, you will have to download it and add it to the module path. A hacky way to download the version 15.0 (or later) and its dependencies and set the module path is outlined below:
    mkdir lib/modules
    pushd lib/modules
    wget https://repo1.maven.org/maven2/org/openjdk/nashorn/nashorn-core/15.3/nashorn-core-15.3.jar
    wget https://repo1.maven.org/maven2/org/ow2/asm/asm/9.5/asm-9.5.jar
    wget https://repo1.maven.org/maven2/org/ow2/asm/asm-commons/9.5/asm-commons-9.5.jar
    wget https://repo1.maven.org/maven2/org/ow2/asm/asm-util/9.5/asm-util-9.5.jar
    wget https://repo1.maven.org/maven2/org/ow2/asm/asm-tree/9.5/asm-tree-9.5.jar
    wget https://repo1.maven.org/maven2/org/ow2/asm/asm-analysis/9.5/asm-analysis-9.5.jar
    popd
    export JVM_ARGS="--module-path $PWD/lib/modules"
    ./bin/jmeter
          




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