我有一个包含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将逐个加载,并且由于该JSON中的每个第一级键都将保存为会话属性,因此模拟中的用户最终只会使用3个属性中的1个,具体取决于使用哪个JSON。这种方式你不能(或准确地说不能轻易)构建体字符串。在这种简单的情况下,让JSON具有相同的字段会更好,因此在构建请求有效负载时可以依赖它们。铁。您可以将有效内容键和值放在单独的字段中:
[
{
"key":"Name",
"value":"Bob"
},
{
"key":"Age",
"value":"37"
},
{
"key":"DOB",
"value":"12/01/1985"
},
]
这种方式对于模拟中的每个用户,您将有两个属性key
和value
,因此您将能够构建有效负载,如:
.body(StringBody("""{"${key}": "${value}"}"""))
当然,这只适用于您描述的简单情况,并且只能使用JSON中的字符串值。如果你的最终目标是制作更复杂的东西,请提供真实的例子。