Gatling Error when running multiple users – ‘httpRequest-2’ failed to execute: No attribute named ‘access_token’ is defined

Total
9
Shares

im new to Gatling and have been trying to setup a test where my users login, get an access token, then perform some simple get requests using that token. Having 1-2 users works fine, however once i start ramping up the users i start getting spammed with this error:

[ERROR] i.g.h.a.HttpRequestAction - 'httpRequest-2' failed to execute: No attribute named 'access_token' is defined

Im thinking it could have something to do with the way I am saving and using the access token ?

class GatlingTest extends Simulation {

    val httpProtocol = http
        .baseUrl("https://myurl.com/api/v1")
        .inferHtmlResources(BlackList(""".*.js""", """.*.css""", """.*.gif""", """.*.jpeg""", """.*.jpg""", """.*.ico""", """.*.woff""", """.*.woff2""", """.*.(t|o)tf""", """.*.png""", """.*detectportal.firefox.com.*"""), WhiteList())
        .acceptLanguageHeader("en-GB,en;q=0.5")
        .upgradeInsecureRequestsHeader("1")


    object GetUserData {

        val userData = exec(http("Get_User_Data")
            .get("/user")
            .header("Authorization", "Bearer ${access_token}"))
            .pause(1)
    }

    object GetUserInfo {

        val userInfo = exec(http("Get_User_Info")
            .get("/userInfo")
            .header("Authorization", "Bearer ${access_token}")
            .header("Accept", "application/json"))
            .pause(1)

    }

    object Login {
        val sentHeaders = Map("api_key" -> "nnxzv336wt2374h6zw5x24qd", "Content-Type" -> "application/x-www-form-urlencoded", "Accept" -> "application/json")

        val login = exec(http("Login_User")
            .post("/login")
            .basicAuth("username", "password")
            .headers(sentHeaders)
            .body(StringBody("grant_type=password&[email protected]&password=12345"))
            .check(jsonPath("$.access_token").saveAs("access_token"))


        )
    }

    val user = scenario("User").exec(Login.login).exec(GetUserData.userData, GetUserInfo.userInfo)

    setUp(
        user.inject(
            rampUsers(5).during(2.seconds),
        ).protocols(httpProtocol)
    )
}

I have added Authorization Bearer to the get requests, like i mentioned it does work, but as soon as 3+ users are involved i get the error.


Solution

It means the login request failed and hence, the user wasn’t able to capture the access_token there.

Leave a Reply

Your email address will not be published. Required fields are marked *