以下是代码:
def readEntityMultipleTimes(entityName: String, pathPrefix: String = "") = {
val plural = entityName + "s"
exec(http(s"Geting all $plural")
.get(pathPrefix + plural)
.check(status is 200)
.check(jsonPath("$[*].id").findAll.saveAs("entityIds"))
).exec(s => {
if (logLevel >= 2) println("\nids:\n" + s("entityIds"))
s
})
.pause(interval millis)
.foreach("${entityIds}", "entityId") {
repeat(readEntityNumber) {
exec(http(s"Getting one $entityName")
.get(pathPrefix + plural + "/${entityId}")
.check(status is 200)
)
}
}
}
问题是entityId
可能包含空格,但它无法通过HTTP GET请求。我需要用%20
替换空格。
我尝试了加剧EL ${entityId.replaceAll(\" \", \"%20\")}"
或${java.net.URLEncoder.encode(entityId)}
我想建议的方法是从会话中获取entityId
并在Scala中执行这些操作,但是这个变量是为每个循环迭代动态创建的,所以我不知道在哪里放置&#34 ;会议lambda" (session => ...)
答案 0 :(得分:2)
Gatling EL语法有限,您不能在其中放置任何Scala代码。
你确实必须传递一个功能。
.get(session => pathPrefix + plural + URLEncoder.encode(session("entityId").as[String])))