scala - 使用 UUID.randomUUID().toString 在请求正文中设置 key 给出问题 - scala

标签 scala gatling

我刚开始使用 scala 和 gatrin。我正在定义一个场景,该场景正在执行 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)))

尽管打印 uuid 确实在控制台中打印了 id,但在发布请求主体上引发了错误,因为我相信“${uuid}”可能是错误的,但我不确定。

非常感谢任何建议/帮助!

最佳答案

你混淆了 gattle 的内部表达式替换和 scala 的字符串插值。

许多 gattle DSL 方法允许您在字符串中使用“${uuid}”等标记 - 当发生这种情况时,gattle 实际上会获取 session 值“uuid”并将其替换。但这仅适用于存在的键在 session 中。如果它们不存在,加特林将仅使用 '${uuid}' 作为字符串文字。

Scala 支持使用 s"$uuid" 进行字符串插值。在本例中,它将构建一个具有 scala 变量“uuid”值的字符串。

就您而言,您有一个“uuid”变量,但尚未放入加特林 session 中。您可以仅将 scala 变量与 scala 字符串插值语法一起使用,但这不会给您期望的结果,因为所有 gatling dsl 方法都定义在启动时执行的构建器 - 您的所有 uuid 将具有相同的值。

您需要做的是构建一个生成随机 uuid 的 feeder,然后使用 gatting 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)))

关于scala - 使用 UUID.randomUUID().toString 在请求正文中设置 key 给出问题 - scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693120/

相关文章:

scala - 如何将列转换为向量类型?

scala - 使用 Scala 在类型级编程中推广 DivisibleBy

gatling - 你如何使用 Gatling 检查 If 方法?

scala - 如何为 Gatling 场景设置 cookie

gatling - 在 gatling 场景之间共享数据

forms - 重复值的唯一约束

scala - 在 Scala 宏中检测案例类

Scala.js 导出抽象 val/var

Java 9 与加特林

gatling - 如何循环加特林注入(inject)?