【问题标题】:Jmeter: JSON response manipulation and passing to the next http requestJmeter:JSON 响应操作并传递给下一个 http 请求
【发布时间】:2020-07-31 06:55:51
【问题描述】:

我已经从 HTTP GET 请求中获得了 JSON 文件的响应,我想使用该 JSON 并将其传递给下一个 HTTP 请求。我得到了以下响应数据

{
  "apiInfo": {
      "id": "23143",
      "name": "bookkeeping",
      "state": "used",
      "data": "15893712000000"
  },
  "apiDetails": [
     {
        "bookName": "abc",
        "state": "old",
        "noOfTimesUsed": "53"
        "additionalParam"{
            "name": "abc",
            "id": "123"
        }
    },
    {
        "bookName": "def",
        "state": "new",
        "noOfTimesUsed": "5",
        "action": "keep"
        "additionalParam"{
            "name": "def",
            "id": "456"
        }
    },
    {
        "bookName": "xyz",
        "state": "avg",
        "noOfTimesUsed": "23"
        "additionalParam"{
            "name": "ghi",
            "id": "789"
        }
    },
    {
        "bookName": "pqr",
        "state": "old",
        "noOfTimesUsed": "75",
        "action": "discard"
        "additionalParam"{
            "name": "jkl",
            "id": "012"
        }
    }
  ]
}

我想使用 JSON 响应中的“apiInfo”和“apiDetails”部分并操作其数据。如您所见,某些数组字段中包含属性“action”,而有些则没有。我想确保数组中的所有字段都有这些数据并被分配为'“action”:“keep”'。另外,我想添加来自 apiInfo 的“id”和来自 apiDetails 本身的附加参数的“名称”。我想要的最终结果有点像这样

"apiDetails": [
   {
      "id": "23143",
      "bookName": "abc",
      "state": "old",
      "noOfTimesUsed": "53",
      "action": "keep",
      "name":"abc"
   },
   {
       "id": "23143",
       "bookName": "def",
       "state": "new",
       "noOfTimesUsed": "5",
       "action": "keep",
      "name":"def"
   },
   { 
       "id": "23143",
       "bookName": "xyz",
       "state": "avg",
       "noOfTimesUsed": "23",
       "action": "keep",
      "name":"ghi"
   },
   {
       "id": "23143",
       "bookName": "pqr",
       "state": "old",
       "noOfTimesUsed": "75",
       "action": "keep",
      "name":"jkl"
    }
  ]

我一直在尝试使用 JSR223 采样器并且一直在苦苦挣扎。这有点复杂,我需要帮助。 P.S.:我尝试使用 javascript 代码来根据需要操纵结果,但没有成功。

请帮忙。

谢谢,席德

【问题讨论】:

    标签: json jmeter load-testing stress-testing jmeter-5.0


    【解决方案1】:
    1. JSR223 PostProcessor 添加为返回上述 JSON 的请求的子项
    2. 将以下代码放入“脚本”区域:

      def apiDetails = new groovy.json.JsonSlurper().parse(prev.getResponseData()).apiDetails
      
      apiDetails.each { apiDetail ->
          apiDetail.put('action', 'keep')
      }
      
      vars.put('request', new groovy.json.JsonBuilder(apidetails: apiDetails.collect()).toPrettyString())
      
    3. 就是这样,您应该可以在需要的地方将生成的请求称为${request}

    更多信息:

    【讨论】:

    • 感谢您的回答,我已经编辑了问题,现在我陷入了嵌套 JSON 以及从不同的 JSON 块中提取和放置的问题。请帮忙。
    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2020-11-08
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多