老舊的模擬請求方式
在開發APP接口的過程中,一般接口寫完之后,后端開發都會模擬調用一下請求。在用Postman
之前,對於一般的get
請求我基本都會用瀏覽器來簡單模擬。而對於post
請求,我一般習慣寫代碼來調用。可以用Java來模擬,當然用Python會更簡潔。我們來看看這種方法存在哪些弊端?
- 不便於管理請求,通常都是用到一個寫一個,如果后續還要用的話,最多只能依賴瀏覽器的歷史記錄。
- 對於開發、測試、生產環境來說,請求的域名參數可能都是不同的,這對於我們請求的維護又帶來了極大的困難。
- 通過瀏覽器或自己調用獲取的返回結果都是未經過格式化的文本,還需要借助
bejson
等平台來提高數據的可讀性
用Postman模擬請求
然而今天需要推薦一款模擬請求的利器——Postman
,看看它是如何優雅地解決上面的這三個問題的。
使用Collections
管理請求
在Postman
中,請求可以保存,也就類似於文件。而Collection
類似文件夾,可以把同一個項目的請求放在一個Collection
里方便管理和分享,Collection
里面也可以再建文件夾。
環境變量
比如我們請求的域名,開發、測試、生產環境肯定都不一樣。包括一些請求參數,比如測試環境的用戶id和線上環境的用戶id,肯定都是有差異的。這個就類似我們在maven
中通過配置profile
打不同環境的發布包。當然Postman
里還提供了Globals
也就是所謂的全局變量,與環境無關。
請求結果格式化
再誇一點吧
Postman在模擬請求方面強大且方便到令人發指,這里再說幾句吧:
可以模擬各種Http方法,Post、Get、Put、Delete等
可以添加各種Headers,不過一些Headers受到Chrome和XMLHttpRequest規范的限制,被屏蔽了,具體有如下:
- Accept-Charset
- Accept-Encoding
- Access-Control-Request-Headers
- Access-Control-Request-Method
- Connection
- Content-Length
- Cookie
- Cookie 2
- Content-Transfer-Encoding
- Date
- Expect
- Host
- Keep-Alive
- Origin
- Referer
- TE
- Trailer
- Transfer-Encoding
- Upgrade
- User-Agent
- Via
好消息是,從Postman v0.9.6
版本開始,我們可以使用攔截器來發送這些受限的Headers
,也就是需要安裝postman interceptor
插件
安裝了postman interceptor
不僅可以發送Cookie
,並且可以使用瀏覽器的Cookie
。這樣一來,我們只要在Chrome
里登陸了,那么就可以獲取各種只能登陸后才能訪問的請求結果了。這絕對是個實用的功能。
安裝了postman interceptor
,還有一個好處!那就是可以攔截Chrome
的請求,通過Chrome
的請求可以自動被抓取到Postman
中。只需要在Chrome
中打開postman interceptor
的攔截功能,並且配置好攔截規則,默認是攔截所有請求,你也可以根據自己的規則去攔截特定的請求。有了它就相當於替代了我們去錄制請求,然后我們就可以做點什么。。。
Postman還能做什么
Postman
除了是一個牛逼的模擬請求的工具,它還包含了很強大的接口測試功能:
測試主要包括三部分,在發起請求之前運行的Pre-request
,在收到響應之后運行的Test
,和一次運行所有請求的Collection Runner
Pre-request
Pre-request
和Test
用的語言都是JavaScript
,常用的功能都可以通過右邊的Code Snippets
實現,點擊就可以插入到代碼區域。
可以看到Pre-request
里常用的功能就兩種,環境變量的設置清除和全局變量的設置清除
Test
和Pre-request
相比,Test
的Snippets
就豐富多了,例如檢查狀態碼、檢查響應串、驗證JSON、檢查header
、限制響應時間。
如果需要將服務器響應的數據保存下來,用在后面的請求里,也需要在這一步做。
Collection Runner
當編寫了很多測試之后,就可以使用Collection Runner
來自動運行整個Collection
了,入口就在主界面最上面一行的Runner
。選好Collection
、Environment
,如果有需要還可以載入JSON
和CSV
作為數據源。點擊Start Test Run
,就可以看到結果了。
寫在后面
這篇文章只是簡單的介紹了Postman
的一些優勢,我只是作為一個體驗者把我自己覺得好的地方推薦給大家,當然Postman
可能還有好多強大的功能我沒有用到的。后面的文章我將會分享一個實際的例子,來展示我如何用Postman
對最近開發的一個功能模塊的所有接口進行自動化測試。