Доступ к значениям сеанса при выполнении ChainBuilder - PullRequest
0 голосов
/ 11 сентября 2018

Возможно ли получить доступ к значениям сеанса и при этом выполнить объект ChainBuilder?В соответствии с тем, как настроен мой код в данный момент, HTTP-запрос фактически никогда не выполняется, поскольку он просто возвращает сеанс.Мне нужны атрибуты сеанса для создания параметра заголовка со всеми этими значениями сеанса.

val testTCSService = scenario("Some Scenario")
    .doIf(session => session.contains("value")) {
      exec(session => if(session.contains("otherValue")) session else session.markAsFailed)
        .exitHereIfFailed
        .exec{session => OtherClass.verifyHTTPCall(session("value").as[String], session("secondValue").as[String], session("thirdValue").as[String])
        session}
    }

def verifyHTTPCall(token: String, realmId: String, userId: String): ChainBuilder = {
        exec(http("HTTP Call")
          .post("Some URL")
          .header("header_value", generateHeader(value, secondValue, thirdValue))
          .check(status.is(200))
    }

1 Ответ

0 голосов
/ 12 сентября 2018

Это не сработает, потому что Гатлинг работает не так, как вы (и, в основном, все, кто начинает его использовать) думают.Построитель цепочки сценариев выполняется только один раз за симуляцию и создает цепочку действий, которая затем используется каждым отдельным пользователем в качестве шаблона для всех запросов.Поэтому вам нужно не создать ChainBuilder в сеансе, а извлечь данные из сеанса в ChainBuilder.В вашем случае будет проще использовать Session.Expression[T] (некоторые действия принимают этот тип параметра, который является функцией типа Session => T, чтобы ваш код мог выглядеть так:

val testTCSService = scenario("Some Scenario")
  .doIf(session => session.contains("value")) {
    exec(session => if(session.contains("otherValue")) session else session.markAsFailed)
      .exitHereIfFailed
      .exec(verifyHTTPCall)
  }

def generateHeader(a: String, b: String, c: String): String = ???

def verifyHTTPCall = http("HTTP Call")
  .post("Some URL")
  .header("header_value", session => generateHeader(session("value").as[String], session("secondValue").as[String], session("thirdValue").as[String]))
  .check(status.is(200))

Или проще с передачейвесь сеанс вместо 3-х значений атрибутов и избавление от избыточного doIf (который пропускает весь сценарий, если значение не установлено, поэтому весь механизм неудачного сеанса не будет работать):

def generateHeader(session: Session): String = {
  //Extract values from session and build header
}

val testTCSService = scenario("Some Scenario")
  .exec(session => if(session.contains("otherValue")) session else session.markAsFailed)
    .exitHereIfFailed
    .exec(http("HTTP Call")
      .post("Some URL")
      .header("header_value", session => generateHeader(session))
      .check(status.is(200)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...