本章使用教材附帶的 Postman 測試集合, 學會匯入集合、管理變數、閱讀與撰寫自動化測試腳本(Tests), 並用 Collection Runner 一鍵跑完整套測試。
為什麼用 Postman?
curl 適合快速測試,但有明顯限制:token 要手動複製、 請求無法儲存重用、回應是純文字不好讀。Postman 解決了這些問題:
請求集合(Collection):把所有 API 請求分類儲存,可匯出分享給團隊。
變數:、 一處修改處處生效。
Scripts:請求前後可執行 JavaScript——自動存 token、自動驗證回應。
Runner:整個集合依序自動執行,變成一鍵回歸測試。
匯入測試集合
教材附帶兩個檔案(位於 資料夾):
P7.6cmP4.8cm 檔案 & 內容
& 測試集合:15 個請求+自動化腳本
& 環境檔:本機開發的
匯入步驟:
開啟 Postman,點左上角 Import 按鈕。
把兩個 JSON 檔一起拖進視窗(或點 files 選取)。
完成後左側 Collections 出現「Bookstore API 教學」, 右上角環境下拉選單可選「Bookstore Local(本機開發)」。
Postman 變數機制
變數用雙大括號引用:。 依作用範圍由大到小:
lP8.4cm 範圍 & 適用情境
Global & 跨所有 collection 共用(少用)
Environment & 隨環境切換的值:本機/測試機/正式機的
Collection & 該集合內共用:本教材的 、
Local & 單次執行暫存
同名變數「範圍小的優先」:Environment 的 會蓋過 Collection 的 。 本教材集合內建 預設值,所以就算不選環境也能直接使用; 之後若要打測試機,只要新增一個環境改掉 即可,集合完全不用動。
集合結構導覽
lP8.6cm 資料夾 & 內容
. 認證 Auth & 註冊、登入(user 與 admin);登入後自動儲存 token
2. 書籍 Books CRUD & GET/POST/PUT/PATCH/DELETE 完整流程
3. 錯誤情境測試 & 刻意觸發 400/401/403/404/409
集合層級已設定 Bearer Token 認證,值為 —— 資料夾內的請求預設「繼承」這個設定(Inherit auth from parent), 所以登入一次之後,所有需要認證的請求都會自動帶上 Header。
跟著做:完整測試流程
步驟 1:登入並自動儲存 token
確認專案已啟動,執行「1-2 登入(一般使用者 user)」。 切到請求的 Scripts \(\to\) Post-response(舊版稱 Tests)分頁, 看看這段每次收到回應後自動執行的腳本:
pm.test('登入成功:狀態碼應為 200 OK', function () {
pm.response.to.have.status(200);
});
// 解析回應 JSON
const json = pm.response.json();
pm.test('回應應包含 token', function () {
pm.expect(json.token).to.be.a('string').and.to.have.length.above(0);
});
// 【重點】把 token 存入 collection 變數。
// 之後所有請求的 Authorization 都設定為 Bearer {{token}},
// 因此登入一次,整個 collection 就能直接使用!
pm.collectionVariables.set('token', json.token);
送出後觀察下方 Test Results 分頁:兩個測試都顯示綠色 PASS。 接著執行「1-3 登入(管理員 admin)」,它會把管理員的 token 存入 (刪除書籍時使用)。
步驟 2:走一遍 CRUD
依序執行「2. 書籍 Books CRUD」資料夾內的請求,重點觀察:
P4.4cmP7.8cm 請求 & 觀察重點
-1 GET 分頁查詢 & 回應的分頁欄位;改 看排序變化
2-4 POST 新增 & 狀態碼 201、 Header; 新書 id 自動存入
2-5 PUT 完整更新 & body 需帶「全部」欄位;試著刪掉一個欄位觀察 400
2-6 PATCH 部分更新 & body 只帶 ;回應中其他欄位不變
2-7 DELETE 刪除 & 使用 ;成功回 204 無本文
「2-4 POST 新增書籍」設有 Pre-request 腳本: 每次送出前產生隨機 ISBN 存入 , 讓這個請求可以重複執行而不會因 ISBN 重複而收到 409。 打開該請求的 Scripts \(\to\) Pre-request 分頁即可看到寫法。
步驟 3:錯誤情境
「3. 錯誤情境測試」資料夾刻意觸發每一種錯誤, 並用 Tests 腳本驗證狀態碼與錯誤格式:
P5.8cmll 情境 & 狀態碼 & 對應機制
-1 未帶 token 新增書籍 & 401 & SecurityConfig 的 EntryPoint
3-2 一般使用者嘗試刪除 & 403 & 角色授權規則
3-3 查詢不存在的書籍 & 404 & ResourceNotFoundException
3-4 空白書名+負數價格 & 400 & Bean Validation
3-5 重複的 ISBN & 409 & Service 商業規則
撰寫 Tests:常用 API 速查
Postman 的腳本使用 JavaScript,搭配內建的 物件:
P6.2cmP6.2cm 語法 & 用途
& 定義一個測試(顯示於 Test Results)
& 驗證狀態碼
& 把回應本文解析成 JSON 物件
& 驗證 Header 存在
& 驗證值相等(Chai 斷言庫)
& 寫入集合變數
& 寫入環境變數
& 印到 Console(View \(\to\) Show Postman Console)
範例——驗證回應時間與欄位型別:
pm.test('回應時間應小於 500ms', function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
pm.test('price 應為數字', function () {
const json = pm.response.json();
pm.expect(Number(json.price)).to.be.a('number');
});
Collection Runner:一鍵跑完整套測試
在集合名稱上按右鍵 \(\to\) Run collection。
保持預設順序(順序就是設計好的測試流程:先登入再 CRUD 再錯誤情境)。
按 Run,Postman 會依序送出所有請求並統計測試結果。
全部綠色 PASS = 整個後端的行為都符合預期——這就是最簡單的回歸測試!
之後每次改完程式,跑一次 Runner 就知道有沒有改壞東西。
如何匯出自己的 Collection
教材附帶的集合檔就是這樣匯出的,日後你建立自己的集合也可以分享給團隊:
在集合名稱上按右鍵 \(\to\) Export。
選擇格式 Collection v2.1(recommended) \(\to\) Export。
存成 JSON 檔,即可放入版本控制或傳給同事匯入。
匯出前記得檢查集合變數中有沒有殘留的真實 token 或密碼—— 變數的「Current value」不會被匯出,但「Initial value」會! 機密資料請只放在 Current value,或匯出前清空。