我写了两套Gatling代码。我在示例1中的用例是进行后调用。提取一个值。进行一次调用并在标题中使用提取的值。
我在示例2中的用例是进行后调用,提取值,使用cookie中提取的值进行get调用。
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
并将其替换为。测试正确运行。
那么如何访问已保存的变量?
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来进行相同的调用工作)
答案 0 :(得分:1)
我能够解决这个问题。问题是这一行
.header("token", s"$id")
在Scala中$id
和${id}
相同,但在Gatling中似乎不是。
当我将代码替换为
时.header("token", "${id}")
请注意,没有" s"在字符串后面。
有效!