exitBlockOnFail导致脚本失败,并显示“执行失败:没有名为”的属性”

问题描述 投票:0回答:1

因此,我有一个完美运行的方案,其定义如下:

 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之前。

[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))
  }

这是userLogin事务:

  val userLogin = {
    exec(http("Login")
      .post("/login")
      .body(ElFileBody("json/Login.json")).asJson
      .check(jsonPath("$.result.cookie").saveAs("cookie")))
  }

我的供稿器中没有“ cookie”参数,而Login.json中没有分配“ cookie”参数,它仅返回它。正如我在开始时所说的,该方案运行完美-仅当我用exitBlockOnFail包围事务时才会出现此问题。知道是什么原因造成的吗?

scala gatling
1个回答
1
投票
您的初始版本有效,因为'exec'可以使用exec的变量,而'exitBlockOnFail'可以使用链。因此,当您向“ exitBlockOnFail”提供多个执行程序时,仅执行最后一个操作。

所以您可以将所有语句包装在'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) }

© www.soinside.com 2019 - 2024. All rights reserved.