Jakarta JMeter

About

Download

Documentation

Tutorials (PDF format)

Community


Changes

This page details the changes made in the current version only.

Earlier changes are detailed in the History of Previous Changes .

Version 2.3.3

Summary of main changes

The handling of test closedown is much improved. The gradual "Shutdown" command now waits until all threads have stopped, and does not report an error if threads don't stop within 5 seconds. The immediate "Stop" command can now be used if "Shutdown" takes too long. Also the immediate "Stop" command is able to interrupt samplers which support the new Interruptible interface (e.g. HTTP and SOAP, FTP). This allows immediate completion of pending responses. Non-GUI mode tests can also now be sent a "Shutdown" or "Stop" message. Test Action now supports a "Stop Now" action, as do the Thread Group and Result Status Action Handler Post Processor elements.

HTTP Cookie handling is improved, and HTTP POST can now use variable file names correctly. HTTP, SOAP/XML-RPC and WebService(SOAP) sampler character encodings updated to be more consistent. HTTP Samplers now support connection and response timeouts (requires JVM 1.5 for the HTTP Java sampler). Together with the closedown improvements described above, this should avoid most cases where a test run hangs. Multiple Header Manager elements are now supported for a single HTTP sampler. The Proxy Server is improved, and no longer stores "Host" headers by default.

JDBC Request can optionally save the results of Select statements to variables. JDBC Request now handles quoted strings and UTF-8, and can handle arbitrary variable types.

