身爲一個接口自動化測試工具,具有在運行中的動態行爲不足爲奇,Postman集成了一個強大的,基於NodeJS的Script引擎,利用它能夠爲請求以及響應添加一些動態的行爲:json
1)在發送請求以前,編寫Pre-Request-Script,爲請求參數進行加密處理、參數化等。api
2)接收到請求響應後,編寫Tests-Script,制定響應斷言、處理返回的數據等。app
大體的流程以下圖:ide
現有兩個接口,分別爲獲取Token和獲取用戶信息,獲取Token接口參數須要計算Sign簽名,該接口的返回值將成爲獲取用戶信息接口的參數。
爲了方便的在測試環境以及開發環境中無縫切換,將相關的信息配置爲兩套環境變量
接口地址 | http://{{host}}/api2/OpenAccountApi.getUserToken |
---|---|
請求方式 | POST |
請求參數 | ?_app_key=[]&_time=[]&_sign=[] |
請求正文 | {"account":"帳號信息"} |
響應正文 | {"result": { "token": "","user_id": ?},"status": 0} |
按照接口約定,配置相關的Postman請求:工具
上圖上中的{{_time}}、{{_sign}}變量目前還取不到值,由於在環境變量中尚未相關定義,
如今開始編寫相關的Pre-Request-Script腳本:測試
// 前置處理器:計算請求籤名 var _app_secret = pm.environment.get("provider_app_secret"); var _time = (new Date()).valueOf(); var _pre_sign = 'requestBody=' + pm.request.body.raw + ',time=' + _time + ',appSecret=' + _app_secret; var _sign = CryptoJS.MD5(_pre_sign).toString(); pm.environment.set("_time", _time); pm.environment.set("_sign", _sign); console.log('[Pre]OpenAccountApi.getUserToken _pre_sign='+_pre_sign+',_sign=' + _sign);
該腳本完成後,以前參數中使用{{_sign}}的就能動態的獲取到值了。加密
請求發送成功後,須要提取響應正文的token做爲下一個接口的參數,取出來放入Postman環境變量中便可。
編寫相關的Tests-Script腳本:spa
// 響應斷言 pm.test("Body matches token", function () { pm.expect(pm.response.text()).to.include("\"token\":"); // 提取Token var result = pm.response.json().result; pm.environment.set("_userid", result.user_id); pm.environment.set("_token", result.token); console.log('[Tests]OpenAccountApi.getUserToken _token=' + result.token + ',user_id=' + result.user_id); });
接口地址 | http://{{host}}/api2/OpenAccountApi.getUserToken |
---|---|
請求方式 | POST |
請求參數 | ?_token=[] |
請求正文 | {"id":用戶Id} |
響應正文 | {"result": {用戶信息},"status": 0} |
第二個接口沒有什麼特殊處理,寫了個簡單的響應斷言,若響應正文中包含"status":0,則代表請求成功了。日誌
console.log('[Tests]OpenUserApi.findById, requestBody=' + pm.request.body.raw); pm.test("Body matches status", function () { pm.expect(pm.response.json().status).to.eql(0); });
按Ctrl + Shift + I 能夠彈出開發者面板,查看到打印的相關日誌。
最後附上相關的運行日誌:code