我的加特林请求中要实现的步骤:1.在循环中打一个请求。2. 将JSON响应中的'status'值保存到'respStatus'中 3.将'respStatus'设置为会话变量'workStatus' 4.循环检查会话变量'workStatus'的值,当其值发生变化时退出。循环检查会话变量'workStatus'的值,当它的值从创建变为其他时退出。
这是我的代码。下面这段代码在第1次迭代这个请求后停止执行,检查响应体显示JSON响应中'creating'的值在停止时没有变化。这段代码有什么问题,或者有什么其他的方法可以实现吗?
.doWhile(session => !session(workStatus).as[String].equal("creating"),"index"){
exec(http("Request1")
.get(<URL goes here>)
.header(<Headers in a map>)
.check(jsonPath("$..status").saveAs("respStatus")))
.exec(session => session.set("workStatus","${respStatus}"))
.pause(10)
}.pause(10)
几个错误。
session => session.set("workStatus","${respStatus}")
作为 文件中解释:
这种表达式语言只适用于传递给Gatling DSL方法的字符串值。当Gatling模拟被实例化时,这种字符串只被解析一次。
例如queryParam("latitude", session => "${latitude}")就不能用,因为参数不是一个字符串,而是一个返回字符串的函数。
你从 respStatus
到 workStatus
是没有用的。
正确的语法是第1行是 session("workStatus")
,不 session(workStatus)
.
在Scala中,你可以使用 ==
,不 equals
.
小心jsonPath中的通配符路径会导致完整的JSON树扫描。如果可能的话,又担心性能,最好使用精确路径。
JsonPath目前的状态是失败的,请阅读这篇文章. 如果可能的话,你应该切换到JMESPath。
您需要 headers
,不 header
以通过地图。
.doWhile(session => !session("workStatus").as[String].equal("creating"),"index"){
exec(http("Request1")
.get(<URL goes here>)
.headers(<Headers in a map>)
.check(jsonPath("$..status").saveAs("workStatus")))
.pause(10)
}.pause(10)