Load Testing Engine

At StormForger we use the term engine to describe the software we use to execute the test runs described by the test case DSL. As of Q1/2020 we have two different engines:

  • The new engine. By using the stable label you get the latest stable version our load generator setup. This is the default for all users.
  • The legacy engine label for the old engine. This was the default engine before Q1/2020 and is no longer available since June 2020.

Most of the time the default is what you want. Feel free to talk with us if you are missing something or encounter problems.

Changing Engine for your Test

To explicitly state which engine you want to use, add the engine field to your test options:

  cluster: { engine: "stable" },

The engine property specifies what engine to use. Currently the stable is available to everyone. Other labels are used to enable feature previews or custom use cases for our customers.

StormForger Engine Evolution

Since 2020 we are utilizing our new shiny engine. While this new engine is designed to support all existing test cases there are some differences compared to the old legacy engine. Some important differences are:

  • We are now strictly checking the request target, even for dynamic requests (like when following a redirect)
  • Requests MUST now be unambiguously specify the target - if you perform a request without a host or protocol, you will get an error. The legacy engine chose a random target from the defined ones here, which could lead to subtle errors
  • We now fully support HTTP/2 which is chosen by default, if available by the target
  • Improved Traffic Dumping
    • a new dump format, which is easier to read and no longer interleaved by different clients
    • Traffic dumping no longer prevents a test report from being created
    • Traffic dumping always records uncompressed content, even if the network traffic was compressed
    • Traffic Dumping reconstructs the request & response instead of recording the actual network traffic. This makes the dump more useful but it might look a bit different compared to data transferred on the wire.
  • regexp content extractions no longer include the header
  • response size in the request log is now the uncompressed body. In the legacy engine this was the transferred headers and body bytes.
  • Network measurements (total transferred bytes and rates) are now recorded at the TCP level and will be more accurate (including TLS overhead e.g.)
  • Having an Authorization field in your headers disables the authentication: {username, password} property on requests. This makes sure a request is only sent with one auth header.
  • JSONPath extractions are now more powerful, but the filter notation changed a bit. Checkout our migration guide.
  • We redefined various timeouts, see the table below. Currently they are not configurable, but that will soon change to give you more control.
Name Value Comment
KeepAliveInterval 30s KeepAlive is the interval between keep-alive probes to check if the connection is still alive
IdleConnTimeout 90s How long connections are kept open if unused
ConnectTimeout 30s TCP connect timeout
TLSHandshakeTimeout 10s Timeout for the TLS handshake
RequestTimeout 120s Overall request timeout - Includes connection, sending the request and receiving the response

The new engine also contains many exciting technology changes for us which will lead to new features down the road.

Engine: Legacy

Note: The legacy engine is deprecated and is not generally available any longer. If you encounter any problems with the new engine, please get in touch with us.

The old engine has served as the power hose of StormForger since 2014. You can read a bit about its history in our blog: Load Test Engine Evolution.

Icon Support Are you stuck? Or do you have any feedback? Get in touch with us – we are happy to help you.
Icon Schedule a demo Schedule a personal, customized demo. We'll show you around and introduce you to StormForger.
Icon Talk to a human To build and run reliable applications is complex – we know. Schedule a call and we’ll figure things out.