[英]Gatling JSON Feeder Unique POST Bodies
我有一个包含 JSON 数组的 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 .body()
Gatling Docs 说 JSON Feeder 将 Array 的每个元素加载到记录集合中
https://gatling.io/docs/2.3/session/feeder/
IE:
record1: Map("id" -> 19434, "foo" -> 1)
record2: Map("id" -> 19435, "foo" -> 2)
并将正文设置为.body(StringBody("""[{"id": ${id}}]"""))
问题是我有不同的键(姓名、年龄、出生日期),我希望每个键都发送不同的请求。
.body(StringBody("""[{"KEY_NAME_HERE": ${KEY_NAME_HERE}}]"""))
我如何实现这一目标?
这就是我的做法:-
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 读取每个 array[position] 并替换请求中的值,以从不同的环境中获取安全令牌。
希望这可以帮助。
问候, 维克拉姆·帕塔尼亚
在您的情况下,来自该数组的 JSON 被一个一个加载,并且由于来自该 JSON 的每个第一级键都将保存为会话属性,因此您模拟中的用户最终只会获得 3 个属性中的一个,具体取决于使用的 JSON。 这样你就不能(或者准确地说不能很容易)建立身体字符串。 在这种简单的情况下,最好使用具有相同字段的 JSON,这样您就可以在构建请求有效负载时依赖它们。 铁。 您可以将有效负载键和值放在单独的字段中:
[
{
"key":"Name",
"value":"Bob"
},
{
"key":"Age",
"value":"37"
},
{
"key":"DOB",
"value":"12/01/1985"
},
]
通过这种方式,对于模拟中的每个用户,您将拥有两个属性key
和value
因此您将能够构建如下有效负载:
.body(StringBody("""{"${key}": "${value}"}"""))
当然,这仅适用于您描述的简单情况以及 JSON 中的纯字符串值。 如果您的最终目标是让事情变得更复杂,请提供现实生活中的例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.