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

故事背景

上篇讲了大体两件事情:
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,可以直接使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值