Gatling - How to Save Response Body

How to save response body in Gatling?

When we do API performance testing, we may need to build a chain of requests. For example, we make a call to an API, save the response and pass the response to another API call.

This is called request-response chaining and is a common activity when testing APIs.

Gatling provides a way of saving the whole response or part of a response.

The examples below illustrate how to save response data in Gatling.

Save the Whole Response Body

val authRequest = exec(http("Auth Request")
    .post(base_url + "/login/auth")
    .body(ElFileBody("payload.json"))
    .check(bodyString.saveAs("Auth_Response"))
    .check(status is 200))

We save the full response of the above API call in a variable called Auth_Response.

Then we can use that variable, which contains the response, to pass as a body or payload to another request, such as:

val validateRequest = exec(http("Validate Request")
    .post(base_url + "/login/validate")
    .body(StringBody("${Auth_Response}"))
    .check(bodyString.saveAs("Validate_Response"))
    .check(status is 200)
)

Extract Element From Response Body and Save

In Gatling, we can also parse a response, for example with JsonPath, extract a value and save it as a variable. Like above, we can then pass that variable in the next API call.

val loginRequest: HttpRequestBuilder = http("Login Request")
    .post(base_url + "/login")
    .header(ContentType, ApplicationJson)
    .header(Accept, ApplicationJson)
    .body(StringBody(""))
    .check(status is 200)
    .check(jsonPath("$.tokenId").saveAs("tokenId"))

In the above request, we parse the JSON Response and extract the value for the parameter tokenId and save its value as tokenId.

We can then reference the variable using ${tokenId}