Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 加特林邮政局_Json_Scala_Performance_Gatling - Fatal编程技术网

Json 加特林邮政局

Json 加特林邮政局,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:/

我有一个包含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文档说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