如何在Jmeter中操作JSON数据

时间:2018-07-03 20:44:22

标签: json jmeter

在Jmeter脚本中,我需要处理一个http响应e操纵一个json以发送下一个请求,因为实际上这种操纵发生在Angular客户端中。

我的Http响应:

C:\> \path\to\vcvarsall.bat x86_amd64
C:\> set LIB=C:\OpenSSL-win64\lib;%LIB%
C:\> set INCLUDE=C:\OpenSSL-win64\include;%INCLUDE%
C:\> pip install cryptography

我需要将结果转换为json波纹,以在下一个请求中发布:

[
   {
      "function":"nameA",
      "rast":"F1",
      "tag":"EE",
      "probs":"0,987"
   },
   {
      "function":"nameB",
      "rast":"F2",
      "tag":"SE",
      "probs":"0,852"
   },
   {
      "function":"nameC",
      "rast":"F3",
      "tag":"CE",
      "probs":"0,754"
   }
]

我使用此JSON提取器过滤响应:

[
   {
      "function":"nameA",
      "rast":"F1",
      "type":{
         "name":"EE"
      },
      "id":"alpha"
   },
   {
      "function":"nameB",
      "rast":"F2",
      "type":{
         "name":"SE"
      },
      "id":"alpha"
   },
   {
      "function":"nameC",
      "rast":"F3",
      "type":{
         "name":"CE"
      },
      "id":"alpha"
   }
]

但是现在我需要解决其他问题:

  1. 添加一个[*].["function", "rast", "tag"] 属性(所有功能都相同)

  2. 添加名称类型的对象。

  3. 将标签属性移动到名为id的对象中。

  4. 将标签属性重命名为type

1 个答案:

答案 0 :(得分:2)

  1. 添加JSR223 PostProcessor作为请求的子项,该请求返回原始JSON
  2. 将以下代码放入“脚本”区域:

    def json = new groovy.json.JsonSlurper().parse(prev.getResponseData()).each { entry ->
        entry << [type: [name: entry.get('tag')]]
        entry.remove('tag')
        entry.remove('probs')
        entry.put('id', 'alpha')
    }
    def newJson = new groovy.json.JsonBuilder(json).toPrettyString()
    log.info(newJson)
    
  3. 就是这样,您应该在 jmeter.log 文件中看到生成的JSON。

    JSR223 PostProcessor manupulate JSON

    如果需要在JMeter变量中添加它,请将下一行添加到脚本末尾:

    vars.put('newJson', newJson)
    

    ,您将可以在需要时以${newJson}的身份访问生成的值

更多信息: