測試腳本(Scripts)
Postman 每支請求都有兩個可以寫 JavaScript 的地方:Pre-request Script(送出前執行)與 Post-response Script/Tests(收到回應後執行)。這兩段腳本讓 Postman 從「手動測試工具」變成「可以自動驗證的測試框架」。
腳本執行順序
一次請求的完整流程是:
- Pre-request Script:適合動態產生資料,例如時間戳記、簽章,或設定這次請求要用的變數。
- Tests:適合寫斷言,檢查狀態碼、回應內容、回應時間是否符合預期;也可以在這裡把回應資料存成變數,給下一支請求使用。
用 pm.test 寫斷言
Postman 內建 Chai 風格的斷言語法,包在 pm.test() 裡:
pm.test("狀態碼是 200", function () {
pm.response.to.have.status(200);
});
pm.test("回應時間在 500ms 內", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
pm.test("回應內容包含正確的使用者名稱", function () {
const data = pm.response.json();
pm.expect(data.name).to.eql("Victor");
});
每個 pm.test() 都是獨立的一項測試,全部通過才算這支請求測試成功;Runner 或 Newman 執行時,會統計每支請求的測試通過/失敗數。
常用的 pm.* API
| API | 用途 |
|---|---|
pm.response.json() |
把回應 Body 解析成 JavaScript 物件 |
pm.response.to.have.status(code) |
斷言狀態碼 |
pm.environment.set(key, value) |
設定 Environment 變數 |
pm.collectionVariables.set(key, value) |
設定 Collection 變數 |
pm.variables.get(key) |
讀取目前生效(優先權最高)的變數值 |
pm.request |
讀取目前這支請求的方法、URL、Header 等資訊 |
pm.sendRequest(url, callback) |
在腳本裡額外發一支請求(例如先取得 Token) |
串接多支請求(Chaining Requests)
實務上常見「先呼叫 A 拿資料,再把資料帶進 B」的情境:
// A 請求的 Tests:把新建立的訂單 ID 存起來
const order = pm.response.json();
pm.collectionVariables.set("orderId", order.id);
B 請求的網址就能寫成 {{baseUrl}}/orders/{{orderId}},兩支請求依序執行時就會自動接上。這個技巧是 Collection Runner 能夠模擬完整流程(建立 → 查詢 → 更新 → 刪除)的關鍵。
撰寫建議
- 測試名稱寫清楚在驗證什麼,方便測試失敗時第一眼就知道是哪個環節出錯。
- 共用的斷言邏輯,可以寫在 Collection 或資料夾層級的腳本,避免每支請求重複貼一樣的程式碼。
- 腳本執行環境是 Postman Sandbox(Node.js 的精簡子集),部分 npm 套件無法使用,複雜邏輯建議還是交給程式碼測試框架。
下一步
單支請求的測試寫好之後,接著學怎麼把整個 Collection 排隊執行,並用命令列工具接進自動化流程:Collection Runner 與 Newman。