
For more detailed release notes, including patch releases, please check the
[milestones on GitHub](https://github.com/gatling/gatling/milestones?state=closed).

## Sending HTTP QUERY requests

Gatling now provides a built-in for the HTTP `QUERY` method, a safe and idempotent method that, unlike `GET`, allows a request body.
See [Method and URL]({{< ref "/reference/script/http/request#method-and-url" >}}).

## Passing headers for separated-values feeders without a header line

Separated-values feeders such as `csv` used to require the first line of the file to contain the column names.
It's now possible to explicitly pass them with [headers]({{< ref "/concepts/session/feeders#csv-feeders" >}}) when the file doesn't have a header line.

## Incremental counters

Gatling now provides built-in counters that store an incrementing value into the Session, with support for custom start, increment and upper bound, wrapping around, per virtual user tracking and sharding across a Gatling Enterprise cluster.
See [Counters]({{< ref "/concepts/session/counters" >}}).

## Shared queues

Gatling now provides shared queues so that virtual users can exchange data: they can put values into a named queue, and take, poll or get the size of it.
See [Shared queues]({{< ref "/concepts/session/shared-queues" >}}).

## Standalone WebSocket checks

WebSocket checks can now be set on their own with `setCheck()`, without having to connect or send a message first, for example to wait for a message pushed by the server.
See [Set a check]({{< ref "/reference/script/websocket#set-a-check" >}}).

## Per virtual user client certificates from a single PKCS#12 file

`perUserKeyManagerFactory` now accepts the path of a single PKCS#12 file containing one key entry per virtual user, instead of requiring a custom function.
See [`perUserKeyManagerFactory`]({{< ref "/reference/script/http/protocol#peruserkeymanagerfactory" >}}).

## Storing a value in the Session with `setInSession`

Gatling now provides a `setInSession` step that evaluates a Gatling EL expression or a function and stores the result in the Session.
This is convenient when the result is random and must be used in multiple places, so the expression can't be inlined.
See [`setInSession`]({{< ref "/concepts/session/api#setinsession" >}}).

## Post checks

HTTP requests, the HTTP protocol, WebSocket checks and SSE checks now support `postCheck`: a function that's applied on the Session resulting from the checks, after they've been applied, to implement complex extra validation.
Throw an exception (in Scala, return a `Failure`) to make the request or the check fail.
See [HTTP request post checks]({{< ref "/reference/script/http/request#post-checks" >}}).

## New Gatling EL functions

Gatling EL has two new built-in functions:

* `randomString(length)` and `randomString(length,charset)` generate random Strings, without having to import an extra library such as Datafaker just for this.
* `randomOneOf(a,b,c)` picks a random value among the ones passed as arguments.

See [Built-in functions]({{< ref "/concepts/session/el#built-in-functions" >}}).
