exitBlockOnFail 导致我的脚本失败 "failed to execute: No attribute named "
exitBlockOnFail causes my failing my script with "failed to execute: No attribute named "
所以我有一个完美的场景,它的定义如下:
val basicLoginScenario = createScenario(Config.testName, feeder.random,
setSessionParams(PARAM1, Config.param1),
setSessionParams(PARAM2, Config.param2),
setSessionParams(PARAM3, Config.param3),
setSessionParams(PARAM4, Config.param4),
exec(RestApi.userLogin))
exec(RestApi.transaction1))
exec(RestApi.transaction2)))
但是当我用 exitBlockOnFail 包围它时,我收到以下错误,它似乎发生在发送任何 HTTP 请求或正在解析任何 request/response JSON 之前。
[GatlingSystem-akka.actor.default-dispatcher-4] ERROR io.gatling.http.action.HttpRequestAction - 'httpRequest-5' failed to execute: No attribute named 'cookie' is defined
这是带有 exitBlockOnFail 的代码:
val basicLoginScenario = createScenario(Config.testName, feeder.random,
exitBlockOnFail{
setSessionParams(PARAM1, Config.param1)
setSessionParams(PARAM2, Config.param2)
setSessionParams(PARAM3, Config.param3)
setSessionParams(PARAM4, Config.param4)
exec(RestApi.userLogin))
exec(RestApi.transaction1))
exec(RestApi.transaction2))
})
请注意,"cookie" 参数是从 userLogin 事务中获取的,在这种情况下,在获取之前未在任何地方使用,显然不在 setSessionParam 中,即:
def setSessionParams(key: String, value: Any) = {
exec(_.set(key, value))
}
这是用户登录交易:
val userLogin = {
exec(http("Login")
.post("/login")
.body(ElFileBody("json/Login.json")).asJson
.check(jsonPath("$.result.cookie").saveAs("cookie")))
}
我的喂食器中没有 "cookie" 参数并且 Login.json 中没有分配 "cookie" 参数,它只有 returns .正如我在开始时所说的那样,该方案运行完美 - 只有当我用 exitBlockOnFail 围绕我的交易时才会出现问题。知道是什么原因造成的吗?
您的初始版本可以工作,因为 'exec' 可以采用 exec 的可变参数,而 'exitBlockOnFail' 采用链。因此,当您向 'exitBlockOnFail' 提供多个 exec 时,只会执行最后一个操作。
因此您可以将所有语句包装在 'exec'
中
exitBlockOnFail{
exec(
setSessionParams(PARAM1, Config.param1),
...
exec(RestApi.transaction2)
)
}
或链接它们
exitBlockOnFail{
setSessionParams(PARAM1, Config.param1)
.setSessionParams(PARAM1, Config.param1)
.setSessionParams(PARAM2, Config.param2)
.setSessionParams(PARAM3, Config.param3)
.setSessionParams(PARAM4, Config.param4)
.exec(RestApi.userLogin)
.exec(RestApi.transaction1)
.exec(RestApi.transaction2)
}
所以我有一个完美的场景,它的定义如下:
val basicLoginScenario = createScenario(Config.testName, feeder.random,
setSessionParams(PARAM1, Config.param1),
setSessionParams(PARAM2, Config.param2),
setSessionParams(PARAM3, Config.param3),
setSessionParams(PARAM4, Config.param4),
exec(RestApi.userLogin))
exec(RestApi.transaction1))
exec(RestApi.transaction2)))
但是当我用 exitBlockOnFail 包围它时,我收到以下错误,它似乎发生在发送任何 HTTP 请求或正在解析任何 request/response JSON 之前。
[GatlingSystem-akka.actor.default-dispatcher-4] ERROR io.gatling.http.action.HttpRequestAction - 'httpRequest-5' failed to execute: No attribute named 'cookie' is defined
这是带有 exitBlockOnFail 的代码:
val basicLoginScenario = createScenario(Config.testName, feeder.random,
exitBlockOnFail{
setSessionParams(PARAM1, Config.param1)
setSessionParams(PARAM2, Config.param2)
setSessionParams(PARAM3, Config.param3)
setSessionParams(PARAM4, Config.param4)
exec(RestApi.userLogin))
exec(RestApi.transaction1))
exec(RestApi.transaction2))
})
请注意,"cookie" 参数是从 userLogin 事务中获取的,在这种情况下,在获取之前未在任何地方使用,显然不在 setSessionParam 中,即:
def setSessionParams(key: String, value: Any) = {
exec(_.set(key, value))
}
这是用户登录交易:
val userLogin = {
exec(http("Login")
.post("/login")
.body(ElFileBody("json/Login.json")).asJson
.check(jsonPath("$.result.cookie").saveAs("cookie")))
}
我的喂食器中没有 "cookie" 参数并且 Login.json 中没有分配 "cookie" 参数,它只有 returns .正如我在开始时所说的那样,该方案运行完美 - 只有当我用 exitBlockOnFail 围绕我的交易时才会出现问题。知道是什么原因造成的吗?
您的初始版本可以工作,因为 'exec' 可以采用 exec 的可变参数,而 'exitBlockOnFail' 采用链。因此,当您向 'exitBlockOnFail' 提供多个 exec 时,只会执行最后一个操作。
因此您可以将所有语句包装在 'exec'
中exitBlockOnFail{
exec(
setSessionParams(PARAM1, Config.param1),
...
exec(RestApi.transaction2)
)
}
或链接它们
exitBlockOnFail{
setSessionParams(PARAM1, Config.param1)
.setSessionParams(PARAM1, Config.param1)
.setSessionParams(PARAM2, Config.param2)
.setSessionParams(PARAM3, Config.param3)
.setSessionParams(PARAM4, Config.param4)
.exec(RestApi.userLogin)
.exec(RestApi.transaction1)
.exec(RestApi.transaction2)
}