你应该学会的接口调试神器——Postman高级用法
postman這個神器相信大家都用過,程序員作為非專業的測試人員,非常需要這么一款簡單輕量級的restful測試工具,但是不知道你是否知道,postman的強大之處不只是測試一下接口,還有其他非常贊的使用方式。
批量執行接口
入門級功能,但是被很多人忽略。postman左側有個collections的tab,可以將接口進行分組,而且可以將分組以后的接口進行批量的執行,是一個非常贊的功能。當然,點擊Runner也是可以的。
- 批量執行入口
- 批量執行界面
可以設置環境、重復次數、每個接口延遲等,并且會顯示批量執行的結果。
這個是非常基礎的功能,有了這個基礎以后,批量的測試以及自動化的測試都可以實現。
認證authorization
接口認證是所有接口必須做的事情,postman已經幫我們幫一些常用的接口認證機制可視化了,使用起來非常簡單。
加入需要用的基礎的auth認證,不管是auth1.0,還是auth2.0都能很好的支持。
當然,有的時候認證方式完全是自定義的,在authorization功能找不到認證的方式,例如很多的身份認證是需要通過時間戳、密碼或者其他參數根據一定的算法規則,算出一個結果,那么是不是我們就沒有辦法使用了?當然不是,那就需要重點介紹的功能——postman腳本,但這之前,我們先介紹一下還有一個非常重要的概念:環境變量
環境變量
對于一個程序員來說,環境變量這個概念還是很好理解,這里的環境變量就是大家理解的那樣了,設置了環境變量以后,所有的接口都可以使用這個變量,而且這個變量是可以通過代碼進行修改的。
設置環境變量:
使用如上環境變量,只要在參數中用{{sign}},如圖:
image執行前腳本
postman界面有個名叫pre-request script 的tab,從這里開始就介紹一下postman最重要的功能之一,腳本功能。pre-request script就是在請求之前執行的腳本。
執行前腳本我一般的用法就是用來修改環境變量,因為執行前做的事情,主要就是對請求的參數做一些處理。這里舉個簡單的例子:
某接口的接口認證規則,主要是通過header中的authentication來進行身份的認證,authentication的值是根據秘鑰(key),時間戳(timeStamp),傳入的參數(param),以及key、timeStamp和param組成生成字符串md5以后生成的sign,最終的結果類似于: {"timeStamp": "2017-11-13 10:06:08",sign": "99f8d869d6a105afddd9d152c5894418"}
其實這是一個很常用場景,很多接口都是當前的參數和時間戳聯合進行處理,來確保接口參數時效性,這樣的場景直接通過參數或者環境變量肯定是有問題的,因為時間是動態的,只能動過程序來處理。我來處理方式大概就是:
- 腳本計算出需要的值,將值設為環境變量
- 參數設置的value為當前的環境變量
- 執行測試
腳本如下:
var date=new Date();var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? ('0' + m) : m; var d = date.getDate(); d = d < 10 ? ('0' + d) : d; var h = date.getHours(); h=h < 10 ? ('0' + h) : h; var minute = date.getMinutes(); minute = minute < 10 ? ('0' + minute) : minute; var second=date.getSeconds(); second=second < 10 ? ('0' + second) : second; //獲取時間,格式為yyyy-mm-dd HH:mm:ss var timespan=y + '-' + m + '-' + d+' '+h+':'+minute+':'+second; var key='dfc96ds8-e5a0-45aa-a2ec-2611cds71d4e'; //通過request.data獲取body的內容,這個是postman內置變量 var param=request.data;console.log(key);console.log(timespan);console.log(param); //CryptoJS,postman的內置js庫 var sign=CryptoJS.MD5(key+timespan+param).toString();console.log(sign); var mdmauth="{\"timeStamp\": \""+timespan+"\",\"sysCode\": \"EUH\",\"sign\": \""+sign+"\"}"; console.log(mdmauth); //設置環境變量 postman.setEnvironmentVariable("mdmauth", mdmauth.toString());postman的腳本是大家非常熟悉的javascript腳本,而且postman還內置了一些重用的js庫,基本能滿足所有的使用場景,我們常用內置的函數包括:
- Lodash,一個基礎的函數庫,大家應該都用過
- cheerio,可以理解為另一個jquery
- BackboneJS,js的mvc框架
- CryptoJS,js加密庫,支持幾乎所有的常用加密方式
使用過程中我們也需要獲取請求的值,或者請求的結果,post有幾個內置的變量可以直接獲取:
- request 獲取請求的參數,包括頭和請求體
- responseHeaders 返回值的header
- responseBody 返回值的body
- responseCode 返回值的http code
除此之外,還有幾個內置的全局動態環境變量:
- {{$guid}}: 生成一個guid
- {{$timestamp}}: 獲取當前時間戳
- {{$randomInt}}: 獲取一個動態整數
說真的,postman考慮的是在是太周到了,有了以上的神器,不只是可以自動化的編寫腳本,而且還能非常方便的編寫腳本,測試任何類型的接口。
具體內容,建議詳細閱讀:https://www.getpostman.com/docs/postman/scripts/postman_sandbox ,這個頁面的內容非常重要。
測試腳本
前文介紹了批量執行接口,執行前腳本能相關內容,只要能支持編程,接口的測試就變得很靈活,容易定制。其實,正常的測試還有一個場景,接口的測試都是有依賴的,如接口的測試都依賴于token接口來獲取腳本,或者批量測試的時候,后面的接口需要前面接口的返回值等,postman肯定也是支持的,批量執行接口結合測試腳本,使用就非常簡單了。
測試的代碼在Test這個tab中,這里的結果是測試完成后執行的內容。pre-request script是執行前,test是執行后,這樣就能構成一個閉環了。(完美!!!)
示例代碼: var jsonData = JSON.parse(responseBody);//tests的內容會在測試的時候展示 tests["http code"] = responseCode.code === 200; tests["返回值正常"] = jsonData.Result===true;postman.setEnvironmentVariable("authtoken",CryptoJS.MD5(request.headers["UserName"]+jsonData.Data.FranchiseeCode));//執行成功后調用下一個接口 postman.setNextRequest("獲取待處理");
其中,有個函數postman.setNextRequest 會調用下一個接口,這兩就可以讓接口執行的有順序,這就是我們需要的流程測試。
調試
既然涉及到編程,那么肯定也會涉及到調試,postman對調試的支持也是非常好的,只需要簡單的設置,結合chrome就能進行調試。
首先,開啟下chrome的調試。在chrome地址欄中輸入:chrome://flags/#debug-packed-apps ,開啟Debugging for packed app。(設置欄目較多,建議搜索找到)
接著,輸入chrome://inspect/#apps,選擇postman的inspect,就彈出我們熟悉的postman的調試框
我們在postman中的console.log或者斷點都是可以進行調試的,和chrome調試web一樣的。
總結
以上只是介紹了部分關于postman使用中,稍微高級一點的功能,其實postman還有很多好的功能,如文檔導出、純腳本測試,這些功能如果大家有用到,建議仔細閱讀官網的doc,postman絕對不是簡單的一個測試接口的工具,是一個完全覆蓋開發人員測試場景的接口調試工具。
(完)
歡迎大家關注我的公眾號交流、學習、第一時間獲取最新的文章。
微信號:itmifen
總結
以上是生活随笔為你收集整理的你应该学会的接口调试神器——Postman高级用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thinkphp-条件判断-范围判断-N
- 下一篇: 新特性的副产品--从11g的DEFERR