Postman的強大之處在於其容許在對某一個request訪問的以前和以後分別運行自定義的一段Javascript腳本,這樣直接就完成了一個
chain request
的效果,能夠將數條request連結成一個流程完成一體化測試。這在不少的API操做中都是極其有用的,因此這裏有必要總結一些經常使用語句。
參考Postman官方:Intro to scriptsjavascript
pre-request
腳本,是在對API進行請求以前的腳本,通常用於動態生成參數、JSON數據包、連接地址等。test
腳本,其實更應該叫post-request
,實在完成API訪問並獲得其response迴應以後運行的腳本,通常用於獲取response的內容,用於以後對於別的資源的請求,如獲取頁面標題和內容等。須要注意,pre-request
腳本,在裏面直接寫代碼就能夠了,可是test
腳本須要在某個指定的函數pm.test(...)
中執行纔會被識別,且做爲test
腳本運行。以下圖:pm.test()
中第一個參數是測試描述(會在測試結果欄顯示,應和其它測試描述作以區分),第二個參數是一個函數,具體執行代碼都在這個函數中運行。
另外,pm
對象是Postman的主要對象,全部的內置函數,數據調用等,都須要經過它來實現。html
通常會在腳本編寫欄的右邊都會有經常使用語句片斷,點擊如下就會出來代碼,可是一開始不太瞭解的話點出來其實也看不懂。以下圖:
java
官方文檔解釋的各類函數調用連接在這裏: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
是在request以前準備request信息用的腳本。api
參考Postman官方:Pre-request scripts瀏覽器
經常使用的準備工做有:app
經常使用的語句以下:less
// 獲取環境變量 var v = pm.environment.get("變量名稱"); // 設置環境變量 只能存儲字符串,若是是對象的話則沒法在下次運行時獲取到內容 // 如須要存儲JSON數據,能夠用JSON.stringify(..)存儲,再用JSON.parse(..)轉化爲對象使用 pm.environment.set("變量名稱", 變量內容);
測試腳本是在request以後,對Response的返回值進行下一步處理的腳本。函數
參考Postman官方:Test scripts
參考Postman官方:Test examples
經常使用的處理有:
經常使用的語句以下:
// 獲取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;
除了上面的具體功能代碼外,常常還須要返回一個結果,告訴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("狀態名");
若是要看已經設置的Enviroment變量的話,能夠點開右上方小眼睛看到,以下圖,我設置了3個環境變量:
調試時要打印的話,通常都是用console.log(...)
,這樣就能在console中看到:
位置在左下角,以下圖:
Postman的Sandbox是Postman內部默認引入的第三方JS庫。
參考:Postman Sandbox 官方腳本可引用庫說明
參考:Postman Sandbox API 官方引用的腳本庫詳解
Sandbox引用的第三方庫有:
生成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=
不一樣於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); }