Skip to main content

Artillery v2 Migration Guide

Upgrading from Artillery v1

Artillery v1 has been deprecated and will receive no further updates other than dependency updates for critical security vulnerabilities. We recommend that you upgrade as soon as possible.

What's new in Artillery v2

Artillery v2 is a major upgrade of Artillery, specifically in the following areas:

  • Performance - Artillery v2 is faster and more efficient across the board
  • Extensibility and hackability - to make extension APIs even more powerful so that the community can conitnue building great plugins and extensions on top of Artillery
  • Removing cruft - Artillery has been around for about six years now, and accumulation of some cruft and less-than-ideal design decisions is inevitable. Artillery v2 removes some of that cruft and revisit those design decisions.
  • Modernization - Node.js, Javascript itself and the ecosystem have evolved since Artillery's core code was written a couple of years back. Artillery v2 makes use of features such as async/await, new Node.js APIs such as worker_threads, and new libraries such as Got.js to modernize both Artillery's internals and its external APIs.
  • Community - most important of all, we want to make Artillery even easier to contribute to. More than 90 people have contributed to Artillery over the years, and that number is likely to double or triple in the years to come. We want to help the community by refactoring the test suite, refactoring the code to make it easier to understand, documenting the internals, and providing more details contribution guides and templates.

Major changes and new features

This section documents major new features and changes that are already available in a dev release.

Metrics engine

The underlying metrics engine has been rewritten to offer better performance (less memory and CPU usage when tracking large sets of metrics), and more flexbility. All code - built-in engines and plugins, user JS code, and third-party plugins and engines - will now use the same APIs for tracking metrics.

We replaced HDRHistogram with DDSketch for computing high-precision percentiles.

Metrics are now tracked and aggregated at pre-determined fixed window size.

The format of the metric summary object provided to plugins and user JS code has changed. Setting ARTILLERY_USE_LEGACY_REPORT_FORMAT=1 should make most existing plugins work. If not, please open an issue. We will work with plugin authors to update their code to work with v2.

Multithreading

Artillery will now take advantage of multiple CPUs if available and run in multithreaded mode. This is transparent to the user - there is nothing to configure.

Console report format

Console reports print metric names as provided by engines, plugins or user code.

Metrics are output on the zeroth second boundary, i.e. at:

  • 00 seconds (e.g. at 08:17:00)
  • 10 seconds past the minute (i.e. at 08:17:10)
  • 20 seconds past the minute (i.e. at 08:17:20)
  • 30 seconds past the minute, and so on

HTTP engine

New underlying HTTP library (Got)

The HTTP engine has been rewritten and now uses Got instead of Request.js under-the-hood.

Our goal is to maintain full backwards-compatibility with the official HTTP engine API, and existing test scripts should be expected to work without changes.

However, if your scripts relied on Request.js-specific behavior, for example via code in custom JS hooks, some modifications may be required.

Extended performance metrics

Additional performance metrics are reported when config.http.extendedMetrics is set to true:

  • http.dns - amount of time taken by DNS lookups
  • http.tcp - amount of time taken to establish TCP connections
  • http.tls - amount of time taken by TLS handshake
  • http.total - amount of time for full response to be downloaded (vs TTFB)