Jmeter对返回体中Json格式的reponse的处理

研究这个的目的是:若是返回信息是比较复杂的,须要对返回信息中数据以及数据的层级作断言javascript

我找了一些咱们的接口,层级关系都太简单了,最复杂的就是这两个了:【并且都是get接口,原来get接口还要增长测试点啊~^_^】java

或者获取json数据的值,又如何看出层级关系呢?shell

说说思路吧:json

1. 我之前没有考虑过这个问题,咋一问我也想不起来,想着要写beanshell来处理了吧,心里是抗拒的。但若是必需要校验,也只能慢慢研究写了;post

2.研究过程当中【先百度嘛^_^】,恰巧昨天看到Postman中对json数据处理逻辑,对返回信息中json数据能够以下操做,这是postman提供的功能,内心寻思着beanshell按照此逻辑一步步写,将每一个第一层取出判断,再到第二层[2].xx,一层层作判断;测试

3. 那万一由于返回信息json内容不同,有的返回10个元素,有的不作返回(好比null默认不返回),那岂不是要报错【看来得和开发确认好】;spa

4.Json默认返回,即便某个字段为null, 也是返回的,好比 name:null插件

 

try{3d

var jsonData = pm.response.json();code

} catch (e) {

   console.log("No body");

}

pm.environment.unset("fileID");

pm.environment.set("fileID", jsonData.id);

 

{
    "resCode":"000",
    "resMsg":"success",
    "customerData":
    {
        "cardnum":"6275980334267422136",
        "name":"小******",
        "idcard":"3206831989********",
        "mobile":"1896****440",
        "address":"江苏省南通市崇川区紫琅路*****Room*****SS",
        "zip":"226000",
        "email":"testotest1@***",
        "preferstore":"856"
    }
}

 

{
    "resCode":"000",
    "resMsg":"success",
    "couponData":
    [
        {
            "coupid":3071,
            "coupname":"全国券1",
            "coupcontent":"<div id='print_form' class='print_form' style='display:none;'><div id='coupcontent' style='font-family:YaHei IKEA;width:300px;word-wrap:break-word;'>全国券1</div></div>",
            "barcode":"1234567890",
            "startdate":"2018-01-03 00:00:00",
            "enddate":"2019-03-10 23:59:59",
            "state":"审批经过",
            "apv_status":null,
            "isDefault":0
        },
        {
            "coupid":3072,
            "coupname":"全国券2",
            "coupcontent":"<div id='print_form' class='print_form' style='display:none;'><div id='coupcontent' style='font-family:YaHei IKEA;width:300px;word-wrap:break-word;'>全国券2</div></div>",
            "barcode":"1234567890",
            "startdate":"2018-01-03 00:00:00",
            "enddate":"2021-01-28 23:59:59",
            "state":"审批经过",
            "apv_status":null,
            "isDefault":0
        },
        {
            "coupid":3073,
            "coupname":"全国券3",
            "coupcontent":"<div id='print_form' class='print_form' style='display:none;'><div id='coupcontent' style='font-family:YaHei IKEA;width:300px;word-wrap:break-word;'>全国券3</div></div>",
            "barcode":"1234567890",
            "startdate":"2018-01-03 00:00:00",
            "enddate":"2022-02-24 23:59:59",
            "state":"审批经过",
            "apv_status":null,
            "isDefault":0
        }
    ]
}

 

Step1:  Jmeter自带了这个json提取器,至少个人Jmeter4.0有,以前的版本应该能够下载插件获取

元件名称:JSON Extractor

假设下面是个人返回json

{"resCode":"000","resMsg":"ok","resCardNum":"6275980334267422623"}

元件配置信息须要以下:

而后用beanshell获取这个变量验证一下:beanshell中用${定义的变量名}

加个Debug Sampler进行验证下,助于理解JSON Extractor的使用

以下是获取的返回json信息中的卡号信息:

 

Step2: 对于复杂的json操做

渐进明朗了,json该怎么操做就怎么操做呗,重点就是标红框的部分,下一级[1].xx获取便可

Step3: 无论是简单的json仍是复杂的json,对于已经提取出来的变量进行断言,这边就用BeanShell Assertion

Step4: 刚刚看到有JSON Assertion, 好像有条新大陆了,^_^,Jmeter真是你永远都在发掘它的潜能~~

须要点击Additionally assert value,而后才能网Excepted Value下输入指望值

我随便输入了字符串bbbb和实际的卡号不符合,全部报错了~

相关文章
相关标签/搜索