无法在Gatling中的POST请求中传递变量

问题描述

**在下面的代码中,当我尝试在POST请求执行中将bearer_token变量传递给标头时,请求失败。

但是,如果我将值而不是变量传递给标头,则请求成功。我应该如何将变量传递给POST请求。**

class test extends Simulation{

  val headersLogin = Map(
    "Content-Type" -> "application/json","Authorization" -> "Basic YWRtaW46Tm9raWFOc3AxIQ=="
  )

  val headersCreateSubscription = Map(
    "Content-Type" -> "application/json","Accept" -> "application/json"
  )

  var bearer_token = ""

    val httpProtocol = http
    .baseUrl("https://135.121.159.176") // Here is the root for all relative URLs

  val scn =
    scenario("Telemetry Viewer Load Testing")
      .exec(
        http("Get Access Token - POST ")
          .post(":443/rest-gateway/rest/api/v1/auth/token")
          .headers(headersLogin)
          .body(StringBody(
            """{"grant_type": "client_credentials" }""".stripMargin)).asJson
          .check(status is 200)
          .check(jsonPath("$" ).saveAs("RESPONSE_DATA" ))
          .check(jsonPath("$.access_token").saveAs("access_token"))
      )
  
      .exec( session => {
        val token = session("access_token").as[String]
        println( s"ACCESS TOKEN - $token")
        bearer_token ="Bearer ".concat(token)
        session
      })
   
    .exec(
      http("CREATE SUBSCRIPTION - POST")
        .post(":8619/telemetry-viewer/api/v1/restconf/data/telemetry-data-subscription:/subscriptions")
//        .header("Authorization","Bearer VetoLWFkbWluNDdioWY2ZDUtNTMyYS00NDJlLWI1MmItZmFmYTFjZTFlZGEz")
//        .headers(headersCreateSubscription)
        .headers(Map(
          "Content-Type" -> "application/json","Authorization" -> s"${bearer_token}","Accept" -> "application/json"
        ))
        .body(StringBody("""{"subscription": [{"name": "ap_11111","collection-interval": 60,"telemetry": [ { "id": 1,"type": "telemetry:/base/system-info/system"}]}]}""".stripMargin)).asJson
        .check(status is 201)
        .check(jsonPath("$" ).saveAs("CREATE_SUBSCRIPTION_RESPONSE_DATA" ))
    )

    .exec(session => {
      val response = session("CREATE_SUBSCRIPTION_RESPONSE_DATA").as[String]
      println(s"CREATE SUBSCRIPTION - RESPONSE BODY: \n$response")
      session
    }
    )

  setUp(scn.inject(atOnceUsers(1)).protocols(httpProtocol))

}

解决方法

不要使用全局变量/引用,它们将在所有虚拟用户之间共享

删除此无用的exec块,并使用Gatling EL直接解决:

.header("Authorization","Bearer ${access_token}")