您的位置:首页 > Web前端 > JavaScript

<续>jmeter随笔(12)--定制json响应结果断言

2016-10-30 22:06 537 查看

故事背景

上篇讲了大体两件事情:

1、可以写类java脚本定制json分析功能

2、如何制作jmeter的自己的jar包

详细信息,可以看jmeter随笔(12)–定制json响应结果断言

真实需求

jemter随笔(12)中的功能并不能满足我们的实际操作需求。那么我们的真实需求是什么呢?

1、获取某个json对象中某个key的value

2、json响应结果中是否存在某个key-value键值对

代码实现

1、获取某个json对象中某个key的value

说明:

1.入参abc,json对象的字符串形式;入参theKey,根据此key,获取返回的value

2.返回,找到值为theKey的key-value键值对,返回true,并将value存入对象的字段“theValues”中;反则异之

public boolean getValue(String abc, String theKey) {
JSONObject jsonObj = JSON.parseObject(abc);
for (Map.Entry<String, Object> entry : jsonObj.entrySet()) {
if (entry.getKey().equals(theKey)) {
theValues = entry.getValue().toString();
isExitKey = true;
// return true;
} else {
if ("JSONArray".equals(entry.getValue().getClass()
.getSimpleName())) {
JSONArray jsonArray = JSON.parseArray(String.valueOf(entry
.getValue()));
for (int i = 0; i < jsonArray.size(); i++) {
getValue(String.valueOf(jsonArray.get(i)), theKey);
}
} else if ("JSONObject".equals(entry.getValue().getClass()
.getSimpleName())) {
getValue(entry.getValue().toString(), theKey);

} else {
continue;
}
}
}
return isExitKey;
}


编写此处代码,踩了个坑-递归的结束。代码中已经被我填平。

2、json响应结果中是否存在某个key-value键值对

说明:

1.入参abc,json对象的字符串形式;入参theKey和expectValue,匹配这对key-value是否存在

2.返回,找到值为theKey的key-value键值对,返回true;反则异之

public boolean checkIsExitTheValue(String abc, String theKey,
String expectValue) {
JSONObject jsonObj = JSON.parseObject(abc);
for (Map.Entry<String, Object> entry : jsonObj.entrySet()) {
if (entry.getKey().equals(theKey)) {
if (expectValue.equals(entry.getValue().toString())) {
isExitTheValue = true;
}
} else {
if ("JSONArray".equals(entry.getValue().getClass()
.getSimpleName())) {
JSONArray jsonArray = JSON.parseArray(String.valueOf(entry
.getValue()));
for (int i = 0; i < jsonArray.size(); i++) {
checkIsExitTheValue(String.valueOf(jsonArray.get(i)),
theKey, expectValue);
}
} else if ("JSONObject".equals(entry.getValue().getClass()
.getSimpleName())) {
checkIsExitTheValue(entry.getValue().toString(), theKey,
expectValue);
} else {
continue;
}
}
}
return isExitTheValue;
}


踩的坑

在写递归方法的代码段时,我以为用return可以结束嵌套的多层递归。(我天真了)。

下面代码中注释掉的return语句,替换成了赋值语句,才解决问题(出于代码效率考虑的话,等于true后,还是会跳出待外层,继续执行方法。)

if (entry.getKey().equals(theKey)) {
theValues = entry.getValue().toString();
isExitKey = true;
// return true;
}


补充:网上搜了一些,通常使用抛出异常的方法,来结束递归。

源代码

上面方法的源代码

可以打成jar包,放入jmeter,可以直接使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java jmeter json