Postman Script 腳本語法總結

Postman的強大之處在於其容許在對某一個request訪問的以前和以後分別運行自定義的一段Javascript腳本,這樣直接就完成了一個 chain request的效果,能夠將數條request連結成一個流程完成一體化測試。這在不少的API操做中都是極其有用的,因此這裏有必要總結一些經常使用語句。

參考Postman官方:Intro to scriptsjavascript

Script workflow 腳本執行流程

image

  • pre-request腳本,是在對API進行請求以前的腳本,通常用於動態生成參數、JSON數據包、連接地址等。
  • test腳本,其實更應該叫post-request,實在完成API訪問並獲得其response迴應以後運行的腳本,通常用於獲取response的內容,用於以後對於別的資源的請求,如獲取頁面標題和內容等。

Requirements 運行腳本要求

須要注意,pre-request腳本,在裏面直接寫代碼就能夠了,可是test腳本須要在某個指定的函數pm.test(...)中執行纔會被識別,且做爲test腳本運行。以下圖:
image
pm.test()中第一個參數是測試描述(會在測試結果欄顯示,應和其它測試描述作以區分),第二個參數是一個函數,具體執行代碼都在這個函數中運行。
另外,pm對象是Postman的主要對象,全部的內置函數,數據調用等,都須要經過它來實現。html

Code Snippets 經常使用語句

通常會在腳本編寫欄的右邊都會有經常使用語句片斷,點擊如下就會出來代碼,可是一開始不太瞭解的話點出來其實也看不懂。以下圖:
imagejava

官方文檔解釋的各類函數調用連接在這裏:Postman Sandboxchrome

如下是我本身總結的經常使用代碼片斷:json

// 獲取response返回內容
var rsb = responseBody; // 是字符串格式

// 獲取環境變量
var v = pm.environment.get("變量名稱");

// 設置環境變量 只能存儲字符串,若是是對象的話則沒法在下次運行時獲取到內容
// 如須要存儲JSON數據,能夠用JSON.stringify(..)存儲,再用JSON.parse(..)轉化爲對象使用
pm.environment.set("變量名稱", 變量內容);

// 清除某個環境變量
pm.environment.unset("環境變量名");

// 獲取全局變量和普通變量
var gb = pm.globals.get("全局變量名");
var nm = pm.variables.get("普通變量名");

// Javascript 獲取變量類型
console.log( typeof pm.enviroment );

Pre-request Script 預處理腳本

Pre-request script是在request以前準備request信息用的腳本。api

參考Postman官方:Pre-request scripts瀏覽器

經常使用的準備工做有:app

  • 讀取環境變量,再放到request body或headers中。
  • 拼接組合提交request請求所須要的參數,好比authentication code。

經常使用的語句以下:less

// 獲取環境變量
var v = pm.environment.get("變量名稱");

// 設置環境變量 只能存儲字符串,若是是對象的話則沒法在下次運行時獲取到內容
// 如須要存儲JSON數據,能夠用JSON.stringify(..)存儲,再用JSON.parse(..)轉化爲對象使用
pm.environment.set("變量名稱", 變量內容);

Test Script 測試腳本

測試腳本是在request以後,對Response的返回值進行下一步處理的腳本。函數

參考Postman官方:Test scripts
參考Postman官方:Test examples

經常使用的處理有:

  • 讀取response回覆的數據,存爲環境變量
  • 根據response回覆的狀態成功與否,判斷下一步作什麼

經常使用的語句以下:

// 獲取response headers中某一個值
ctype = postman.getResponseHeader("Content-Type");

// 獲取response body的所有內容
text = pm.response.text();

// 獲取response返回的所有JSON
json_data = pm.response.json();

// 獲取json中某一個值,好比name的值:
myName = json_data.name;

Test Result 測試結果

除了上面的具體功能代碼外,常常還須要返回一個結果,告訴Postman這個測試結果是Pass仍是Fail,默認是pass。

這裏返回值就不是簡單的return語句能夠,必需要經過Postman自帶的對象或方法才能夠,通常是經過pm.expect()tests[]這兩個地方返回測試結果。

完整的測試示範:

// 測試response的狀態是不是200成功:
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

這些方法名看起來都很容易理解,通常都會叫pm.expect().to.be().to.have()這樣的,字面意思就是期待什麼或要求它必須是什麼或必須有什麼,才能經過測試。
另外,一樣的測試結果,實際上還有更簡單的寫法,即不經過pm對象,而是內置tests對象。

經常使用操做以下:

# 反應時間必須少於200毫秒
tests["Response time is less than 200ms"] = responseTime < 200;

# 判斷反應代號是否等於某一個指定的代號
tests["Status code name has string"] = responseCode.name.has("Created");

看這個用法,猜想tests是一個JSON格式的對象,tests[...]括號內的字符串是測試的描述, =後面是判斷語句,而後將True或False賦予爲tests[..]的值,而後postman輪訓全部tests對象裏的參數,並返回pass與否的結果。

這裏是官方總結的經常使用測試腳本方法:Test examples

如下是我總結的經常使用的返回測試結果的內置函數:

# 「期待」返回結果必須包含某一段內容
pm.expect(從response裏獲取的字符串).to.include("必須包含的內容");

# 返回body值必須徹底等於某一段內容
pm.response.to.have.body("必須等於的內容");

# 反應時間必須少於200毫秒
pm.expect(pm.response.responseTime).to.be.below(200);

# 必須返回某一個狀態 如"Created"
pm.response.to.have.status("狀態名");

image

Debugging 腳本調試

若是要看已經設置的Enviroment變量的話,能夠點開右上方小眼睛看到,以下圖,我設置了3個環境變量:
image

調試時要打印的話,通常都是用console.log(...),這樣就能在console中看到:

  • 若是你的Postman是Chrome app的話,直接在chrome瀏覽器的開發者工具裏調試就行。
  • 若是是Mac等桌面軟件,則須要打開內置的console才能看到調試信息。

位置在左下角,以下圖:
image

Postman Sandbox

Postman的Sandbox是Postman內部默認引入的第三方JS庫。

參考:Postman Sandbox 官方腳本可引用庫說明
參考:Postman Sandbox API 官方引用的腳本庫詳解

Sandbox引用的第三方庫有:

image

生成MD5字符串:

var hashed = CryptoJS.MD5("待加密的字符串");

文件轉base64字符串:

s = 'Hello';
// 先轉化成UTF-8編碼的字符串
utf8 = CryptoJS.enc.Utf8.parse( s );
// 用CryptoJS第三方庫(Postman已經內置了)進行編碼
b64 = CryptoJS.enc.Base64.stringify(utf8)

console.log(b64);
// aGVsbG8=

Postman SDK

不一樣於Sandbox,這是Postman內部較高級的SDK,能夠引用一些方便的方法。

參考官方網址:Tutorial: Postman SDK Concepts

URL轉換成JSON格式,並獲取指定的參數值:

var sdk = require('postman-collection');
query = ( new sdk.Url(callback) ).toJSON().query;

for (var i in query) {
    console.log(query[i].key +": "+ query[i].value);
}
相關文章
相關標籤/搜索