一、 Postman腳本
1、什么是postman腳本
Postman包含一個基於Node.js的強大的運行時,它允許請求和集合添加動態行為;可允許編寫測試套件,構建可以包含動態參數的請求,在請求之間傳遞數據等等;
可在流程中的兩個事件中添加要執行的JavaScript代碼;
postman中單個請求的請求執行流程:Pre-request Script--》request--》response--》Tests;
①、在將請求發送到服務器之前,作為Pre-request Script選項卡下的預請求腳本;
②、收到響應后,作為“Tests”選項卡下的測試腳本;
③、Postman Sandbox是一個JavaScript執行環境,您可以在為請求(在PostMan和紐曼州)撰寫預請求和測試腳本時可用;這些部分中寫入的代碼都是在這個沙盒中執行的;
④、調試腳本可以在“ Pre-request scripts” 選項卡或“Tests” 選項卡下編寫,並在Postman Console中記錄有用的消息;
2、預請求腳本(Pre-request Script)
預請求腳本是與發送請求之前執行的收集請求相關聯的代碼片段;
在請求頭中包含時間戳或在URL參數中發送隨機字母數字字符串的用例非常適用;
(1)、例如,要在請求標頭中包含時間戳,可以使用從函數返回的值來設置環境變量,postman.setEnvironmentvariable('timestampHeader',new Date());
(2)、通過鍵入來訪問頭數據編輯器中的timestampHeader變量;
當請求發送時,預請求腳本將被執行,並且timestampHeader的值將被發送代替,{{timestampHeader}};
注意:要設置環境變量,環境必須處於活動狀態。
預請求腳本使用JavaScript編寫,語法與Tests script完全相同,但響應對象不存在。
3、測試腳本(Tests)
使用Postman,您可以使用JavaScript語言為每個請求編寫和運行測試;
(1)、寫postman測試
Postman測試本質上是為特殊測試對象設置值的JavaScript代碼;測試腳本在發送請求后執行,允許訪問響應對象;可以為對象中的元素設置描述性鍵,然后說明是否為true;
例如,tests[“Body contains user_id”] = responseBody.has(“user_id”); 將檢查響應正文是否包含user_id字符串;
(2)、Sandbox
PostMan測試在沙盒環境中運行,這與應用程序的執行環境是分開的;
(3)、代碼段
Postman在編輯器旁邊列出常用的代碼段,可以選擇要添加的代碼段,並將相應的代碼添加到測試編輯器中;
(4)、查看結果
PostMan每次運行請求時都會運行測試;結果顯示在響應查看器下的“Tests”選項卡中。該選項卡標題顯示了傳遞了多少測試,並在此列出了在測試變量中設置的鍵。如果值為true,則測試通過;
3、測試腳本示例
設置環境變量 | postman.setEnvironmentVariable("key", "value"); |
將嵌套對象設置為環境變量 | var array = [1, 2, 3, 4]; |
獲取環境變量 | postman.getEnvironmentVariable("key"); |
獲取一個環境變量(其值是一個字符串對象) | var array = JSON.parse(postman.getEnvironmentVariable("array"));
|
清除環境變量 | postman.clearEnvironmentVariable("key"); |
設置一個全局變量 | postman.setGlobalVariable("key", "value"); |
獲取全局變量 | postman.clearGlobalVariable("key"); |
清除全局變量 | postman.clearGlobalVariable("key"); |
檢查響應體是否包含一個字符串 | tests["Body matches string"] = responseBody.has("string_you_want_to_search"); |
將XML體轉換為JSON對象 | var jsonObject = xml2Json(responseBody); |
檢查響應體是否等於一個字符串 | tests["Body is correct"] = responseBody === "response_body_string"; |
檢查JSON值 | var data = JSON.parse(responseBody); |
內容類型存在(不區分大小寫的檢查) | tests["Content-Type is present"] = postman.getResponseHeader("Content-Type"); |
內容類型存在(區分大小寫) | tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type"); |
響應時間小於200ms | tests["Response time is less than 200ms"] = responseTime < 200; |
響應時間在一個特定的范圍內(包括下限,上限排除) | tests["Response time is acceptable"] = _.inRange(responseTime, 100, 1001); |
狀態碼是200 | tests["Status code is 200"] = responseCode.code === 200; |
代碼名稱包含一個字符串 | tests["Status code name has string"] = responseCode.name.has("Created"); |
POST請求狀態代碼成功 | tests["Successful POST request"] = responseCode.code === 201 || responseCode.code === 202; |
將TinyValidator用於JSON數據 | var schema = {"items": { "type": "boolean" }}; |
解碼base64編碼數據 | var intermediate,base64Content,rawContent; |
4、分支和循環
運行集合時,可以使用該postman.setNextRequest("request_name"),功能在Postman中分支和循環使用API請求,為setNextRequest提供當前運行的名稱會導致Postman連續運行當前請求;
(1)、設置接下來的請求:postman.setNextRequest("request_name");
(2)、循環當前的請求:為setNextRequest提供當前運行的名稱會導致Postman連續運行當前請求;
(3)、結束工作流執行:postman.setNextRequest(null);
注意:在連續循環一個請求時,應該在某些邏輯中封裝setNextRequest,以確保請求不會無限期地運行,否則需要強制關閉收集運行器;
一些關鍵點postman.setNextRequest():
指定后續請求的名稱或ID,集合運行者將處理其余請求;
它可以在預請求或測試腳本中使用。在多於一個作業的情況下,考慮最后一個設定值;
如果postman.setNextRequest()在請求中不存在,則收集運行器默認為線性執行並移動到下一個請求;
5、Postman沙盒
postmanSandbox是一個JavaScript執行環境,可以在編寫預請求腳本和測試腳本(在Postman和Newman中)時可用;沙箱中執行預請求/測試腳本部分中寫入的代碼;
Lodash:JS實用程序庫;
cheerio:一個快速,精簡的核心jQuery API實現(版本4.6.0及更高版本);
BackboneJS 已棄用:提供簡單的模型,視圖和集合。這將在以后版本的沙箱中刪除;
SugarJS 已棄用:使用有用的方法擴展本機JS對象。這將在以后版本的沙箱中刪除;
tv4 JSON模式驗證器:根據json-schema草案的v4驗證JSON對象;
CryptoJS:標准和安全的加密算法。支持的算法:AES,DES,EvpKDF,HMAC-MD5,HMAC-SHA1 / 3/256/512,MD5,PBKDF2,Rabbit,SHA1 / 3/224/256/512,TripleDES;
xml2Json(xmlString):這個功能在Newman和Postman中是一樣的;
xmlToJson(xmlString) 已棄用:此功能在Newman和Postman中的行為不相同;
postman.getResponseHeader(headerName) Test-only:返回名稱為“headerName”的響應頭(如果存在)。如果沒有這樣的頭存在,則返回null。 注意:根據W3C規范,頭名不區分大小寫。這個方法是照顧這個。 postman.getResponseHeader("Content-type") 並 postman.getResponseHeader("content-Type") 返回相同的值。
注意:自4.6.0版本以來,jQuery支持已經停用;
6、環境和全局變量
postman.setEnvironmentVariable(variableName, variableValue) | 設置一個環境變量“variableName”,並為其分配字符串“variableValue”; |
postman.getEnvironmentVariable(variableName) | 返回環境變量“variableName”的值,用於預先請求和測試腳本。您必須為此方法選擇一個環境才能工作; |
postman.setGlobalVariable(variableName, variableValue) | 設置一個全局變量“variableName”,並為其分配字符串“variableValue”; |
postman.getGlobalVariable(variableName) | 返回全局變量“variableName”的值,用於預請求和測試腳本 |
postman.clearEnvironmentVariable(variableName) | 清除名為“variableName”的環境變量。您必須為此方法選擇一個環境才能工作 |
postman.clearGlobalVariable(variableName) | 清除名為“variableName”的全局變量。 |
postman.clearEnvironmentVariables() | 清除所有環境變量。您必須為此方法選擇一個環境才能工作。 |
postman.clearGlobalVariables() | 清除所有全局變量 |
environment | 當前環境中的變量字典。使用 environment["foo"] 訪問“foo”的環境變量的值; |
globals | 全局變量字典 使用 globals["bar"] 訪問“欄中的”全局變量的值; |
7、環境和全局變量
PostMan還有一些動態變量,可以在請求中使用;
請注意,動態變量不能在沙盒中使用。只能以請求URL / headers / body 中的格式使用,格式:{{..}};
8、Cookies
9、請求/響應相關屬性
(1)、request {object}:Postman在寫腳本時使請求對象可以使用。該對象是只讀的。更改此對象的屬性將不起作用。注意:變量不會在請求對象中解析。請求對象由以下內容組成:
①、data {object} - 這是請求的表單數據字典。(request.data[“key”]==”value”)
②、headers {object} - 這是請求的標題字典(request.headers[“key”]==”value”)
③、method {string} - GET / POST / PUT等
④、url {string} - 請求的url。
(2)、responseHeaders {object} 已棄用, 僅測試:這是響應頭的映射。這是區分大小寫的,不應該使用。檢查postman.getResponseHeader() 上面列出的 方法。
(3)、responseBody {string} 僅測試:包含原始響應正文文本的字符串。您可以將其用作JSON.parse或xml2Json的輸入。
(4)、responseTime {number} 僅測試:響應時間(以毫秒為單位)
(5)、responseCode {object} 測試:包含三個屬性:
①、code {number}:響應代碼(200為OK,404為Not Found等)
②、name {string}:狀態碼文本
③、detail {string}:響應代碼的說明
(6)、tests {object} 僅測試:此對象用於填充。PostMan將將此對象的每個屬性作為布爾測試。
(7)、iteration {number}:僅在Collection Runner和Newman中可用。表示當前測試運行索引。從0開始。
僅測試:此對象僅在測試腳本部分可用,在預先請求的腳本中使用它會拋出錯誤。
10、數據文件
如果在Collection Runner或Newman中使用數據文件,則可以訪問data對象,該對象是當前測試運行中數據值的字典;