当前位置: 首页 > 知识库问答 >
问题:

加特林邮政局

柯波娃
2023-03-14

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

测验json

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

我想针对endpoint测试JSON数组中的每个元素,以观察系统针对唯一有效负载的性能

目前我有

测试ervice.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将数组的每个元素加载到一个记录集合中

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

即:

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

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

问题是我有不同的密钥(姓名、年龄、出生日期),我希望每个密钥都是不同的请求。

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

我如何做到这一点?

共有2个答案

訾朗
2023-03-14

在您的例子中,该数组中的JSON会一个接一个地加载,而且由于该JSON中的每个一级密钥都将保存为会话属性,因此模拟中的用户最终只会获得3个属性中的1个,具体取决于使用的JSON。这样你就不能(或者准确地说,不能轻易地)构建身体线。在这种简单的情况下,最好让JSON具有相同的字段,以便在构建请求负载时可以依赖它们。Fe。您可以在单独的字段中放置有效负载键和值:

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

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

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

当然,这只适用于您描述的简单情况,并且只适用于JSON中的字符串值。如果你的最终目标是让事情变得更复杂,请提供现实生活中的例子。

孔驰
2023-03-14

我是这样做的:-

公司和用户。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中读取每个数组[位置]并替换请求中的值,以从不同的环境中获取安全令牌。

希望这有帮助。

你好Vikram Pathania

 类似资料:
  • Gatling解析Strings参数值并将它们转换为函数,这些函数将根据存储在会话中的数据计算结果,然后对其进行评估。 加特林文件 有没有办法在exec中手动执行此操作? 我有多个使用EL属性的请求体模板,发送的请求将因进纸器而异 我目前拥有的代码如下: 我希望没有办法评估嵌套的EL属性,但是有没有办法使用会话变量手动评估它?类似于 我在其他一些问题中看到过ELCompiler被引用,但不确定从哪

  • 我试着用各种“Rest”和“atOnceUser”进行注射。我在留档上没有找到一个好的解决方案。 我的方法是使用本地计数器创建一个名为“getNextNumber()”的函数,以增加“atOnceUser”的数量,但该函数一开始只调用一次。 有什么想法吗? 我的代码:

  • 我有一个加特林记录,现在我想重复这个场景10次,但我遇到了一些问题,我的重复动作只在第一步启动,不会完成场景的整个步骤。我能知道有什么问题吗?我是否需要在每一步中添加重复(10){}?下面是我的scala代码。

  • 我有一个数组,我想用于2个馈线。我希望每个馈线都能够使用数组中的所有值。但似乎值用完了

  • 我需要在Gatling中发出请求,在其中我能够访问会话项(没有表达式语言)。我需要这样做,因为我想将数据注入到来自csv进纸器的请求中。为了演示我的问题,我有一个小例子(没有会话的实际需要)。 以下场景运行良好: 但那一个没有(我得到异常

  • 我只是试着实施下面的策略,从加特林的CSV反馈器中获取价值。 val csvFeeder=csv(“data/Pet1.csv”)。一批圆形 val csvFeeder=csv(“data/Pet1.csv”)。圆形的 两者似乎都很好。我们什么时候用“.batch.circular”代替“.circular”作为Gatling的喂食策略。 谢谢你的帮助。