Postman 常用測試結果驗證的方法


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)來輸出日志和查看錯誤信息


免責聲明!

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



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