一、jp@gc-JSON/YAML Path EXtractor插件
在使用前需要安装jp@gc-JSON/YAML Path EXtractor插件,在jmeter选项-Plugins Manager 下Available Plugins搜索json/yaml进行安装。如图我已安装完成,在Installed Plugins列表显示。
测试部 > Jmeter-JSON中提取数据 > image2023-2-24 17:40:22.png
测试部 > Jmeter-JSON中提取数据 > image2023-2-24 17:40:53.png
二、jp@gc-JSON/YAML Path EXtractor如何使用
1、线程组-后置处理器-jp@gc-JSON/YAML Path EXtractor添加
2、获取数据时不同的符号表示不同的含义,如下列表
二、jp@gc-JSON/YAML Path EXtractor如何使用
1、线程组-后置处理器-jp@gc-JSON/YAML Path EXtractor添加
2、获取数据时不同的符号表示不同的含义,如下列表
字符/表达式
说明
备注
$
根节点
@
当前节点
. 或者[]
用于连接父子节点
..
深层扫描
*
通配符
[?(表达式)]
用法:[start:end]。切片
=~
正则表达式匹配
用法:@.key=~/正则表达式/
三、实战操作
1、格式化数据(测试数据)
{
"data":{
"count":34,
"next":"http://***.***-vip.cn/admin_api/v1/consultant/?page=2",
"previous":"dd",
"results":[
{
"uuid":"PjYW29qsY9xkWt2pxuYpb8",
"showname":"超级管理员",
"mobile":"18888888888",
"level":4,
"is_tmk":1,
"group":"销售组001,销售组002,销售组006,xm1销售组1,测试简化,测试简化"
},
{
"uuid":"CuvM58cudnKYZcuoNVSPSQ",
"showname":"测试01",
"mobile":"18111111111",
"level":4,
"is_tmk":1,
"group":"销售组001,销售组002,销售组006,xm1销售组1,测试简化"
},
{
"uuid":"sbSvXLB8vQS6GPNEESqfAg",
"showname":"测试02",
"mobile":"19999999999",
"level":4,
"is_tmk":1,
"group":"销售组001,销售组002,销售组006,xm1销售组1,xm1销售组2,测试简化,测试简化222222"
}
]
}
}
2、获取所有uuid
$.data.results[*].uuid
3、嵌套比较深使用深层扫描获取uuid
$..uid
4、获取第一个uuid的值
方式一,完整路径提取
$.data.result[0].uuid
方式二,嵌套比较深可以用深度扫描,但是必须保留uuid的上一层(列表的那一层,表示是列表的第几个元素)
$..results[0].uuid
5、使用切片获取前两个uuid的值
$..results[0:2].uuid
6、获取前两个uuid的值和对应的showname的值
$..[?(@.showname=="测试01")]
7、获取showname,且值为“测试01”的数据
$..[?(@.showname=="测试01")]
8、使用正则匹配,获取所有数据的uuid值,且showname的值包含“超级”字段
$..[?(@.showname=~/.*超级.*/)]
test20230906.jmx 智慧医院-住院登记.jmx
String inputString = prev.getResponseDataAsString();//自定义一个变量response_data,来获取请求的返回值
//log.info("接口的值"+response_data);
String[] splitArray = inputString.split("");
//StringBuilder csvData = new StringBuilder();
props.put("mycount", String.valueOf(splitArray.length));
for (int i = 0; i < splitArray.length; i++) {
String value = splitArray[i];
// log.info("接口的值: " + value);
// 将值添加到 CSV 数据中
// csvData.append(value).append(",");
vars.put("myArray_" + i, value);
}
// 将 CSV 数据写入文件
//String filePath = "c:/test.csv";
//File file = new File(filePath);
//if (!file.exists()) {
// file.createNewFile();
//}
//FileOutputStream outputStream = new FileOutputStream(file);
//outputStream.write(csvData.toString().getBytes());
//outputStream.close();
${__P(mycount)}
String variableValue = vars.get("myArray_" + ${__jm__xunhuan__idx});
vars.put("myVariable", variableValue);
//log.info("接口的值: " + variableValue);
2,jemter的beanshell断言,并打印报错信息
String resp = prev.getResponseDataAsString();
String code = prev.getResponseCode();
String reqDate = prev.getSamplerData();
String time="${__time(yyyy-MM-dd HH:mm:ss,)}";
if ("200".equals(""+code) == false){ //判断响应是否包含200;也可以判断字符串:if((response.contains("\"bindStatus\":\"Y\"")))
Failure = true;
String[] ss = resp.split("\n");
FailureMessage = ss[0];
FileWriter fstream = new FileWriter("/home/PerfSpace/03project/errLog/ATH文件下载Error.txt",true); //打开要写入文件的路径和名称
BufferedWriter out = new BufferedWriter(fstream);
out.write("===================================began================================");
out.write("请求时间:"+vars.get("time"), "请求报文:"+reqDate);
out.write(System.getProperty("line.separator")); //换行符,避免内容打印到一行,不方便查看
out.write("响应时间:"+vars.get("time"),"接口响应:"+FailureMessage);
out.write(System.getProperty("line.separator"));
out.write("===================================over================================");
out.write(System.getProperty("line.separator"));
out.close();
fstream.close();
}
else {
Failure = false;
}
————————————————
版权声明:本文为CSDN博主「八二五八二五」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_49428126/article/details/127437442
Jmeter-JSON中提取数据
最新推荐文章于 2024-05-27 18:01:31 发布