首页 > 解决方案 > 如何在加特林脚本中获取变量的值

问题描述

我已经从登录 api 调用中提取了令牌值。但我无法将该变量值用于下一个 api 调用。我的代码如下

 val scn = scenario("test login")
  .exec(http("login call")
  .post("https://api.k6.io/v3/account/login")
  .headers(headers_1)
  .body(RawFileBody("data/login.json"))
  .check(status.is(200))
  .check(jsonPath("$.token.key").saveAs("tokenId")))
  .pause(21)
  .exec(http("edit profile call")
  .post("https://api.k6.io/v3/users/3187878")
  .headers(headers_1)
  .header("Authorization", "Token ${tokenId}")
  .body(RawFileBody("data/editprofile.json"))
  .check(status.is(200)))

但通话失败。我在第二次调用中没有得到该变量的值。

{"key":"4c713e3f5d362f0002f6eef737401e249c154bed"}

我需要在下一个 api 调用的标头中使用“key”的值,格式为

.header("Authorization", "Token 4c713e3f5d362f0002f6eef737401e249c154bed")

但它没有采用这种格式。我哪里出错了?谁能帮助我。提前致谢

标签: gatling

解决方案


您使用检查捕获数据并使用加特林表达式语言重新注入数据的方式是正确的。

您的方案不起作用的可能原因:

  • “登录呼叫”请求失败,无法捕获数据
  • 您使用 RawFileBody 但可能其中的某些数据需要是动态的,就像您的 Authorization 标头一样

如果要检查捕获的内容,可以在暂停之前添加一个额外的操作:

.exec { session =>
  println(session("tokenId").as[String])
  session
}

推荐阅读