簡體   English   中英

使用 UUID.randomUUID().toString 在請求正文中設置一個鍵,給出問題 - scala

[英]Using UUID.randomUUID().toString for setting a key in request body giving issues- scala

我是使用 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)))

即使打印 uuid 確實在控制台中打印了 id 但在 post 請求正文上拋出錯誤,因為我認為“${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)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM