Gatling JSON Feeder独特的POST机构

问题描述 投票:1回答:1

我有一个包含JSON数组的JSON文件

test.json

[
  { "Name": "Bob" },
  { "Age": "37" },
  { "DOB": "12/01/1985"}
]

我想针对端点测试JSON数组中的每个相应元素,以观察系统对独特有效负载的性能

目前我有

testService.scala

val payload = jsonFile("test.json").circular
val httpProtocol = http
    .baseURL("http://test.com")
    .headers(Map("Content-Type" -> "application/json"))

val scn = scenario("Test Service")
    .feed(payload)
    .exec(http("test_request")
        .post("/v1/test")
        .queryParam("key", "123")
        .body()

我无法将每个孩子从.body()的有效载荷中传递为JSON

Gatling Docs说JSON Feeder将Array的每个元素加载到一个记录集合中

https://gatling.io/docs/2.3/session/feeder/

即:

record1: Map("id" -> 19434, "foo" -> 1)
record2: Map("id" -> 19435, "foo" -> 2)

并将身体设置为.body(StringBody("""[{"id": ${id}}]"""))

问题是我有不同的密钥(名称,年龄,DOB),我希望每个密钥都发送不同的请求。

.body(StringBody("""[{"KEY_NAME_HERE": ${KEY_NAME_HERE}}]"""))

我该如何实现这一目标?

json scala performance gatling
1个回答
0
投票

在您的情况下,来自该数组的JSON将逐个加载,并且由于该JSON中的每个第一级键都将保存为会话属性,因此模拟中的用户最终只会使用3个属性中的1个,具体取决于使用哪个JSON。这种方式你不能(或准确地说不能轻易)构建体字符串。在这种简单的情况下,让JSON具有相同的字段会更好,因此在构建请求有效负载时可以依赖它们。铁。您可以将有效内容键和值放在单独的字段中:

[
  {
    "key":"Name",
    "value":"Bob"
  },
  {
    "key":"Age",
    "value":"37"
  },
  {
    "key":"DOB",
    "value":"12/01/1985"
  },
]

这种方式对于模拟中的每个用户,您将有两个属性keyvalue,因此您将能够构建有效负载,如:

.body(StringBody("""{"${key}": "${value}"}"""))

当然,这只适用于您描述的简单情况,并且只能使用JSON中的字符串值。如果你的最终目标是制作更复杂的东西,请提供真实的例子。

© www.soinside.com 2019 - 2024. All rights reserved.