无法在 Gatling 中提取值

Not able to extract values in Gatling

我写了2套加特林代码。我在示例 1 中的用例是进行 post 调用。提取一个值。进行 get 调用并使用 header.

中提取的值

我在示例 2 中的用例是进行 post 调用,提取值,使用 cookie 中提取的值进行 get 调用。

示例 1

   val login = http("Login")
      .post("login")
      .body(StringBody("""{"username": "foo", "password": "bar"}""")).asJSON
      .check(status.is(200), jsonPath("$..response.id").ofType[String].saveAs("id"))

   val get = http("get")
      .get("foo")
      .header("token", "$id")
      .check(status.is(200), jsonPath("$..response").exists)

   var id = ""
   val scn = scenario("scenario")
      .exec(login)
      .exec(session => {
         id = session("id").as[String].trim
         println("+++++++" + id)
         session}
      )
      .pause(3)
      .exec(get)

当我 运行 这段代码时,我看到上面的打印语句打印了正确的 ID。服务器在 get 调用上抛出 403,因为 ID 设置不正确。如果我采用任何打印值,然后使用 remote $id 并将其替换为该值。测试 运行 正确。

那么如何访问保存的变量?

示例 2

val login = http("Login")
      .post("login")
      .body(StringBody("""{"username": "foo", "password": "bar"}""")).asJSON
      .check(status.is(200), jsonPath("$..response.id").ofType[String].saveAs("id"))

   val get = http("get")
      .get("foo")
      .check(status.is(200), jsonPath("$..response").exists)

   val testCookie = scenario("test-cookie")
      .exec(login)
      .pause(3)
      .exec(addCookie(Cookie("foo_cookie", "$id")))
      .exec(get)

这里也没有成功提取值,当我 运行 时得到 403,因为 "foo_cookie" 设置不正确,如果找不到 cookie,服务器将抛出 403 . (在 postman 中,我可以通过正确指定 cookie 进行相同的调用)

我能够解决问题。问题是这一行

.header("token", s"$id")

在 Scala 中 $id${id} 相同,但在 Gatling 中它们似乎不同。

当我将我的代码替换为

.header("token", "${id}")

注意字符串后面没有"s"

成功了!