在當今的軟體開發過程中,API(應用程式程式設計介面)的使用變得越來越普遍,API 允許不同系統之間進行通訊和資料交換,從而實現複雜的功能和服務整合,為了確保 API 的可靠性和穩定性,自動化測試至關重要。[Postman] 作為一款功能強大的 API 開發和測試工具,在自動化測試領域扮演著重要的角色。
Postman 的主要功能
[Postman] 是一款功能豐富的 API 開發和測試工具,整合了多種功能,包括:
- 請求構建和傳送:Postman 允許使用者輕鬆地構建和傳送 HTTP 請求,支援多種請求方法和引數。
- 響應檢視和分析:Postman 可以清晰地展示伺服器的響應,包括響應狀態、響應頭和響應體。同時提供多種工具幫助使用者分析響應資料。
- 環境管理:Postman 支援環境管理,允許使用者為不同的開發環境或測試環境配置不同的變數和設定。
- 測試指令碼編寫:Postman 提供了直觀的測試指令碼編輯器,支援 JavaScript 指令碼編寫,方便使用者對 API 進行自動化測試。
- Mock Server:Postman 整合了 Mock Server 功能,允許使用者模擬 API 響應,非常適合 API 開發和測試。
一 、Postman 自動化測試的基礎知識
1.1 自動化測試簡述
[自動化測試] 是指使用工具或框架自動執行測試用例的過程。它透過模擬使用者操作,自動傳送請求、驗證響應,並判斷測試結果是否符合預期。自動化測試可以大大提高測試效率和覆蓋率,並減少人為錯誤。
1.2 自動化測試重要性
自動化測試之所以重要,主要有以下幾個原因:
- 提高測試效率: 自動化測試可以自動執行重複性、繁瑣的測試任務,節省測試人員的時間和精力。
- 增強測試覆蓋率: 自動化測試可以覆蓋更多的測試用例,提高測試覆蓋率,發現更多潛在的缺陷。
- 提升測試可靠性: 自動化測試可以減少人為錯誤,提高測試的可靠性和穩定性。
- 快速反饋: 自動化測試可以提供快速反饋,幫助開發人員和測試人員及時發現並修復缺陷。
- 持續整合: 自動化測試可以與持續整合工具整合,實現持續整合和持續交付。
1.3 不同型別的自動化測試
自動化測試可以分為不同的型別,根據測試的粒度和範圍,常見的型別包括:
- 單元測試: 單元測試是對軟體中最小的獨立單元(如函式、方法)進行的測試。單元測試通常由開發人員編寫,主要目的是驗證程式碼的正確性。
- 整合測試: 整合測試是對兩個或多個軟體單元組合在一起進行的測試。整合測試主要目的是驗證不同單元之間的介面和互動是否正確。
- 系統測試: 系統測試是對整個軟體系統進行的測試。系統測試主要目的是驗證軟體系統是否滿足需求和期望。
此外,自動化測試還可以分為以下幾類:
- 功能測試: 功能測試是驗證軟體系統是否按照預期的方式工作。
- 效能測試: 效能測試是測量軟體系統的效能指標,如響應時間、吞吐量等。
- 安全性測試: 安全性測試是驗證軟體系統是否能夠抵禦安全攻擊。
- 相容性測試: 相容性測試是驗證軟體系統是否能夠在不同的環境和平臺上正常工作。
不同的自動化測試型別和類別適用於不同的測試場景和需求,測試人員需要根據實際情況選擇合適的自動化測試型別和類別,以實現最佳的測試效果。
更多內容可以學習《測試工程師 Python 工具開發實戰》書籍、《大話效能測試 JMeter 實戰》書籍
二、Postman 中建立自動化測試
2.1 建立新的請求
開啟 [Postman] 並建立一個新的工作區(Workspace),單擊 “請求” 選項卡(Request)並選擇要傳送的請求型別(如 GET、POST、PUT 等),在 “URL” 欄位中輸入請求的 URL,在 “Body” 選項卡中選擇請求正文的格式(如 JSON、XML、文字等),在 “Headers” 選項卡中新增必要的請求頭,在 “Params” 選項卡中新增請求引數。
2.2 使用環境變數管理多個環境
Postman 的環境變數功能允許你輕鬆地在不同的環境之間切換,而無需更改請求的 URL 或其他設定。
單擊左側邊欄的 “Environments” 選項卡,單擊 “+” 按鈕以建立一個新的環境,在環境中填寫環境變數名和變數值。
環境變數設定後,如果要在請求中使用環境變數,請使用以下語法:
{{environment_variable_name}}
例如,要在請求 URL 中使用名為 “host” 的環境變數,語法為:
{{host}}/api/v1/users
當你在不同的環境之間切換時,Postman 會自動替換環境變數的值,點選頁面右上角可切換環境變數。
2.3 編寫測試指令碼
Postman 允許你使用 JavaScript 在 Tests tab 中編寫測試指令碼,測試指令碼可以用來驗證響應狀態、響應時間、響應體等。比如我要在 [Postman] 中將下面返回響應的 token 校驗欄位提取到環境變數中,我要怎麼寫指令碼呢?
{
"code": "0",
"data": {
"token": "fgub938t203t9ug0j2r9it2094942"
},
"message": "success"
}
要提取出上面的 token 校驗欄位到環境變數中,你可以在 Tests 中寫入以下指令碼。
var body = JSON.parse(pm.request.body.raw);
var token = body.token;
console.log("Token: " + token);
pm.environment.set("token", token);
一般介面的 token 是用來鑑權的,所以你需要將其存到環境變數中,然後在 Collections 中全域性引用這個變數,這樣其它介面在測試或者是自動化測試的時候就可以繼承這個鑑權的 token 了。
有一點要注意,在集合中設定了鑑權的 token 後,在介面中需要選擇 “Inherit auth from parent”,也就是繼承父級(繼承自集合中設定的 token),不然不會生效的。
2.4 使用 Pre-request Scripts
Pre-request Scripts 允許你在傳送請求之前執行一些指令碼。這可以用來動態生成請求引數、設定請求頭、修改請求正文等。比如你要在傳送請求時在每個請求的請求頭加上一些引數,你就可以在集合的 Pre-request Scripts 中編寫 Javascript 指令碼,這取決於你的需求,形如:
pm.request.headers.add({
key: 'aaaaa',
value: 'bbbbb'
});
2.5 執行測試和檢視結果
當上述步驟完成後,也就是你根據你的業務需求,將介面、環境及環境變數、介面鑑權校驗、請求頭都設定完畢後,你可以試著點選 “Send” 按鈕來除錯一下,看看是否符合初步預期,如果符合,接下來就可以在 Postman 中執行自動化測試了。
提個醒,在編寫任何自動化測試之前,都要首先確保單個介面能夠除錯成功,然後逐步往下聯調整合,養成良好測試路徑,才能事半功倍。
要在 Posmtan 中進行自動化測試,你可以點選集合名上的 “。。。”,然後點選 “Run collection” 選項開啟 Runner 頁。
在 Runner 頁,你可以選擇需要測試的介面,然後選擇迴圈次數、間隔時間,也可以上傳 Data 檔案,這個檔案是需要測試的資料,設定完畢後點選 “Run ” 執行即可。
執行完成後,你可以在 Collection Runner 的結果視窗中檢視每個請求的執行情況。這包括請求的響應時間、狀態碼、響應體等資訊,這樣,一個簡單的自動化測試就完成了。
三、高階功能與最佳實踐
3.1 Postman 自動化測試的進階指令碼編寫
使用 Chai Assertion Library 增強測試能力
Chai Assertion Library 是一個功能強大的 JavaScript 斷言庫,可以幫助你編寫更復雜、更具可讀性的測試指令碼。Postman 內建了 Chai Assertion Library,因此你可以直接在測試指令碼中使用 Chai 的斷言方法。
以下是一些 Chai 斷言方法的示例:
-
pm.expect(actual).to.be.equal(expected);
:斷言實際值等於預期值。 -
pm.expect(actual).to.be.above(expected);
:斷言實際值大於預期值。 -
pm.expect(actual).to.be.below(expected);
:斷言實際值小於預期值。 -
pm.expect(actual).to.include(expected);
:斷言實際值包含預期值。 -
pm.expect(actual).to.have.lengthOf(expected);
:斷言實際值具有指定的長度。
這些 Chai 斷言方法需要包裹在 pm.test()
中使用。在 Postman 中,pm.test()
是用來編寫測試指令碼的方法,你可以在其中編寫你的測試邏輯,包括斷言部分。因此,你應該將這些斷言方法放在 pm.test()
中,以確保它們在測試中正確執行,並根據斷言結果生成相應的測試結果,例如:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Status code is 200", function () {
pm.expect("actual").to.be.equal("qq");
});
如何利用環境變數在多個請求間傳遞資料
Postman 的環境變數允許你在不同的請求之間傳遞資料。這可以用來共享一些公共的資料,例如:使用者憑證、API 金鑰、測試資料等。具體步驟已經在上文的 2.2 和 2.3 小節講過,不再具體贅述。簡單來講就是在環境變數
中設定變數及變數值,然後在 Collection 中透過{{}}
引用環境變數即可。
3.2 CI/CD 整合
如何將 Postman 測試整合到 CI/CD 流程中
將 Postman 測試整合到 CI/CD 流程中可以幫助你實現持續整合和持續交付。這樣,你可以在每次程式碼更改後自動執行 Postman 測試,並根據測試結果決定是否將更改部署到生產環境。
以下是一些將 Postman 測試整合到 CI/CD 流程中的步驟:
1.安裝 Postman Newman
Postman Newman 是一個命令列工具,可以幫助你在 CI/CD 流程中執行 Postman 測試。要安裝 Postman Newman,請按照以下步驟操作:
- 在你的 CI/CD 伺服器上安裝 Node.js。
- 使用以下命令安裝 Postman Newman:
npm install -g newman
2.將 Postman 測試匯出為 JSON 或 Collection 檔案
要將 Postman 測試匯出為 JSON 或 Collection 檔案,請按照以下步驟操作:
- 在 Postman 中開啟要匯出的測試檔案。
- 單擊 “匯出”(Export)按鈕。
- 選擇要匯出的格式(JSON 或 Collection)。
- 將匯出的檔案儲存到你的 CI/CD 伺服器上。
3.將 Postman Newman 整合到你的 CI/CD 工具中
你可以使用不同的 CI/CD 工具來整合 Postman Newman。以下是一些示例:
- Jenkins:
pipeline {
agent any
stages {
stage('Run Postman Tests') {
steps {
sh 'newman run /path/to/postman_collection.json'
}
}
}
}
- Travis CI:
language: node_js
script:
- newman run /path/to/postman_collection.json
- CircleCI:
version: 2.1
jobs:
run_postman_tests:
docker:
- image: circleci/node:latest
steps:
- checkout
- run:
name: Run Postman Tests
command: newman run /path/to/postman_collection.json
上面的流水線命令你可以在 Postman 中生成,還是在自動化測試的 Runner 頁,在頁面中點選 “Automate runs via CLI” 選項,然後點選下方的 “Configure command” 即可。
來到配置頁,你可以選擇相應的平臺(比如 Jenkins、Gitlab)來生成對應的 Postman CLI 命令。
3.3 最佳實踐和常見問題
測試用例組織技巧
- 將測試用例組織成不同的集合(Collection),以便於管理和執行。
- 使用 Postman 的資料夾功能來組織測試用例。
- 為每個測試用例編寫清晰的描述,以便於理解其目的。
- 使用標籤來標記測試用例,以便於過濾和搜尋。
效能和效率最佳化建議
- 避免在測試指令碼中執行耗時的操作,例如資料庫查詢或檔案讀取。
- 使用 Postman 的 Pre-request Scripts 來設定請求頭和引數,而不是在每次請求中都重複設定。
- 使用 Postman 的 Tests tab 來驗證響應,而不是使用 console.log() 或其他方法。
- 使用 Newman 來執行 Postman 測試,而不是使用 Postman GUI,可以提高效能。
常見的測試編寫錯誤和解決方案
錯誤: 使用 pm.test()
來驗證響應狀態,但沒有指定要驗證的狀態碼。
解決方案: 使用 pm.test("Status code is 200", function () { pm.response.to.have.status(200); });
來驗證響應狀態碼為 200。
錯誤: 使用 pm.expect()
來驗證響應正文,但沒有指定要驗證的值。
解決方案: 使用 pm.expect(pm.response.text()).to.equal("Hello, world!");
來驗證響應正文為 "Hello, world!"。
錯誤: 使用 pm.send()
來傳送請求,但沒有指定請求方法。
解決方案: 使用 pm.get()
, pm.post()
, pm.put()
, pm.delete()
或其他方法來傳送請求,並指定請求方法。
錯誤: 使用 pm.environment.get()
來獲取環境變數,但沒有指定要獲取的環境變數的名稱。
解決方案: 使用 pm.environment.get("API_KEY")
來獲取名為 "API_KEY" 的環境變數。
總結
[Postman] 具有多種功能,包括請求構建和傳送、響應檢視和分析、環境管理、測試指令碼編寫以及 Mock Server 功能。Postman 的自動化測試功能透過模擬使用者操作,自動傳送請求、驗證響應,並判斷測試結果是否符合預期,提高了測試效率和覆蓋率,減少了人為錯誤。
在 [Postman] 中建立自動化測試的步驟包括建立新的請求、使用環境變數管理多個環境、編寫測試指令碼、使用 Pre-request Scripts、以及執行測試和檢視結果。進階的功能包括利用 Chai Assertion Library 增強測試能力、使用環境變數在多個請求間傳遞資料,以及將 Postman 測試整合到 CI/CD 流程中。最佳實踐包括測試用例組織技巧、效能和效率最佳化建議,以及常見的測試編寫錯誤和解決方案。
更多內容可以學習《測試工程師 Python 工具開發實戰》書籍、《大話效能測試 JMeter 實戰》書籍