Postman 是一個創建和使用API的應用,Postman 對於Web開發者來說非常有用,Postman 帶來的便利有很多,諸如:
- RESTFul接口測試不依賴其他端,進度不受影響
- 測試腳本即文檔,減低溝通成本,對接時直接導出給前端即可
- 造數據,Runner指定運行N次,構造大量數據,對統計、分頁測試很有用
- 減少問題排查時間,有時候對接端由於HTTP Header或參數指定有誤導致數據異常,可直接用Postman測試,同時直接提供證據
總的來說,Postman是一個非常有用且好用的 API 測試和管理工具。
應用結構
Postman 程序的應用結構可以左、中、右三個區域,左邊是功能區、中間是接口測試區,右邊是文檔區域,這三個區域是平時經常接觸的地方,除此之外,底部還有控制台和Postamn Runner,如下圖:
發起請求
發起 HTTP 請求進行接口測試是 Postman 的核心功能,很多開發者用 Postman 最初的目的就是用它發起 HTTP 請求進行接口測試,其實 Postman 的發起 HTTP 請求也涉及很多操作,如:
- 簡單接口測試
- 前置腳本
- 后置腳本
- 環境變量
- 結果渲染
下面通過案例,逐一說明 Postman 這些功能的使用方式。
簡單接口測試
Postman 的簡單接口測試是最基本但用得最多的測試,這個操作跟使用瀏覽器直接訪問接口差不多,不同的是 Postman 可以選擇請求方式,比如 GET,POST,DELETE等,假設需要測試下面這樣的一個 SpringMVC 接口:
@GetMapping("/{id}")
public ResponseEntity<User> user(@PathVariable("id") String id) {
User user = new User();
user.setId(id);
user.setName("HiIT青年");
return ResponseEntity.ok(user);
}
你只需要在 Postman 創建 GET 請求接口,然后填寫對應的請求地址,然后點擊 Send 即可,如果請求的接口沒有異常,那么可以看到下面這樣的結果:
這種操作方式是最簡單的,也是最常用的,其中:
- GET 下拉可以切換請求方式
- Params 指定掛在URL上的參數
- Authrization 指定接口授權方式
- Headers 可以設置額外的請求頭
- Body 主要用於設置 POST 請求體,可以用多種數據格式
- Pre-request Script 是前置腳本
- Tests 是后置測試腳本
- Settings 是一些設置,如SSL證書校驗、URL編碼等
簡單的方式,存在很多弊端,最明顯的就是請求接口的返回值需要肉眼校驗是否正確,當然 Postman 支持用 JavaScript 來編寫測試。
前置腳本
在簡單接口測試部分,使用一個隨機參數 t=20210814,這個參數對於接口來說沒有任務作用,但有時候,接口測試就真都需要這些隨機參數,Postman 設置隨機參數的方式有多種,如:
- 使用 Postman 隨機值
- 使用變量 + 前置腳本設值
Postman 提供了動態變量可以用於設置參數隨機值,如:
{{$guid}}:用於生成guid隨機值
{{$timestamp}}:以當前時間秒數作為隨機值
{{$randomInt}}:隨機生成0~1000的整數
....
另外,可以隨機參數還可以使用前置腳本來設置。
首先,在Collections創建一個變量(timestamp),也可以用環境變量,效果都一樣。
編寫前置腳本,在請求發起前,為變量 timestamp 設置值:
var timestamp = new Date().getTime()
pm.collectionVariables.set('timestamp', timestamp)
最后把 t 的取值由 {{$guid}} 改為 {{timestamp}} 即可。
后置腳本
Postman 后置腳本是指 Tests 部分編寫的 JavaScript 腳本,這部分功能非常強大,不僅可以使用 JavaScript 編程來獲取返回值數據,還可以將返回結果渲染成頁面(圖表),而且還支持引入外部 JavaScript 庫。
http://localhost:8080/user/1?t={{timestamp}}
這個接口拉取的是 ID=1 的用戶數據,假如需要測試返回的數據 ID 是不是等於 1,那么可以用下面的腳本來測試。
可以看到,測試結果為 “PASS” 如果把 equal("1") 改成 equal("2") 那么測試將會失敗:
FAIL test id == 1 | AssertionError: expected '1' to equal '2'
可以說,使用后置腳本就像給整個接口測試流程注入生命,比如,一些授權接口需要獲取 ticket,然后其他接口需要用這個 ticket 來授權,那么就可以在請求 ticket 后將它設置到變量中:
var jsonData = pm.response.json();
pm.test("ticket exists", function () {
pm.expect(jsonData.ticket).exist
});
pm.collectionVariables.set('ticket', jsonData.ticket)
另外,Tests 還可以發起新的 HTTP 請求:
pm.sendRequest('http://localhost:8080/user/ticket/1', (error, response) => {
if (error) {
console.log(error);
}
pm.collectionVariables.set('ticket', response.json().ticket)
});
關於 Tests 的調試信息,可以通過 Postman 底部的 Console 來查看。
環境變量
Postman 的環境變量方便開發針對不同的環境進行切換,而接口方面不用做任何調整,這一點對開發者來說也是很有用的,因為在開發中過程一般都有很多個環境,比如:
- 開發環境:開發自己的電腦運行的程序
- 測試環境:測試服務器上運行的程序
- 預發布環境:測試通過后,進行試運行的程序
- 線上環境:真正為服務器上運行的環境
Postman 運行用戶創建多個運行環境,舉個例子,創建 “開發” 和 “測試” 這兩個環境,並在不同的環境中定義不同的變量(host:IP,port:端口)
將請求 URL 調整為取環境變量值:
http://{{host}}:{{port}}/user/1?t={{timestamp}}
這樣,針對不同的環境測試,就不用改IP、端口,只需要切換運行環境即可。
結果渲染
結果渲染這部分感覺實際用得不是很多,但也不是說沒有用,比如:想要將結果渲染成表格,或者說報表就可以用到這個功能。
這一塊還是在后置腳本(Tests)中處理,以渲染表格為例:
渲染圖表案例:
接口文檔
Postman 接口文檔位於 Postman 界面的最后測,接口文檔支持 Markdown 編寫,這個對於程序員來說非常友好,可以根據需要為集合(Collections)或者接口編寫對應的文檔。
另外,除接口文檔外,Postman 的 example 也是非常有用,它可以把每種請求接口保存為一份示例,這樣,不管是成功,還是失敗,都可以快速查看返回數據格式(這對對接非常有用)。
下面是一份成功請求的示例:
接口授權
Postman 的接口鑒權管理在 Collections 的 Authoriztion 中,開發者可以通過 Type 選擇鑒權的方式,包括 ApiKey,BasicAuth,OAuth2.0等等,傳值可以選擇 Header 獲取 URL參數。
對於鑒權值,可以選擇直接填寫,也可以使用變量值的形式,比如{{ticket}},如果將其他接口(比如登錄接口)的返回值,設置到環境變量中。
var jsonData = pm.response.json();
pm.test("ticket exists", function () {
pm.expect(jsonData.ticket).exist
});
pm.collectionVariables.set('ticket', jsonData.ticket)
關於 Postman Jenkins 持續集成測試的方法,可以關注公眾號 “HiIT青年” 發送 “postman” 查看。
=========================================================
關注公眾號,閱讀更多文章。