Postman的test本質上是JavaScript代碼,通過我們編寫測試代碼,每一個tests返回True,或是False。
每一個tests實際上就是一個測試用例
官方文檔給出了很多驗證方式,我們通過實例來進行學習
接口返回結果為json,示例如下
{
"status": 301,
"message": "購買商品庫存不足",
"lists": [11]
}
1.檢查response的body中是否包含字符串
tests["測試點"] = responseBody.has("需要查找的字符串");
例:
tests["status code"] = responseBody.has("301");
tests["status是否存在"] = responseBody.has("status");
tests["lists是否存在"] = responseBody.has("lists");
tests["lists值為11"] = responseBody.has("11");
注:當json中value為integer時,需要查找的值可以不帶雙引號,
tests["xxx"]xxx代表的是你測試點的名字,可以是中文
tests["xxx"]xxx在一個腳本中如果出現多次,那么只執行第一個,所以盡量不要重復
當value等於中文字符串時,這個方法貌似就不怎么好用了,但是我們有別的方法去驗證,往下看,如果有讀者知道怎么解決這個問題,也可以聯系我,教教我
2.檢查Response Body是否等於字符串
tests["測試點"] = responseBody === "Response Body返回的內容";
這個可以用在接口返回內容為純字符串時,直接檢查整個返回結果的正確性,
例: 接口返回:哈哈
tests["返回為哈哈"] = responseBody === "哈哈";
tests["返回為哈哈"] = responseBody === "哈";
第二個會返回False,必須完全匹配
3.檢查響應時間
tests["Response time 小於200毫秒"] = responseTime > 200; tests["Response time 大於200毫秒"] = responseTime < 200;
4.檢查HTTP請求的狀態碼
tests["Status code is 200"] = responseCode.code === 200;
注: 這里的狀態碼,跟上面我們用的json里邊的"status"不是一回事
5.檢查HTTP請求返回的狀態碼是否包含相應的字符串
tests["Status code name has string"] = responseCode.name.has("Created");
tests["502"] = responseCode.name.has("Server");
tests["502"] = responseCode.name.has("Unreachable Server");
如下對應表,如果使用fiddler模擬相應的返回狀態,注意fiddler返回的大小寫有問題,用下表
▪ 100 Continue
▪ 200 OK
▪ 300 Multiple Choices
▪ 301 Moved Permanently
▪ 302 Move temporarily
......
▪ 500 Internal Server Error
▪ 501 Not Implemented
▪ 502 Bad Gateway
▪ 503 Service Unavailable
▪ 600 Unparseable Response Headers(省略了一些)
6.設置環境變量/全局變量
postman.setEnvironmentVariable("key", "value");
postman.setGlobalVariable("key", "value"); #postman可以用pm代替
7.把XML的body轉換成JSON對象:
var jsonObject = xml2Json(responseBody);
8.檢查json的值
var jsonData = JSON.parse(responseBody);tests["Your test name"] = jsonData.value === 100;
依然拿上面的json數據做測試
tests["狀態碼為301"] = jsonData["status"] == "301";
tests["message"] = jsonData["message"] == "購買商品庫存不足";
tests["list"] = jsonData["lists"][0] == "11";
9.檢查有信息
tests["Content-Type is present"] = postman.getResponseHeader("content-Type");//不區分大小寫
tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type");//區分大小寫
10.POST request狀態碼
tests["Successful POST request"] = responseCode.code === 201 || responseCode.code === 202;
201 - Created 服務器已經創建了文檔,Location頭給出了它的URL。
202 - Accepted 已經接受請求,但處理尚未完成。
官方文檔中還給出了對於json的驗證例子,這種基於JSON格式定義JSON數據結構的規范,我們叫他JSON
Schema官方例子
var schema = { "items": { "type": "boolean" }};var data1 = [true, false];var data2 = [true, 123];console.log(tv4.error);tests["Valid Data1"] = tv4.validate(data1, schema);tests["Valid Data2"] = tv4.validate(data2, schema);
data1和data2是測試數據,schema相當於驗證json的規范,示例是驗證data1和data2中的value是否都是boolean類型
下面先了解下書寫json規范文檔常用的關鍵字
關鍵字 | 描述 |
$schema | $schema 關鍵字狀態,表示這個模式與 v4 規范草案書寫一致。 |
title | 用它給我們的模式提供了標題。 |
description | 關於模式的描述。 |
type | type 關鍵字在我們的 JSON 數據上定義了第一個約束:必須是一個 JSON 對象。 |
properties | 定義各種鍵和他們的值類型,以及用於 JSON 文件中的最小值和最大值。 |
required | 存放必要屬性列表。 |
minimum | 給值設置的約束條件,表示可以接受的最小值。 |
exclusiveMinimum | 如果存在 "exclusiveMinimum" 並且具有布爾值 true,如果它嚴格意義上大於 "minimum" 的值則實例有效。 |
maximum | 給值設置的約束條件,表示可以接受的最大值。 |
exclusiveMaximum | 如果存在 "exclusiveMinimum" 並且具有布爾值 true,如果它嚴格意義上小於 "maximum" 的值則實例有效。 |
multipleOf | 如果通過這個關鍵字的值分割實例的結果是一個數字則表示緊靠 "multipleOf" 的數字實例是有效的。 |
maxLength | 字符串實例字符的最大長度數值。 |
minLength | 字符串實例字符的最小長度數值。 |
pattern | 如果正則表達式匹配實例成功則字符串實例被認為是有效的。 |
用下面的json做例子
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "",
"properties": {
"lists": {
"id": "",
"items": {
"default": 11,
"description": "檢查list值",
"id": "",
"title": "",
"type": "integer"
},
"type": "array"
},
"message": {
"default": "購買商品庫存不足",
"description": "message信息",
"id": "",
"title": "",
"type": "string"
},
"status": {
"default": 301,
"description": "返回狀態值",
"id": "",
"title": "",
"type": "integer"
}
},
"type": "object"
}
下面是測試代碼
var jsonData = JSON.parse(responseBody); var schema = { "properties": { "lists": { "items": { "default": 11, "description": "庫存不足的商品id", "type": "integer" }, "type": "array" }, "message": { "default": "購買商品庫存不足", "description": "id為11的商品庫存不足", "type": "string" }, "status": { "description": "status", "type": "integer" } }, "type": "object" };
示例如下:
tests["json格式驗證"] = tv4.validate(jsonData, schema); //驗證json格式
tests["返回狀態碼是200"] = responseCode.code === 200;
tests["狀態碼為301"] = jsonData["status"] == "301";
tests["message"] = jsonData["message"] == "購買商品庫存不足";
tests["list"] = jsonData["lists"][0] == "11";
另外Postman還提供了一些方法,如:
responseCookies
request.data["key"]=="value"
request.headers["key"]=="value"
request.method
request.url
request
responseHeaders
responseBody
responseTime
responseCode 包含code,name,detail
iteration
上述的方法可以幫助我們做更多的事情,比如通過一個接口拿到cookie值,然后把cookie設置成全局變量,提供給其他接口使用
當我們寫測試腳本時,可能會遇到腳本書寫錯誤或是需要一些log來輔助我們完善腳本,
我們可以打開 View->Show Postman Console,打開后我們可以通過console.log(xxx)來輸出日志和查看錯誤信息