postman 預處理腳本、斷言
postman 爲每一個 HTTP 請求提供了 pre-request script 用於存放在該請求進行之前執行的腳本,tests 用於存放在該請求獲取響應之後執行的腳本,一般用於根據響應信息進行斷言測試;
這裏需要注意的是,postman 分爲 native app、 chrome app 兩個版本,native app 中的部分對象 chrome app 中是不可使用的,chrome app 中所有的對象語法,native app 中都兼容,特別是 native app 的 pre-request script 、tests 中的 snappets 中的自動生成示例代碼,這些代碼基本在 chrome app 中是無法運行的;
全局、環境變量設置
獲取變量
//通用語法
postman.getGlobalVariable("key"); //獲取全局變量
postman.getEnvironmentVariable("key"); //獲取環境變量
//postman native app 特有語法
pm.globals.get("key"); //獲取全局變量
pm.environment.get("key"); //獲取環境變量
設置變量
//通用語法
postman.setGlobalVariable("key","value"); //設置全局變量
postman.setEnvironmentVariable("key","value"); //設置環境變量
//postman native app 特有語法
pm.globals.get("key","value"); //設置全局變量
pm.environment.get("key","value"); //設置環境變量
清除變量
//通用語法
postman.clearGlobalVariable("key"); //清除全局變量
postman.clearEnvironmentVariable("key"); //清除環境變量
//postman native app 特有語法
pm.globals.unset("key"); //清除全局變量
pm.environment.unset("key"); //清除環境變量
將數組,嵌套對象儲存到全局變量、環境變量中
有時候,我們要將數組,嵌套對象,json 對象儲存到環境變量,全局變量,可以使用 postman 提供的 JSON 工具類,將其儲存爲 json 格式的字符串,如下:
//將數組儲存到環境變量中
var array = [1, 2, 3, 4];
postman.setEnvironmentVariable("array", JSON.stringify(array));
//將嵌套對象儲存到環境變量中
var obj = { a: [1, 2, 3, 4], b: { c: 'val' } };
postman.setEnvironmentVariable("obj", JSON.stringify(obj));
//從環境變量中獲取數組對象
var array = JSON.parse(postman.getEnvironmentVariable("array"));
//從環境變量中獲取嵌套對象/json對象
var obj = JSON.parse(postman.getEnvironmentVariable("obj"));
斷言語法
postman 爲請求提供了斷言腳本,編寫在請求的 tests 中,在運行該HTTP請求獲取響應後,會自動執行 tests 腳本的內容,其中的斷言結果會顯示在 Test Results 面板中;
postman 提供的斷言語法十分簡單,爲 tests["斷言名稱"] = 判斷表達式,如下:
//判斷響應正文是否式一個字符串
tests["Body is correct"] = responseBody === "response_body_string";
//判斷響應時間是否小於200ms
tests["Response time is less than 200ms"] = responseTime < 200;
同時 postman 還對響應的各個常用部分封裝爲對象,可以直接調用;
responseCode | 響應狀態 |
responseHeaders | 響應頭 |
responseBody | 響應正文 |
responseTime | 發出請求到接收響應的時間(單位:ms) |
一些常用示例如下:
響應狀態校驗
//驗證響應碼爲 200
tests["Status code is 200"] = responseCode.code === 200;
//校驗響應狀態代碼包含某個值
tests["Status code name has string"] = responseCode.name.has("OK");
響應頭校驗
//獲取響應頭的屬性,以 “Pragma” 屬性爲例:
var pragmaVal = postman.getResponseHeader("Pragma");
var paramVal =responseHeaders.Pragma;
//驗證響應頭是否存在某個屬性
tests["Content-Type is present"] = postman.getResponseHeader("Content-Type"); //不區分大小寫
tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type"); //區分大小寫
//驗證響應頭 Pragma 屬性是否爲 “no-cache”
tests["Pragma is no-cache"] = postman.getResponseHeader("Pragma") === "no-cache"
tests["Pragma is no-cache"] = responseHeaders.Pragma === "no-cache"
響應正文校驗
//將 json 格式的響應正文轉化爲 json 對象,並檢查 json 值;
var data = JSON.parse(responseBody);
tests["Your test name"] = data.value === 100;
//將 xml 格式的響應正文轉化爲 json 對象,並檢查 json 值;
var jsonObject = xml2Json(responseBody);
tests["Your test name"] = data.value === 100;
//檢查響應正文中是否包含某個字符串
tests["Body matches string"] = responseBody.has("string_you_want_to_search");
響應時間校驗
//校驗響應時間小於200ms
tests["Response time is less than 200ms"] = responseTime < 200;
//校驗響應時間在一個特定的範圍內(包括下限和上限)
tests["Response time is acceptable"] = _.inRange(responseTime, 100, 1001);
tests["Response time is acceptable"] = responseTime >= 100 && responseTime <= 1001; //或者直接這樣
更多詳見官方文檔:https://www.getpostman.com/docs/v6/postman/scripts/test_examples