Search code examples
scalaload-testinggatlingstress-testing

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


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.