在 Postman 中運行腳本
1. 前言
前面章節(jié)向大家講了如何發(fā)送請求以及如何接收響應,但是如果在請求中需要特殊的輸入或者需要特別的執(zhí)行順序,比如 API 2 的執(zhí)行依賴于 API 1的執(zhí)行結果,除了人工手動一個個執(zhí)行外,有沒有更好的辦法呢,這章就向大家介紹 Postman 內置的非常好用的功能–腳本。
Postman 包含了一個強大的基于 Node.js 的運行時組件能夠允許用戶給請求和集合添加動態(tài)行為。這允許用戶編寫測試套件、構建包含動態(tài)參數的請求、在請求之間傳遞數據等??梢栽谙旅鎯蓚€事件中間添加 JavaScript 代碼:
- 在將請求發(fā)送到服務器之前,在 “Pre-request Script” 選項卡下添加一個請求前腳本;
- 收到響應后,在 “Tests” 選項卡下添加測試腳本。
Postman 會在你輸入時提示你一些建議,然后自動完成代碼;
2. 腳本的執(zhí)行順序
在 Postman 中,對于一個單一請求,腳本執(zhí)行順序如下:
- 跟請求相關的請求前腳本會在請求發(fā)送之前執(zhí)行;
- 跟請求相關的測試腳本會在請求發(fā)送之后執(zhí)行。
對于一個集合中的每個請求,腳本執(zhí)行順序如下:
- 跟集合相關的“請求前腳本”會在集合中任意請求之前執(zhí)行;
- 跟文件夾相關的“請求前腳本”會在該文件夾中的任意請求之前執(zhí)行;
- 跟集合相關的“測試腳本”會在集合中任意請求之后執(zhí)行;
- 跟文件夾相關的“測試腳本”會在該文件夾中的任意請求之后執(zhí)行;
對于集合中的每個請求,腳本將始終按照以下層次結構運行:
集合級別的腳本 -> 文件夾級別的腳本 -> 請求級別的腳本;
注意,這個執(zhí)行順序同時適用于請求前腳本和測試腳本。
例如,假設你有如下集合,包含一個文件夾,該文件夾中有兩個請求:
如果你在集合、文件夾和請求的“請求前腳本”和“測試腳本”部分中創(chuàng)建了日志輸出腳本,那么在 Postman 控制臺中你就會清楚的看到腳本的執(zhí)行順序:
是不是很神奇?為什么這里可以運行腳本? 這是因為 Postman 沙箱的原因。Postman 沙箱是一個JavaScript 執(zhí)行環(huán)境,在給請求編寫“請求前腳本”和“測試腳本”時會用到它(在 Postman 和 Newman )。你在 Postman 和 Newman 寫的任何腳本都會在沙箱中執(zhí)行。
3. 編寫“請求前腳本”
在 Postman 中可以使用“請求前腳本”在請求運行前執(zhí)行 JavaScript。通過在請求、集合或文件夾的 “Pre-request Script” 選項卡中編寫代碼,就可以為請求執(zhí)行一些預處理,比如設置變量值、參數、頭和主體數據??梢允褂谩罢埱笄澳_本”來調試代碼,比如將數據輸出到控制臺。
下面是使用“請求前腳本”的一個例子:
- 在一個集合中有一系列請求,要求按順序執(zhí)行它們;
- 第二個請求依賴第一個請求返回來的值;
- 在將返回來的值傳遞給第二個請求之前需要做些處理;
- 第一個請求將響應中的值寫到“測試腳本”中的變量中;
- 第二個請求在“請求前腳本”中拿到并處理這個變量,然后再把處理后的變量設置為另一個變量。
4. 在請求發(fā)送前運行腳本
為了在請求發(fā)送前運行腳本,打開請求并點擊 “Pre-request Script” 選項卡,如下圖所示:
在請求執(zhí)行前輸入你想運行的代碼:
當你點擊“發(fā)送”,這些代碼會在請求發(fā)送之前被執(zhí)行。
5. 測試腳本
你還可以用 JavaScript 為 Postman API 請求編寫測試腳本。測試腳本能確保你的請求按預期工作,確保后臺服務之間的集成運行可靠,驗證新開發(fā)的功能沒有破壞之前已存的功能。當 API 出現問題時,還可以使用測試腳本幫你調試程序。
比如,你可以編寫一個測試腳本,通過發(fā)送不完整的數據給請求來驗證請求的錯誤處理。
可以向單個請求、文件夾和集合添加測試腳本。Postman 里包含一些腳本你可以通過點擊來增加,然后根據需求來修改里面的邏輯。
要給請求添加測試代碼,跟上面添加“請求前腳本”一樣,打開請求,并在 “Tests” 選項卡中添加代碼。在 “Test Results” 選項卡中看到輸出。
6. 編寫測試腳本
測試腳本會在 API 收到響應之后執(zhí)行。要驗證返回的結果是否正確,你可以使用 pm.response 對象??梢允褂?pm.test 方法,提供一個名稱和函數,該函數會返回一個布爾值(true 或者 false) 指示測試時成功還是失敗。還可以在斷言中使用 ChaiJS BDD 語法和 pm.expect 來測試響應細節(jié)。
pm.test 的第一個參數用來標識這個測試腳本,會出現在測試結果輸出中。
例如,在 “Tests” 選項卡中為任一請求輸入一下內容,以測試響應狀態(tài)代碼是否為200。
pm.test("Status test", function () {
pm.response.to.have.status(200);
});
點擊“發(fā)送”運行請求,并在響應部分打開 “Test Results” 選項卡,在選項卡標題中顯示了運行了幾個測試有幾個通過了。
代碼還可以測試請求環(huán)境,如下所示:
pm.test("environment to be production", function () {
pm.expect(pm.environment.get("env")).to.equal("production");
});
pm.test("response should be okay to process", function () {
pm.response.to.not.be.error;
pm.response.to.have.jsonBody("");
pm.response.to.not.have.jsonBody("error");
});
使用定制響應數據格式的語法來驗證請求響應的有效性:
pm.test("response must be valid and have a body", function () {
pm.response.to.be.ok;
pm.response.to.be.withBody;
pm.response.to.be.json;
});
測試腳本可以包含任意數量的測試,當點擊保存的時候,測試腳本會隨請求詳情一起被保存。
7. 小結
這篇文章主要向大家介紹了 Postman 腳本功能,腳本分為兩個類型:
- 請求前腳本;
- 測試腳本。
顧名思義,請求前腳本就是在請求之前執(zhí)行的腳本,這類就像我們文章開頭提到的,如果 API 2 依賴 API 1 的執(zhí)行結果,那么就可以將 API 1 加到 API 2 的請求前腳本中;測試腳本可以用來大批量的測試 API 是否問題;
通過本章,大家應該學會如何編寫請求前腳本和測試腳本。