我在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() );
}
答案 0 :(得分:1)
根据JMeter Best Practices,建议使用JMeter测试元素并尽可能避免编写脚本。我的期望是你可以使用JSON Extractor
获得所需的一切相关的JSON Path查询类似于:
$.data[?(@._id == '6138b66a-83df-4860-8327-62f942e0e9b3')].services[*].builds
演示:
如果需要,可以使用相关的JMeter变量替换硬编码的项目ID:
$.data[?(@._id == '${project_id}')].services[*].builds
完全等效配置: