Jmeter對返回體中Json格式的reponse的處理


研究這個的目的是:如果返回信息是比較復雜的,需要對返回信息中數據以及數據的層級做斷言

我找了一些我們的接口,層級關系都太簡單了,最復雜的就是這兩個了:【而且都是get接口,原來get接口還要增加測試點啊~^_^】

或者獲取json數據的值,又如何看出層級關系呢?

說說思路吧:

1. 我以前沒有考慮過這個問題,咋一問我也想不起來,想着要寫beanshell來處理了吧,內心是抗拒的。但如果必須要校驗,也只能慢慢研究寫了;

2.研究過程中【先百度嘛^_^】,恰巧昨天看到Postman中對json數據處理邏輯,對返回信息中json數據可以如下操作,這是postman提供的功能,心里尋思着beanshell按照此邏輯一步步寫,將每個第一層取出判斷,再到第二層[2].xx,一層層做判斷;

3. 那萬一因為返回信息json內容不一樣,有的返回10個元素,有的不做返回(比如null默認不返回),那豈不是要報錯【看來得和開發確認好】;

4.Json默認返回,即使某個字段為null, 也是返回的,比如 name:null

 

try{

var jsonData = pm.response.json();

} 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和實際的卡號不符合,所有報錯了~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM