3

我在 Gatling 场景中遇到了以下代码(为简洁/隐私而修改):

val scn = scenario("X")
  .repeat(numberOfLoops, "loopName") {
      exec((session : Session) => {
        val loopCounter = session.getTypedAttribute[Int]("loopName")
        session.setAttribute("xmlInput", createXml(loopCounter))
      })
      .exec(
        http("X")
         .post("/rest/url")
         .headers(headers)
         .body("${xmlInput}"))
      )
  }

它在重复块中命名循环,将其从会话中取出并使用它来创建唯一的输入 XML。然后,它将 XML 粘贴回会话中,并在发布时再次提取它。

我想消除命名循环迭代器和访问会话的需要。理想情况下,我想使用 aStream来生成 XML。

但是加特林控制循环,我不能递归。我是否需要妥协,或者我可以以一种功能性的方式使用 Gatling(没有 vars 或访问会话)?

4

1 回答 1

2

正如我所看到的,numberOfLoops 和 createXml 似乎都不依赖于任何可能存储在会话中的用户相关内容,因此循环可以在构建时解决,而不是在运行时解决。

import com.excilys.ebi.gatling.core.structure.ChainBuilder

def addXmlPost(chain: ChainBuilder, i: Int) =
    chain.exec(
        http("X")
            .post("/rest/url")
            .headers(headers)
            .body(createXml(i))
    )

def addXmlPostLoop(chain: ChainBuilder): ChainBuilder =
    (0 until numberOfLoops).foldLeft(chain)(addXmlPost)

干杯,

斯蒂芬妮

PS:询问有关 Gatling 问题的首选方式是我们的 Google 群组:https ://groups.google.com/forum/#!forum/gatling

于 2012-12-17T09:27:42.557 回答