无法在Gatling中提取值

时间:2017-04-06 09:29:59

标签: scala gatling

我写了两套Gatling代码。我在示例1中的用例是进行后调用。提取一个值。进行一次调用并在标题中使用提取的值。

我在示例2中的用例是进行后调用,提取值,使用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)

当我运行此代码时,我看到上面的print语句打印了正确的ID。服务器在get调用时抛出403,因为ID未正确设置。如果我接受任何打印值,然后远程$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。 (在邮递员中,我可以通过正确指定cookie来进行相同的调用工作)

1 个答案:

答案 0 :(得分:1)

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

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

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

当我将代码替换为

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

请注意,没有" s"在字符串后面。

有效!