exitBlockOnFail приводит к сбою моего сценария с «не удалось выполнить: атрибут не указан» - PullRequest
0 голосов
/ 13 октября 2019

Таким образом, у меня есть сценарий, который работает отлично, он определен следующим образом:

 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. Есть идеи, что может вызвать это?

1 Ответ

1 голос
/ 15 октября 2019

Ваша начальная версия работает, потому что exec может принимать различные значения execs, а exitBlockOnFail - цепочку. Поэтому, когда вы предоставляете несколько execs для '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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...