Json 加特林邮政局
我有一个包含JSON数组的JSON文件 test.jsonJson 加特林邮政局,json,scala,performance,gatling,Json,Scala,Performance,Gatling,我有一个包含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:/
[
{ "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文档说JSON Feeder将数组的每个元素加载到记录集合中
i、 e:
并将主体设置为.body(StringBody(“[{”id:${id}}]”)
问题是我有不同的密钥(姓名、年龄、出生日期),我希望每个密钥都是不同的请求
.body(StringBody("""[{"KEY_NAME_HERE": ${KEY_NAME_HERE}}]"""))
如何实现这一点?在您的例子中,该数组中的JSON会逐个加载,并且由于该JSON中的每个第一级密钥都将保存为会话属性,因此模拟中的用户最终只会使用3个属性中的1个,这取决于使用的JSON。这样你就不能(准确地说,不能轻易地)构建body字符串。在这种简单的情况下,最好让JSON具有相同的字段,以便在构建请求负载时可以依赖它们。Fe。您可以在单独的字段中放置有效负载键和值:
[
{
"key":"Name",
"value":"Bob"
},
{
"key":"Age",
"value":"37"
},
{
"key":"DOB",
"value":"12/01/1985"
},
]
通过这种方式,对于模拟中的每个用户,您将拥有两个属性key
和value
,因此您将能够构建如下有效负载:
.body(StringBody("""{"${key}": "${value}"}"""))
当然,这只适用于您描述的简单情况,并且只适用于JSON中的字符串值。如果你的最终目标是让事情变得更复杂,请提供现实生活中的例子。我就是这样做的:- company_users.json.json
[
{
"env":"dev",
"userName": "a@test.com",
"password": "Qwerty!12345678"
},
{
"env":"sit",
"userName": "b@test.com",
"password": "Qwerty!12345678"
},
{
"env":"uat",
"userName": "c@test.com",
"password": "Qwerty!12345678"
},
{
"env":"prod",
"userName": "d@test.com",
"password": "Qwerty!12345678"
}
]
工作代码段:
val jsonFileFeederCompany = jsonFile("data/company_users.json").circular
val get_company_user_token = http("Get Company Tokens")
.post(gwt_token_url)
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.body(StringBody(
"""{
"env": "${env}",
"userName": "${userName}",
"password": "${password}"
}"""
)).asJson
.check(status.is(200))
.check(jsonPath("$.jwtToken").saveAs("jwtToken"))
val getCompanyUsersGwtToken = scenario("Create Company GWT token Scenario")
.feed(GetTokenRequest.jsonFileFeederCompany)
.exec(GetTokenRequest.get_company_user_token).exitHereIfFailed
这将从json读取每个数组[position],并替换请求中的值,以从不同的环境获取安全令牌
希望这有帮助
问候,,
Vikram Pathania难以置信的共谋:)如果我想将整个json从文件中馈送到元素:body(StringBody
而不仅仅是用手和字符串插值构建东西,该怎么办?
val jsonFileFeederCompany = jsonFile("data/company_users.json").circular
val get_company_user_token = http("Get Company Tokens")
.post(gwt_token_url)
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.body(StringBody(
"""{
"env": "${env}",
"userName": "${userName}",
"password": "${password}"
}"""
)).asJson
.check(status.is(200))
.check(jsonPath("$.jwtToken").saveAs("jwtToken"))
val getCompanyUsersGwtToken = scenario("Create Company GWT token Scenario")
.feed(GetTokenRequest.jsonFileFeederCompany)
.exec(GetTokenRequest.get_company_user_token).exitHereIfFailed