Postman Sandbox:JavaScript沙箱

Postman Sandbox (Postman 沙箱) 是一個 JavaScript 執行環境,在編寫請求前的腳本和請求的測試腳本時(Postman 和 Newman 中都可以使用)。我們在 Pre-request Script 和 Tests 欄目中編寫的代碼都是在此沙箱中執行。

本文介紹屬於 Sandbox 的大致介紹。在瞭解這部分內容之前,你需要那麼一點點 JavaScript 代碼基礎。

那麼在沙箱環境中,你有哪些東西能用,又能做些什麼呢?這對於你更深入的做好接口測試是非常有必要了解的。

你可以:

  • 使用 JavaScript 的常用庫
  • 設置或獲取環境變量和全局變量
  • 操作 Cookies
  • 獲取 request 和 response 的各種屬性,比如headers、body等
  • 使用 Postman 提供的內置對象 pm 中的所有功能

JavaScript 常用庫

你可以點擊名稱進入相關介紹文檔。

  • Lodash: 一個 JavaScript 實用庫,通過降低 array、number、objects、string 等等的使用難度從而讓 JavaScript 變得更簡單
  • cheerio: 是jquery核心功能的一個快速靈活而又簡潔的實現,主要是爲了用在服務器端需要對 DOM 進行操作的地方,用於接口測試中需要處理 HTML 格式的返回時
  • BackboneJS Deprecated: 提供簡單的模型,視圖和集合。Sandbox 的未來版本中將刪除此庫。
  • SugarJS Deprecated: 擴展原生的 js 對象的使用,Sandbox 的未來版本中將刪除此庫。
  • tv4 JSON schema validator Deprecated: 檢驗 Json 結構是否準確的 JavaScript 庫;
  • Ajv: 與 tv4 一樣,都是 Json 結構驗證庫,任選一個即可。
  • CryptoJS: 標準和安全的密碼算法庫, 支持的加密算法: AES, DES, EvpKDF, HMAC-MD5, HMAC-SHA1/3/256/512, MD5, PBKDF2, Rabbit, SHA1/3/224/256/512, TripleDES

環境變量和全局變量處理

以下內容的使用,在變量設置一節中出現過,屬於可以直接點選的快捷代碼。

  • pm.environment.set("variableName", variableValue): 設置一個環境變量,variableName 爲變量名,variableValue 爲變量值。變量名必須爲字符串

  • pm.environment.get("variableName"): 根據變量名提取環境變量的值,變量可以是通過 pm.environment.set 設置,也可以是在環境變量文件或環境管理功能中設置。必須要先選擇一個環境此方法才能起作用。

  • pm.environment.has("variableName"): 判斷某個環境變量名是否存在,存在則返回 true。

  • pm.environment.unset("variableName"): 清除一個指定的環境變量,必須要先選擇一個環境此方法才能起作用。

  • pm.environment.clear(): 清除所有的環境變量,必須要先選擇一個環境此方法才能起作用。

  • pm.environment.toObject(): 獲取當前環境中的所有變量,變量全部放在一個對象中返回。

  • pm.globals.set(variableName, variableValue): 設置一個全局變量,variableName 爲變量名,variableValue 爲變量值。變量名必須爲字符串

  • pm.globals.has("variableName"): 判斷某個全局變量名是否存在,存在則返回 true。

  • pm.globals.get("variableName"):根據變量名提取全局變量的值,變量可以是通過 pm.environment.set 設置,也可以是在全局變量文件或全局變量管理中設置。

  • pm.globals.unset("variableName"): 清除一個指定的全局變量。

  • pm.globals.clear(): 清除所有的全局變量。

  • pm.globals.toObject():獲取所有的全局變量,變量全部放在一個對象中返回。

Cookies

  • responseCookies {array}:獲取當前請求返回的響應中所有 cookie,以數組形式返回。
  • postman.getResponseCookie(cookieName):指定 cookie 名稱獲取 cookie 值。
console.log('cookies:', responseCookies )
// cookies: [{}, {}]
console.log('token:', postman.getResponseCookie('cookie_token').value)
// token: 79455c55e...6502ef1f8a5

請求與響應屬性

以下屬性都只能用於 Tests 腳本,不能用於 Pre-request Script。

  • request {object}: Postman 在編寫 Tests 腳本時可用,只能讀取不能修改。主要用於獲取當次請求的各種屬性。

    請求對象由以下對象組成:

    • data {object} - 返回請求的消息體 body 的數據,可通過屬性取值方式 data.username 或 data[‘password’];
    • headers {object} - 返回請求的頭部 headers 信息;
    • method {string} - GET/POST/PUT 等方法;
    • url {string} - 返回請求的 URL。

request 對象訪問示例:

console.log(request);
///{data: {…}, headers: {…}, id: "c78dee07-399a-4885-bfcc-ca524e6114f6"…}
console.log('username:', request.data['username']);
/// username: showdoc
console.log('method:', request.method);
/// POST
  • responseHeaders {object}:返回所有的頭部信息的對象,區分頭部字段大小寫,不推薦使用。
  • postman.getResponseHeader(headerName) :返回指定的頭部字段數據,頭部字段不區分大小寫。
  • responseBody {string}: 包含原始響應正文文本的字符串。可以通過 JSON.parse 或者 xml2Json 轉換爲 json 格式。
  • responseTime {number}:響應時間(以毫秒爲單位)
  • responseCode {object}:包含以下三個屬性:
    • code {number}: 狀態碼, 200
    • name {string}: 狀態碼名稱,OK
    • detail {string}: 狀態碼描述,Standard response for successful HTTP requests…

響應對象訪問示例:

console.log(postman.getResponseHeader('content-type'));
console.log(JSON.parse(responseBody))
console.log(responseCode.detail)
  • tests {object} :測試對象,其每個屬性都會被視爲是 Boolean 測試值。
tests.testcode = responseCode.name == 'OK'
/// 運行後會在 Test Result 中顯示測試標題爲 testcode,與斷言方式差不多
  • iteration {number}: 僅在 Collection Runner 和 Newman 中可用。表示測試運行的迭代索引。從0開始。如果不清楚測試迭代運行的概念,請參考Collection Runner 運行參數設置
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章