Вызов двух функций в другой функции в Gatling не работает - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь выполнить несколько HTTP-вызовов в одной функции

Main:

def requestChain: ChainBuilder = {
    feed(feeder(dataSource))
    .exec(cleanTransactions("Revoke Transaction"))
  }

Теперь в рамках этого метода я вызываю 2 других метода, которые выполняют разные HTTP-вызовы. первый вызов сохраняет результат (массив) в переменной сеанса getLicensesForDevice_TA. Перебирая переменную, я пытаюсь сделать еще один http-вызов на основе элементов в массиве. Однако, похоже, что второй вызов (revokeLicense) по какой-то причине не выполняется (проблема не связана с оператором If, я уже проверял это). При вызове revokeLicense direkt в requestChain он выполняется правильно.

private def cleanTransactions(methodeName:String, device:String, returnCode:Integer ): ChainBuilder = {
    exec(getLicensesForDevice(methodeName, device, 200))
      .foreach("${getLicensesForDevice_TA}", "deleteLicensesForDevice_TA") {
        exec(session => {
          val gatlingTransactionID = session("deleteLicensesForDevice_TA").as[String].trim
          session.set("gatlingTransactionID", gatlingTransactionID)
        })
        if ("${gatlingTransactionID}".contains("TestTA")){
          exec(revokeLicense(methodeName,"${gatlingTransactionID}",204,false))
        }else{
          exec(session => {
            println("No TA will be executed: ${gatlingTransactionID}" )
            session
          })
        }
      }
  }

1 Ответ

1 голос
/ 21 апреля 2020

Это не может работать. Как объяснено в документации Gatling , вы не можете использовать Gatling DSL внутри Scala функций. Методы DSL Gatling - это просто компоновщики, которые создают компоненты один раз во время загрузки.

Компоненты Gatling DSL являются неизменными ActionBuilder, которые должны быть объединены в цепочку и создаются только один раз при запуске. Результатом является цепочка действий (действий). Эти строители ничего не делают сами по себе, они не вызывают никаких побочных эффектов, они просто определения. В результате создание таких компонентов DSL во время выполнения в функциях совершенно бессмысленно. Если вам нужны условные пути в потоке выполнения, используйте соответствующие компоненты DSL (doIf, randomSwitch и т. Д. c)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...