使用 Gatling 构建动态 json 请求

Build Dynamic json request using Gatling

我正在尝试使用来自 csv 文件的数据构建随机 json 请求。我定义了我的 .scenario 函数如下

但是当我将日志级别设置为跟踪时,我看到所有请求都具有相同的值。有什么我遗漏的吗?

def getScenario () = {
         scenario("Create API Promotions")
        .exec(
            http("Create Request")
            .post(createApiURL)
            .headers(headers_1)
            .body(StringBody(getCreateRequest))
            .check(status.is(200))
            )
    }


    def getCreateRequest: String = {
         val data = s"""
          {
            "Specification":{  

                "Item":${getItems()}
            }
          }
          """.stripMargin
          data   
    }

def getItems (): String = {
        val record: Map[String, Any] = getItemsFromCSV()
        val code: String = record("Code").toString
        val clientDataType: String = record("Type").toString

        val clientData =    (
                                ("Code" -> code) ~
                                ("Type" -> clientDataType)                                 
                            )
        val targetJson = List(clientData);
        return compact(render(targetJson))
    }

    def getItemsFromCSV() : Map[String, Any] = {

            val items: Seq[Map[String, Any]] = csv("../resources/create/items.csv").readRecords
            return promoTarget(getRandomNumber(0, items.length-1)) 
    }

Gatling EL 提供了一个内置函数 (jsonStringify()),可以将对象正确格式化为 JSON 值(用双引号将字符串括起来,处理 null 等)

此外,我认为您可以使用进纸器来获取 csv 值。

val items = csv("../resources/create/items.csv").random

scenario("Create API Promotions")
  .feed(items)
  .exec(buildPostData)
  .exec(http("Create Request")
    .post(createApiURL)
    .headers(headers_1)
    .body(StringBody("${postData.jsonStringify()}"))
    .check(status.is(200))
  )

def buildPostData: Expression[Session] = session => {
  val postData: Map[String, Any] =
      Map(
        "Code" -> session("Code").as[String],
        "Type" -> session("Type").as[String]
      )
  session.set("postData", postData)
}

官方文档链接: