无法在 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"
成功了!
我写了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"
成功了!