There are several new functions : __char() function: allows arbitrary Unicode characters to be entered in fields. __unescape() function: allows Java-escaped strings to be used. _unescapeHtml() function: decodes Html-encoded text. __escapeHtml() function: encodes text using Html-encoding. A reference to a missing function - e.g. ${__missing(a)} - is now treated the same as a missing variable. Previously the function name - and leading { - were dropped. This makes it easier to debug test plans.

Some Assertions can now be applied to sub-samples as well as (or instead of) just the parent sample. There is a new Random Variable Configuration element.

JMS samplers are much improved (see details below). The TCP Sampler now supports some additional clients and is a bit more flexible.

Client-server mode has been improved, and the server can optionally use a fixed RMI port, which should help with setting up firewalls.

Various I18N changes have been made; language change works better (though not perfect yet). There are improved French translations as well as new Polish and Brazilian Portugese translations.

The BeanShell jar is now included with the binary archive; there is no need to download it separately.

Known bugs

The Include Controller has some problems in non-GUI mode. In particular, it can cause a NullPointerException if there are two include controllers with the same name.

Once Only controller behaves correctly under a Thread Group or Loop Controller, but otherwise its behaviour is not consistent (or clearly specified).

The menu item Options / Choose Language does not change all the displayed text to the new language. [The behaviour has improved, but language change is still not fully working] To override the default local language fully, set the JMeter property "language" before starting JMeter.

Incompatible changes

When loading sample results from a file, previous results are no longer cleared. This allows one to merge multiple files. If the previous behaviour is required, use the menu item Run/Clear (Ctrl+Shift+E) or Run/Clear All (Ctrl+E) before loading the file.

The test elements "Save Results to a file" and "Generate Summary Results" are now shown as Listeners. They were previously shown as Post-Processors, even though they are implemented as Listeners.

The Cookie Manager no longer saves incoming cookies as variables by default. To save cookies as variables, define the property "CookieManager.save.cookies=true". Also, cookies names are prefixed with "COOKIE_" before they are stored (this avoids accidental corruption of local variables) To revert to the original behaviour, define the property "CookieManager.name.prefix= " (one or more spaces).

The Counter element is now shown as a Configuration element. It was previously shown as a Pre-Processor, even though it is implemented as a Config item.

The above changes only affect the icons that are displayed and the locations in the GUI pop-up menus. They do not affect test plans or test behaviour.

The PreProcessors are now invoked directly by the JMeterThread class, rather than by the TestCompiler#configureSampler() method. (JMeterThread handles the PostProcessors). This does not affect test plans or behaviour, but could perhaps affect 3rd party add-ons (very unlikely).

Moved the Scoping Rules sub-section from Section 3. "Building a Test Plan" to Section 4. "Elements of a test plan"

The While controller now trims leading and trailing spaces from the condition value before it is compared with LAST, blank or false.

The "threadName" variable in the _jexl() and __javaScript() functions was previously misspelt as "theadName".

The following deprecated methods were removed from JOrphanUtils: booleanToString(boolean) and valueOf(boolean). Java 1.4+ has these methods in the Boolean class.

The TestElement interface has some new methods:

  • void setProperty(String key, String value, String dflt)
  • void setProperty(String key, boolean value, boolean dflt)
  • void setProperty(String key, int value)
  • void setProperty(String key, int value, int dflt)
  • int getPropertyAsInt(String key, int defaultValue)
These are implemented in the AbstractTestElement class which all elements should extend so this is unlikely to cause a problem.

Bug fixes

HTTP Samplers and Proxy

  • Bug 46332 - HTTP Cookie Manager ignores manually defined cookies (bug introduced in r707810)
  • Cookie Manager was not passing cookie policy to runtime threads so they always used compatibility mode
  • Add version attribute to JMeter Cookie class (needed for proper cookie support)
  • Cookie Manager now saves/restores cookie versions
  • Check validity of cookies before storing them.
  • HTTPSamplers can now use variables in POSTed file names
  • Fix processing of first file name in HTTP POST so functions/variables work (bug introduced with multiple file support)
  • Bug 45831 - WS Sampler reports incorrect throughput if SOAP packet creation fails
  • HTTP, SOAP/XML-RPC and WebService(SOAP) sampler character encodings updated to be more consistent
  • Bug 46148 - HTTP sampler fails on SSL requests when logging for jmeter.util is set to DEBUG
  • Fix Java 1.6 https error: java.net.SocketException: Unconnected sockets not implemented
  • Bug 46838 - if there was no data, still need to set latency in HTTPSampler
  • Bug 46993 - Saving from Header Manager generates ClassCastException
  • Bug 46690 - handling of 302 redirects with invalid relative paths. JMeter now removes extraneous leading "../" segments (as do many browsers)
  • Bug 44521 - empty variables for a POST in the HTTP Request don't get ignored
  • Bug 46977 - JMeter does not handle HTTP headers not delimited by whitespace
  • Fix bug in HTTP file: handling - read bytes, not characters in the default encoding.
  • Remove Host from headers saved by the Proxy server, as that will normally be generated by the HTTP stack
  • Bug 45199 - don't try to replace blank variables in Proxy recording
  • Change HTTPS spoofing so https: links are replaced even when URL match fails
  • Bug 46436 - Improve error reporting in Proxy Gui
  • Bug 46435 - More verbose error msg for error 501 (Proxy Server)

Other Samplers

  • The "prev" and "sampler" objects are now defined for BSF test elements
  • Fix NPE (in DataSourceElement) when using JDBC in client-server mode
  • Bug 45425 - JDBC Request does not support Unicode (changed sampler to use UTF-8)
  • Bug 46522 - Incorrect "Response data" in JDBC sample when column names are missing
  • Bug 46821 - JDBC select request doesn't store the first column in the variables
  • Bug 43791 - ensure QueueReceiver is closed in JMS Point to Point sampler
  • Bug 46016 - avoid possible NPE in JMSSampler
  • Bug 46142 - JMS Receiver now uses MessageID
  • Bug 45458 - Point to Point JMS in combination with authentication
  • Bug 45460 - JMS TestPlan elements depend on resource property
  • Various ReceiveSubscriber thread-safety fixes
  • JMSPublisher and Subscriber fixes: thread-safety, support dynamic locale changes, locale independence for JMX attribute values
  • FTP Sampler now logs out before disconnecting.
  • TCP sampler now calls setupTest() and teardownTest() methods
  • Bug 45887 - TCPSampler: timeout property incorrectly set

Controllers

  • Fix NPE when using nested Transaction Controllers with parent samples
  • Fix processing of Transaction Controller parent mode so current sampler is set to actual sampler
  • Bug 44941 - Throughput controllers should not share global counters
  • Bug 47120 - Throughput Controller: change percent executions to total executions, the value is stored in a String and interpreted as 1 execution
  • Bug 47150 - ThreadGroup with a loop count of zero causes infinite loop
  • Bug 47009 - Insert parent caused child controller name to be reset
  • Bug 47165 - Using duplicate Module Controller names in command line mode causes NPE

Listeners

  • Mailer Visualizer documentation now agrees with code i.e. failure/success counts need to be exceeded to trigger the mail.
  • Mailer Visualizer now shows the failure count
  • Mailer Visualiser - fix parsing of multiple e-mail address when using Test button
  • Bug 45976 - incomplete result file when using remote testing with more than 1 server
  • Fix Summariser so it works in client server mode
  • Bug 34096 - Duplicate samples not eliminated when writing to CSV files
  • Save "Include group Name in Label" setting in Aggregate and Summary reports
  • The JMeter variable "sample_variables" is sent to all server instances to ensure the data is available to the client.
  • CSVSaveService - check for EOF while reading quoted string

Assertions

  • Bug 45749 - Response Assertion does not work with a substring that happens to be an invalid RE
  • Bug 45904 - Allow 'Not' Response Assertion to succeed with null sample

Functions

  • Fix regex function - was failing to process $m$mid$n$ correctly
  • Protect against possible NPE in RegexFunction if called during test shutdown.
  • Avoid NPE if XPath function does not match any nodes
  • Correct the variable name "theadName" to "threadName" in the __jexl() and __javaScript() functions
  • A reference to a missing function - e.g. ${__missing(a)} - is now treated the same as a missing variable. Previously the function name - and leading { - were dropped.

I18N

  • Fixed language change handling for menus (does not yet work for TestBeans)
  • Add HeaderAsPropertyRenderer to support header resource names; use this to fix locale changes in various GUI elements
  • Bug 46424 - corrections to French translation
  • Bug 46844 - "Library" label in test plan are not I18N
  • Bug 47064 - fixes for Mac LAF
  • Bug 47127 - Unable to change language to pl_PL
  • Bug 47137 - Labels in View Results Tree aren't I18N
  • Bug 46423 - I18N of Proxy Recorder
  • Bug 45928 - AJP/1.3 Sampler doesn't retrieve its label from messages.properties

General

  • Prompt to overwrite an existing file when first saving a new test plan
  • Amend TestBeans to show the correct popup menu for Listeners
  • Bug 45185 - CSV dataset blank delimiter causes OOM
  • Fix incorrect GUI classifications: "Save Results to a file" and "Generate Summary Results" are now shown as Listeners. "Counter" is now shown as a Configuration element.
  • Bug 41608 - misleading warning log message removed
  • Bug 46359 - BSF JavaScript Preprocessor cannot access sampler variable on first interation (Implement temporary work-round for BSF-22)
  • Bug 46407 - BSF elements do not load script files, attempt to interpret filename as script
  • Better handling of Exceptions during test shutdown
  • Fix potential thread safety issue in JMeterThread class
  • Bug 46491 - Incorrect value for the last variable in "CSV Data Set Config" (error in processing quoted strings)

Improvements

HTTP Samplers

  • Bug 45479 - Support for multiple HTTP Header Manager nodes
  • HTTP Samplers now support connection and request timeouts (requires Java 1.5 for Java Http sampler)
  • Apache SOAP 2.3.1 does not give access to HTTP response code/message, so WebService sampler now treats an empty response as an error
  • Mirror server now supports "X-Sleep" header - if this is set, the responding thread will wait for the specified number of milliseconds
  • Bug 45694 - Support GZIP compressed logs in Access Log Sampler

Other samplers

  • JDBC Request can optionally save the results of Select statements to variables.
  • JDBC Request now handles quoted strings.
  • JDBC Request now handles arbitrary variable types.
  • LDAP result data now formatted with line breaks
  • Bug 45200 - MailReaderSampler: store the whole MIME message in the SamplerResult
  • Bug 45571 - JMS Sampler correlation enhancement
  • Bug 46030 - Extend TCP Sampler to Support Length-Prefixed Binary Data
  • Add classname field to TCP Sampler GUIs

Controllers

  • Allow If Controller to use variable expressions (not just Javascript)
  • Trim spaces from While Controller condition before comparing against LAST, blank or false

Listeners

  • Save Responses to a file can save the generated filename(s) to variables.
  • Add option to skip suffix generation in Save Responses to a File
  • Bug 43119 - Save Responses to file: optionally omit the file number
  • Add BSF Listener element
  • Bug 47176 - Monitor Results : improve load status graphic
  • Bug 40045 - Allow Results monitor to select a specific connector
  • Read XML JTL files more efficiently - pass samples to visualisers as they are read, rather than saving them all and then processing them

Assertions, Config, Pre- & Post-Processors

  • Bug 45903 - allow Assertions to apply to sub-samples
  • Add Body (unescaped) source option to Regular Expression Extractor.
  • Random Variable - new configuration element to create random numeric variables

Functions

  • Add OUT and log variables to __jexl() function
  • Use Script to evaluate __jexl() function so can have multiple statements.
  • Add log variable to the __javaScript() function
  • Added __char() function: allows arbitrary Unicode characters to be entered in fields.
  • Added __unescape() function: allows Java-escaped strings to be used.
  • Added __unescapeHtml() function: decodes Html-encoded text.
  • Added __escapeHtml() function: encodes text using Html-encoding.

I18N

  • Bug 45929 - improved French translations
  • Bug 47132 - Brazilian Portuguese translations
  • Bug 46900 - Polish translations
  • Added locales.add property to allow for new Locales

General

  • Allow spaces in JMeter path names (apply work-round for Java Bug 4496398 )
  • Process JVM_ARGS last in script files so users can override default settings
  • Bug 46636 - Allow server mode to optionally use a fixed rmi port
  • Make some samplers interruptible: HTTP (both), SoapSampler, FTPSampler
  • Test Action now supports "Stop Now" action, as do the Thread Group and Result Status Post Processor elements
  • The Menu items Stop and Shutdown now behave better. Shutdown will now wait until all threads exit. In GUI mode it can be cancelled and Stop run instead. Stop now reports if some threads will not exit, and exits if running in non-GUI mode
  • Add UDP server to wait for shutdown message if running in non-GUI mode; add UDP client to send the message.
  • Bug 41209 - JLabeled* and ToolTips
  • Include BeanShell 2.0b4 jar in binary download.

Non-functional changes

  • Introduce AbstractListenerGui class to make it easier to create Listeners with no visual output
  • Assertions are run after PostProcessors; change order of pop-up menus accordingly
  • Remove unnecessary clone() methods from function classes
  • Moved PreProcessor invocation to JMeterThread class
  • Made HashTree Map field final
  • Improve performance of calling ResultCollector#isSampleWanted() for multiple samples
  • Updated to new versions of: xmlgraphics-commons (1.3.1), jdom (1.1), xstream (1.3.1), velocity (1.6.2)




Copyright © 1999-2009, Apache Software Foundation