首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >exitBlockOnFail导致我的脚本失败,并显示"failed to execute: No attribute named“

exitBlockOnFail导致我的脚本失败,并显示"failed to execute: No attribute named“
EN

Stack Overflow用户
提问于 2019-10-13 15:04:12
回答 1查看 791关注 0票数 0

所以我有一个完美工作的场景,它的定义如下:

代码语言:javascript
复制
 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请求或解析任何请求/响应JSON之前发生的。

代码语言:javascript
复制
[GatlingSystem-akka.actor.default-dispatcher-4] ERROR io.gatling.http.action.HttpRequestAction - 'httpRequest-5' failed to execute: No attribute named 'cookie' is defined

这是exitBlockOnFail的代码:

代码语言:javascript
复制
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中使用,它是:

代码语言:javascript
复制
  def setSessionParams(key: String, value: Any) = {
    exec(_.set(key, value))
  }

下面是userLogin事务:

代码语言:javascript
复制
  val userLogin = {
    exec(http("Login")
      .post("/login")
      .body(ElFileBody("json/Login.json")).asJson
      .check(jsonPath("$.result.cookie").saveAs("cookie")))
  }

我的feeder中没有"cookie“参数,Login.json中也没有分配"cookie”参数,它只返回它。正如我在开始时所说的,这个场景工作得很完美--只有当我使用exitBlockOnFail处理事务时,才会出现这个问题。你知道是什么原因造成的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-15 14:04:33

最初的版本之所以有效,是因为'exec‘可以接受一个可变参数的execs,而'exitBlockOnFail’可以接受一个链。因此,当您为“exitBlockOnFail”提供多个execs时,只执行最后一个操作。

因此,您可以将所有语句包装在一个“exec”中

代码语言:javascript
复制
exitBlockOnFail{
  exec(
    setSessionParams(PARAM1, Config.param1),
    ...
    exec(RestApi.transaction2)
  )
}

或者用链子锁住它们

代码语言:javascript
复制
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)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58361315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档