今天在项目中遇到类似这样的问题,在如下的一个json响应中,需要提取所有的id值,并把它们全部打印出来
{
list:
[{
"id": "48-SC",
"code": "A440000000",
"rateCode": "440",
"name": "广东省",
"lang": "SC",
"level": 2,
"parentCode": "A000086000",
"parentId": "11",
"countryCode": "A000086000",
"distId": "48",
"availableAsDestination": true,
"availableAsOrigin": true
}, {
"id": "270-SC",
"code": "A445100000",
"rateCode": "768",
"name": "潮州市",
"lang": "SC",
"level": 3,
"parentCode": "A440000000",
"parentId": "48",
"countryCode": "A000086000",
"distId": "270",
"availableAsDestination": true,
"availableAsOrigin": true
}, {
"id": "688-SC",
"code": "A445102000",
"rateCode": "768",
"name": "湘桥区",
"lang": "SC",
"level": 4,
"parentCode": "A445100000",
"parentId": "270",
"countryCode": "A000086000",
"distId": "688",
"availableAsDestination": true,
"availableAsOrigin": true
} ]
}
关于json的提取不会的可以参考
Jmeter书中不会教你的(8)——提取响应内容的神器JSON Extractor_agrapea的博客-CSDN博客
新建一个脚本框架如下
dummy sampler中响应值为以上json字符串,在它下面加上后置json提取器用于提取所有的id值
执行后从debug sampler中可以看到提取的值格式为id_数字,匹配的结果为3个
在beanshell中我们需要完成将这些id值依次打印,两个新的知识点
1)如何获取这些带有数字后缀的变量。
如果我们直接使用${id},或者vars.get("id")是无法取得这些值的,必须是${id_1}或者vars.get("id_1")这种
2)利用for循环,及id_matchNr值确认循环次数,将所有id打印
因为提取的值后缀编码是从1开始,所以在循环时设置i值从1开始,利用vars.get("id_"+i)获取第N个变量的值
for(i=1;i<=${id_matchNr};i++)
{
log.info(vars.get("id_"+i));
}