如何使用 Scala 从 For 循环中获取返回值并将其传递给 .body(StringBody(session => in Gatling



如何使用Scala 从For循环中获取返回值并将其传递给Gatling中的.body(StringBody(session=>

我用for循环创建了一个方法,用scala 在gatling中生成字符串数组

def main(args: Array[String]): Unit = {
var AddTest: Array[String] = Array[String]()
for (i <- 0 to 3) {
val TestBulk: String =
s"""{ "name": "Perftest ${Random.alphanumeric.take(6).mkString}",
"testID": "00000000-0000-0000-0000-000000006017",
"typeId": "00000000-0000-0000-0000-000000011001",
"statusId": "00000000-0000-0000-0000-000000005058"};"""
AddTest = TestBulk.split(",")
//  val TestBulk2: Nothing = AddTest.mkString(",").replace(';', ',')
// println(TestBulk)
}
}

现在我想将返回值传递给.body(StringBody(session=>

.exec(http("PerfTest Bulk Json")
.post("/PerfTest/bulk")
.body(StringBody(session =>
s"""[(Value from the for loop).mkString(",").replace(';', ',')
]""".stripMargin)).asJson

请帮我考虑各种可能性如果

对此不需要循环(或varsplit(。您在任何地方都没有;,所以最后一个replace是毫无意义的。

val ids = """
"testId": "foo", 
"typeId": "bar", 
"statusId": "baz"
"""
val data = (1 to 3)
.map { _ => Random.alphanumeric.take(6).mkString }
.map { r => s""""name": "Perftest $r"""" }
.map { s => s"{ $s, $ids }" }
.mkString("[", ",", "]")
exec("foo").post("/bar").body(_ => StringBody(data)).asJson

(我在生成的字符串周围添加了[],使其看起来像有效的json(。

或者,您可能有一些库,可以开箱即用地将映射和列表转换为json(我不知道gatling,但一定有(,一种更干净的方法是使用这样的东西:

val ids = Map(
"testId" -> "foo", 
"typeId" ->  "bar", 
"statusId" ->  "baz"
)
val data = (1 to 3)
.map { _ => Random.alphanumeric.take(6).mkString }
.map { r => ids + ("name" -> s"Perftest $r")  }

exec("foo").post("/bar").body(_ => StringBody(toJson(data))).asJson

这对我的有效

感谢@迪玛。我用你建议的方法构建了这个。

import scala.util.Random
import math.Ordered.orderingToOrdered
import math.Ordering.Implicits.infixOrderingOps
import play.api.libs.json._
import play.api.libs.json.Writes
import play.api.libs.json.Json.JsValueWrapper
val data1 = (1 to 2)
.map {r => Json.toJson(Map(
"name" -> Json.toJson(s"Perftest${Random.alphanumeric.take(6).mkString}"),
"domainId"->Json.toJson("343RDFDGF4RGGFG"),
"typeId"->Json.toJson("343RDFDGF4RGGFG"),
"statusId"->Json.toJson("343RDFDGF4RGGFG"),
"excludedFromAutoHyperlinking" ->Json.toJson(true)))}
println(Json.toJson(data1))```

最新更新