Scala 在Gatling中调用另一个函数中的两个函数不起作用

Scala 在Gatling中调用另一个函数中的两个函数不起作用,scala,gatling,scala-gatling,Scala,Gatling,Scala Gatling,我试图在一个函数中执行多个HTTP调用 主要内容: 现在在这个方法中,我调用了另外两个进行不同http调用的方法。第一个调用将结果(数组)保存在getLicensesForDevice_TA会话变量中。在遍历变量时,我尝试基于数组中的元素进行另一个http调用。但是,由于某种原因,第二个调用(revokeLicense)似乎没有执行(问题与If语句无关,我已经检查过了)。在requestChain中调用RevokeClicense direkt时,它被正确执行 private def clean

我试图在一个函数中执行多个HTTP调用

主要内容:

现在在这个方法中,我调用了另外两个进行不同http调用的方法。第一个调用将结果(数组)保存在getLicensesForDevice_TA会话变量中。在遍历变量时,我尝试基于数组中的元素进行另一个http调用。但是,由于某种原因,第二个调用(revokeLicense)似乎没有执行(问题与If语句无关,我已经检查过了)。在requestChain中调用RevokeClicense direkt时,它被正确执行

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

那不行。如中所述,不能在Scala函数中使用Gatling DSL。gatlingdsl方法只是在引导时构建组件的构建器

Gatling DSL组件是不可变的ActionBuilder,必须完全链接,并且只在启动时构建一次。结果是一个工作流操作链。这些建设者自己不做任何事情,他们不会引发任何副作用,他们只是定义。因此,在运行时在函数中创建这样的DSL组件是完全没有意义的。如果希望在执行流中使用条件路径,请使用适当的DSL组件(doIf、randomSwitch等)

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