我在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重新粘贴到会话中,并在发布时再次提取它。
我想废除命名循环迭代器和访问会话的需要。
理想情况下,我想使用Stream
生成XML。
但加特林控制着循环,我无法递归。我是否需要妥协,或者我能否以功能的方式使用Gatling(没有变量或访问会话)?
答案 0 :(得分: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