Postman接口返回結果驗證


1.最基本的返回驗證

//1.驗證返回狀態碼是否是200
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});
//2.驗證返回body內是否含有某個值
pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
//3.驗證某個返回值是否是100
pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});
//驗證返回body中是否含有某個字符串
pm.test("Body is correct", function () {
    pm.response.to.have.body("response_body_string");
});
//驗證返回頭類型
pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});
//驗證請求時長是否小於200ms
pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});
//驗證返回碼是否為200
pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([201,202]);
});
//驗證返回數據中是否包含某個字符串
pm.test("Status code name has string", function () {
    pm.response.to.have.status("Created");
});
//驗證json數據的微小驗證器
var jsonObject = xml2Json(responseBody);
var schema = {
  "items": {
    "type": "boolean"
  }
};
var data1 = [true, false];
var data2 = [true, 123];
pm.test('Schema is valid', function() {
  pm.expect(tv4.validate(data1, schema)).to.be.true;
  pm.expect(tv4.validate(data2, schema)).to.be.true;
});

*********************

完整實例001

使用Postman進行接口測試時,如何對接口響應的結果進行校驗呢。判斷接口返回的實際結果是否符合預期結果,需要使用到Postman的斷言功能。一般情況下,斷言一個接口的響應結果會根據響應狀態碼或響應結果中的關鍵字段的值進行判斷。

斷言:檢驗預期值與實際值是否相等或是否匹配
預期值 = 實際值 則測試通過OK
預期值 ≠ 實際值 則測試不通過Fail

Postman針對接口的請求報文和響應報文分別提供了Pre-request Script、Test Script,這兩個是建立在JavaScript語言環境基礎上的
Pre-request Script:預置腳本。可用來修改一些默認參數,在請求發送之前執行。
Test Script:后置測試腳本。當接收到響應之后,再執行測試腳本。

以下針對具體案例說明Postman的斷言功能的使用

響應結果json字符串1
請求URL:http://{{IP}}:{{Port}}/web/restful/claim/pushClaim
請求方式:post
傳遞參數:accidentNo=隨機數
斷言規則
A.響應狀態碼:分別對不同狀態碼進行處理輸出
B.響應內容:返回的accidentNo參數值與定義的一致
C.響應時間:小於0.8s

{
    "accidentNo": "Acc_560295",
    "auditReport": {
        "auditRuleTriggers": []
    },
    "claimUniqueId": "claim_131468",
    "interfaceCode": "ClaimPush",
    "message": "success",
    "resultCode": "000"
}

1、請求發送前,參數設置Pre-request Script

// 隨機事故號
environment.accidentNo = `Acc_${randomInt(100000, 999999)}`;
pm.environment.set("accidentNo", environment.accidentNo);
2、請求響應后,在Test Script中進行判斷操作,思路如下
1)、對預期結果和返回結果進行判斷
2)、判斷相等則設置tests語句為true
3)、判斷不相等則設置tests語句為false,即失敗,並且打印實際接口定義的響應代碼
var state=responseCode.code;//獲取返回狀態
var number=(state.toString()).substr(0,1);//將返回的number類型轉為string類型,並獲取第一位
switch(number){
case '2':
    test();
    break;
case '4':
    clientQue(); //4開頭的狀態,簡單定義為客戶端問題
    break;
case '5':
    serverQue(); //5開頭的狀態,簡單定義為服務器問題
    break;
default:
    tests['測試不通過,狀態='+state]=false;  //如出現其他情況,則打印狀態,並測試不通過
    break;
}
 
function test(){ //狀態為200執行的函數
var accidentNo = pm.environment.get("accidentNo",accidentNo);

var result = JSON.parse(responseBody);
 if(result.accidentNo==accidentNo){
        tests["測試通過(事故號=========="+accidentNo+")"]=true;
    }else{
        tests["測試失敗 (響應代碼="+result.resultCode+")"]=false;
   }
}

//客戶端問題
function clientQue(){
    tests['客戶端問題(請求參數或方式錯誤)---測試失敗---狀態碼為'+state+'   requestURl為'+request.url]=false;
}
 
//服務器或者網關問題
function serverQue(){
    tests['服務器或網關問題---測試失敗---狀態碼為'+state+'   requestURl為'+request.url]=false;
}

//檢驗響應時間是否小於0.8s
pm.test("響應時間 < 800ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(800);
});

 

響應結果json字符串2
請求URL:http://{{IP}}:{{Port}}//web/rest/submitTask
請求方式:post
傳遞參數:accidentNo=隨機數
斷言規則
A.響應狀態碼:是否為200
B.響應內容:是否包含指定字符串
C.響應時間:小於0.8s
{
    "responseBodyVo": {
        "auditRuleTriggers": [
            {
                "actualValue": "",
                "auditScore": 10,
                "itemInfoList": [
                    {
                        "claimItemUniqueId": "Unique0005",
                        "feeAfterDiscount": 100,
                        "itemName": "發動機油",
                        "operationTypeId": "05",
                    }
                ],
                "itemName": "玻璃膠",
                "ruleName": "請核實是否屬於保險責任",
                "ruleNo": "010201002X",
                "ruleType": "03",
            }
  ]
}

1、請求發送前,參數設置Pre-request Script

// 隨機事故號
environment.accidentNo = `Acc_${randomInt(100000, 999999)}`;
pm.environment.set("accidentNo", environment.accidentNo);

2、請求響應后,在Test Script中進行判斷操作,思路如下

//檢驗JSON格式的響應數據中ruleNo是否為"0102010020"
if(tests["code is 200"] = responseCode.code === 200){ 
    pm.test("返回ruleName值 = 請核實是否屬於保險責任", function () {
        var jsonData = pm.response.json();
        if(pm.expect(pm.response.text()).to.include("0102010020")){
             pm.expect(pm.response.text()).to.include("請核實是否屬於保險責任");
        }
       
    });
}else{
     pm.test("測試不通過",function(){});
}


//檢驗響應時間是否小於0.8s
pm.test("響應時間 < 800ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(800);
});

var registNo = pm.environment.get("registNo");
var deflossMainId = pm.environment.get("deflossMainId");
//在Postman Console控制台輸出registNo、deflossMainId值
// console.log(registNo);
// console.log(deflossMainId);

//檢驗響應的狀態碼是否為200
pm.test("報案號"+registNo+"   定損單號"+registNo+"    Status code is 200", function () {
    pm.response.to.have.status(200);
});

//檢驗是否包含規則 "0102010020"
pm.test("包含字符串'0102010020'", function () {
    pm.expect(pm.response.text()).to.include("0102010020");
});

 

鏈接:https://www.jianshu.com/p/f115459077a1


免責聲明!

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



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