1. 程式人生 > >轉載postman tests例項記錄,常用測試結果驗證及使用技巧

轉載postman tests例項記錄,常用測試結果驗證及使用技巧

postman tests例項記錄,常用測試結果驗證及使用技巧

2018年07月30日 14:50:23 nikita1995 閱讀數:1003 標籤: postman 更多

個人分類: 軟體測試

Postman的test本質上是JavaScript程式碼,通過我們編寫測試程式碼,每一個tests返回True,或是False。 
每一個tests實際上就是一個測試用例

官方文件給出了很多驗證方式,我們通過例項來進行學習

介面返回結果為json

{
  "status": 301,
  "message": "購買商品庫存不足",
  "lists": [11]
}
  • 1
  • 2
  • 3
  • 4
  • 5

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");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注:當json中value為integer時,需要查詢的值可以不帶雙引號, 
tests[“xxx”]xxx代表的是你測試點的名字,可以是中文 
tests[“xxx”]xxx在一個指令碼中如果出現多次,那麼只執行第一個,所以儘量不要重複 
當value等於中文字串時,無法驗證

2.檢查Response Body是否等於字串 
tests[“測試點”] = responseBody === “Response Body返回的內容”; 
這個可以用在介面返回內容為純字串時,直接檢查整個返回結果的正確性, 
例子:

介面返回:哈哈
tests["返回為哈哈"] = responseBody === "哈哈";
tests["返回為哈哈"] = responseBody === "哈";
第二個會返回False,必須完全匹配
  • 1
  • 2
  • 3
  • 4

3.檢查相應時間

tests["Response time 小於200毫秒"] = responseTime > 200;
tests["Response time 大於200毫秒"] = responseTime < 200;
  • 1
  • 2

4.檢查狀態碼 
這個也好理解,就是http請求狀態碼

tests["Status code is 200"] = responseCode.code === 200;
  • 1

注: 
這裡的狀態碼,跟上面我們用的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");
  • 1
  • 2
  • 3

檢查HTTP code 對應的string,如下面給出的list 
如下對應表,如果使用fiddler模擬相應的返回,注意fiddler返回的大小寫有問題,用下表的string 
1 訊息(1字頭) 
▪ 100 Continue 
2 成功(2字頭) 
▪ 200 OK 
3 重定向(3字頭) 
▪ 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");
  • 1
  • 2

7.把XML的body轉換成JSON物件

var jsonObject = xml2Json(responseBody);
  • 1

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";
  • 1
  • 2
  • 3
  • 4
  • 5

9.檢查有資訊

tests["Content-Type is present"] = postman.getResponseHeader("content-Type");//不區分大小寫
tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type");//區分大小寫
  • 1
  • 2

10.POST request狀態碼

tests["Successful POST request"] = responseCode.code === 201 || responseCode.code === 202;
  • 1

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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 如果正則表示式匹配例項成功則字串例項被認為是有效的。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

還拿第一個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"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

一個完整的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";
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

這樣介面返回的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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

這些方法可以幫助我們做更多的事情,比如通過一個介面拿到cookie值,然後把cookie設定成全域性變數,提供給其他介面使用

當我們寫測試指令碼時,可能會遇到指令碼書寫錯誤或是需要一些log來輔助我們完善指令碼, 
我們可以開啟 View->Show Postman Console,開啟後我們可以通過console.log(xxx)來輸出日誌和檢視錯誤資訊

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