如何使用Java或Groovy在Jmeter中解析JSON

时间:2018-04-19 15:55:04

标签: json groovy jmeter

我在Jmeter中遇到JSON解析问题。 这是回复

{
  "data": [
    {
      "_id": "6138b66a-83df-4860-8327-62f942e0e9b3",
      "artifactory_repo": {
        "maven-snapshot-repo": ""
      },
      "created_by": "system",
      "created_date": "2018-04-17T10:45:55",
      "created_request_id": "",
      "description": "",
      "git_repo": {
        "https://github.com/Leela-Padmaja/example-java-maven.git": ""
      },
      "id": "6138b66a-83df-4860-8327-62f942e0e9b3",
      "jobs": {
        "clone-MavenEx": "http://101.707.106.99:803/job/clone-MavenEx/1/"
      },
      "name": "Test1",
      "pattern": {
        "exclude": [],
        "include": []
      },
      "services": {
        "0727a49a-6c95-433e-9fc5-7e5c760cc76f": {
          "builds": {
            "clone-MavenEx": {
              "last_retrieved": "2018-04-19T11:00:01.011Z"
            }
          }
        }
      },
      "updated_by": "system",
      "updated_date": "2018-04-19T11:00:03",
      "updated_request_id": ""
    },

我需要获取特定 _id 值的构建名称。上面的示例是 clone-MavenEx ,没有其他任何内容。我之前使用JSON Extractor获得的_id值。

我在JSR223后处理器中使用了以下Groovy代码

import org.apache.jmeter.samplers.SampleResult; 
import groovy.json.JsonSlurper;

String jsonString = prev.getResponseDataAsString();
String projectID = vars.get("project_id");

def slurper = new JsonSlurper();
def result  = slurper.parseText(jsonString);
def index   = result.find { it._id == projectID };

if ( index == null ) {
    vars.put( "buildName", 'NOTFOUND' );
} else {
    vars.put( "buildName", index.builds.toString() );
}

1 个答案:

答案 0 :(得分:1)

根据JMeter Best Practices,建议使用JMeter测试元素并尽可能避免编写脚本。我的期望是你可以使用JSON Extractor

获得所需的一切

相关的JSON Path查询类似于:

$.data[?(@._id == '6138b66a-83df-4860-8327-62f942e0e9b3')].services[*].builds 

演示:

JMeter JSON Extractor

如果需要,可以使用相关的JMeter变量替换硬编码的项目ID:

$.data[?(@._id == '${project_id}')].services[*].builds

完全等效配置:

JMeter JSON Extractor