一、斷言
在 postman 中我們是在Tests標簽中編寫斷言,同時右側封裝了常用的斷言,當然 Tests 除了可以作為斷言,還可以當做后置處理器來編寫一些后置處理代碼,經常應用於:
【1】獲取當前接口的響應,傳遞給下一個接口
【2】控制多個接口間的執行順序。
二、常見斷言方法
1、狀態碼斷言
1)判斷接口響應的狀態碼:Status code: code is 200
pm.test("Status code is 200", function () {//
Status code is 200是斷言名稱,可以自行修改
pm.response.to.have.status(200);
//這里填寫的200是預期結果,實際結果是請求返回結果
});
2)判斷接口響應碼是否與預期集合中的某個值一致
pm.test("Successful POST request", function () { pm.expect(pm.response.code).to.be.oneOf([201,202]); //檢查響應碼是否為201或者202 });
3)判斷狀態碼名稱(也就是狀態碼后面的描述)是否包含某個字符串:Status code:code name has string
pm.test("Status code name has string", function () { pm.response.to.have.status("OK"); //斷
言響應狀態消息包含OK
});
2、響應內容斷言
1)
斷言響應體中包含XXX字符串:Response body:Contains string
pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search");//
pm.response.text()
獲取響應文本中包含string
});
2)響應結果如果是json,斷言響應體(json)中某個鍵名對應的值:Response body : JSON value check
pm.test("Your test name", function () { var jsonData = pm.response.json();//
獲取響應體,以json顯示,賦值給jsonData .注意:該響應體必須返會是的json,否則會報錯
pm.expect(jsonData.value).to.eql(100);
//
獲取jsonData中鍵名為value的值,然后和100進行比較
});
3)
斷言響應體等於XXX字符串:Response body : is equal to a string
pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string");//
獲取響應體等於response_body_string
});
3、響應頭斷言
1)斷言響應頭包含:Response headers:Content-Type header check
pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type");
//斷言響應頭存在"Content-Type"
});
4、響應速度斷言
1)判斷實際響應時間是否與低於預期時間:Response time is less than 200ms
pm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); });
實例
針對上面的返回結果,我們設置斷言如下
注意:postman獲取斷言時,任何響應都必須轉為JsonData 對象。例如我們想獲取如下響應信息中鍵值為 name 的值:
{
"reponse": {
"person": {
"name": "hai",
"age": 18
}
}
}
此時我們應該:
//第一步將響應轉為 jsonData 對象 jsonData = pm.response.json(); //第二步通過 . 獲取到我們想要的 age 的值 var age = jsonData.reponse.person.age;
除了單個接口斷言外,postman還集合斷言和模塊斷言,風別通過點擊集合或者模塊,然后點擊Edit,進入Test標簽進行斷言即可,如下圖

三、常用斷言對應的腳本
1.清除一個環境變量
postman.clearEnvironmentVariable("variable_key");
2.斷言響應數據中是否存在某個元素
tests["//斷言返回的數據中是否存在__pid__這個元素"] = responseBody.has("pid");
3.斷言response等於預期內容
tests["Body is correct"] = responseBody === "response_body_string";
4.斷言json解析后的key的值等於預期內容
tests["Args key contains argument passed as url parameter"] = 'test' in responseJSON.args
5.檢查response的header信息是否有被測字段
tests["Content-Type is present"] = postman.getResponseHeader("Content-Type");
校驗響應數據中,返回的數據類型
var jsonData = JSON.parse(responseBody);//第一步先轉化為json字符串。其中變量(jsonData)可以自行定義......
tests["//data.category.name__valuse的值的類型是不是string"] = typeof(jsonData.data.category[0].name) == "string";
7.響應時間判斷
tests["Response time is less than 200ms"] = responseTime < 200;
8.設置環境變量
postman.setEnvironmentVariable("variable_key", "variable_value");
9.斷言狀態碼
tests["Status code is 200"] = responseCode.code != 400;
10.檢查響應碼name
tests["Status code name has string"] = responseCode.name.has("Created");
11.斷言成功的post請求返回碼
tests["Successful POST request"] = responseCode.code === 201 || responseCode.code === 202;