我是使用 Scala 和 gatling 的新手。我正在定义一个场景,该场景正在执行 http post 调用以创建资源。在请求正文的键/字段之一中,我想为名称放置一个唯一标识符,因此使用 UUID.randomUUID() 但是当使用以下代码时请求失败。
val uuid = UUID.randomUUID().toString
println(uuid)
val scn = scenario("Testing !")
.exec(http("create resource")
.post("/data")
.body(StringBody(
"""{
"add_name": "${uuid}",
}""")).asJSON
.check(status is(200)))
Run Code Online (Sandbox Code Playgroud)
即使打印 uuid 确实在控制台中打印了 id 但在发布请求正文上抛出错误,因为我认为“${uuid}”可能是错误的,但我不确定。
非常感谢任何建议/帮助!
您在 gatling 的内部表达式替换和 Scala 的字符串插值之间混淆了。
许多 gatling DSL 方法将允许您在字符串中使用诸如 '${uuid}' 之类的标记 - 当发生这种情况时,gatling 实际上获取会话值 'uuid' 并将其替换。但这仅适用于会话中存在的键. 如果它们不存在,gatling 将仅使用 '${uuid}' 作为字符串文字。
Scala 支持使用s"$uuid". 在这种情况下,它将构建一个字符串,该字符串具有 scala 变量 'uuid' 的值。
在您的情况下,您有一个 'uuid' 变量,但您还没有进入 gatling 会话。您可以将 scala 变量与 scala 字符串插值语法一起使用,但这不会给您预期的结果,因为所有 gatling dsl 方法都定义了在启动时执行的构建器 - 您的所有 uuid 都将具有相同的值。
您需要做的是构建一个生成随机 uuid 的 feeder,然后使用 gatling feeder 构造在每次执行中获取唯一值。
private val uuidFeeder = Iterator.continually(Map("uuid" -> UUID.randomUUID().toString))
val scn = scenario("Testing !")
.feed(uuidFeeder) //this gets the next random uuid and puts it in the session
.exec(http("create resource")
.post("/data")
.body(StringBody(
"""{
"add_name": "${uuid}",
}""")).asJSON
.check(status is(200)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1579 次 |
| 最近记录: |