postman tests 常用測試結果驗證及使用技巧

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.Code name contains a string

tests["Status code name has string"] = responseCode.name.has("Created");
tests["502"] = responseCode.name.has("Server");
tests["502"] = responseCode.name.has("Unreachable Server");

檢查HTTP code 對應的string,如下面給出的list
如下對應表,如果使用fiddler模擬相應的返回,注意fiddler返回的大小寫有問題,用下表的string
1 消息(1字頭)
▪ 100 Continue
2 成功(2字頭)
▪ 200 OK
▪ 500 Internal Server Error
▪ 501 Not Implemented
▪ 502 Bad Gateway
▪ 503 Service Unavailable

6.設置環境變量/全局變量

postman.setEnvironmentVariable("key", "value");
postman.setGlobalVariable("key", "value");

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 關鍵字狀態,表示這個模式與 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"
}

一個完整的JSON Schema驗證規範
可以根據實際情況刪除一些key,但是紅色標記的要保留
default默認值,根據實際情況書寫,上面例子“商品庫存不足時”的狀態碼爲301,如果要對status和message的值進行驗證,那麼default就可以加上,如果只是驗證返回的value是integer或是string類型,可以忽略
還可以加入最大值最小值等限制

下面是測試代碼

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";

這樣接口返回的json結構和數據我們就可以驗證了。

tv4爲Postman引入的外部庫,想了解的可以去看官方文檔
另外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)來輸出日誌和查看錯誤信息

通過上面這些知識,我們可以解決大多數的問題,如果想更進一步,需一定的js基礎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章