Postman接口測試教程【6】_Postman腳本


一、   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.setEnvironmentVariable("array", JSON.stringify(array, null, 2));
var obj = { a: [1, 2, 3, 4], b: { c: 'val' } }; postman.setEnvironmentVariable("obj", JSON.stringify(obj));

獲取環境變量 postman.getEnvironmentVariable("key"); 
獲取一個環境變量(其值是一個字符串對象)

var array = JSON.parse(postman.getEnvironmentVariable("array"));
var obj = JSON.parse(postman.getEnvironmentVariable("obj"));

 

清除環境變量 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["Your test name"] = data.value === 100;

內容類型存在(不區分大小寫的檢查) 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" }};
var data1 = [true, false];
var data2 = [true, 123];
tests["Valid Data1"] = tv4.validate(data1, schema);
tests["Valid Data2"] = tv4.validate(data2, schema);
console.log("Validation failed: ", tv4.error);

解碼base64編碼數據

var intermediate,base64Content,rawContent;
rawContent = base64Content.slice('data:application/octet-stream;base64,'.length);
intermediate = CryptoJS.enc.Base64.parse(base64content);
tests["Contents are valid"] = CryptoJS.enc.Utf8.stringify(intermediate);

 

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”的環境變量的值;
注意:這只能用於讀取變量;
使用 setEnvironmentVariable() 設置值;

globals

全局變量字典 使用 globals["bar"] 訪問“欄中的”全局變量的值;
注意:這只能用於讀取變量;
使用 setGlobalVariable() 設置值;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 





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對象,該對象是當前測試運行中數據值的字典;


免責聲明!

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



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