Search code examples
load-testingk6

K6 Load testing using "batch" not sending the correct request headers


K6 newbie here, currently working on a load test scenario for an API we have.

This is a request I am using to hit an API endpoint.

const request1 = {
            method: "POST",
            url: endpointUrl,
            body: requestBody,
            params: {
                headers: {
                    "Content-Type": "application/json",
                    "custom-header-1": 'value1',
                    "custom-header-2": 'value2', 
                    "Accept": "application/json"
                }
            }
        };

const responses = http.batch([request1])

If I execute this request using http.post, everything works as expected.

But using http.batch, I always get back a 415 Media type unsupported back from the server. When checking the request sent to my API using Wireshark, I can see that the content-type being sent is of type x-www-form-urlencoded, and not application/json as defined in my request. The two custom header values I’m sending are also not visible.

enter image description here

Based on their example page K6 batch, I have also tried by defining the request in-line, but the result is the same.

What is missing from my script that my custom content-type isn’t getting picked up by the batch function? As you can see, there is a Requestheaders header that’s an object, but those values should actually be applied on request level.

Thank you.

By providing the content-type as part of the params.headers object, I expect this value to get passed on to the request.


Solution

  • The requestBody I was sending was a Json object, like the one on their example page. The solution is to call the function with Json.stringify(requestBody) instead.