現在,無論是開發還是使用服務,我們每個人都面臨着 REST API 的挑戰。同時,我們正處於微服務的流行時代,我們將業務邏輯拆分為多個獨立的小服務。這些服務大多遵循 RESTful 原則,並使用 JSON 格式進行通信,因為其簡單性使其成為最廣泛使用的格式。
pyhttptest - 這是一個命令行工具,用於對 RESTful APIs 進行 HTTP 測試。
此工具通過三個簡單的步驟實現自動化測試。
1. 安裝軟件包
pip install pyhttptest
2. 描述針對您的 API 服務的 HTTP 請求測試用例
使用簡單且廣泛使用的 JSON 格式在文件中描述您的 HTTP 請求測試用例。
單個測試用例定義示例
-
發送一個 HTTP GET 請求
- 創建一個JSON文件,例如,
data/test_server_status.json
{ "name": "TEST: Get server status", "verb": "GET", "endpoint": "/get", "host": "https://httpbin.org", "headers": { "Accept-Language": "en-US" } } - 創建一個JSON文件,例如,
-
發送一個 HTTP POST 請求
- 創建一個 JSON 文件,例如,
data/test_create_html_bin.json
{ "name": "TEST: Create an HTML bin", "verb": "POST", "endpoint": "post", "host": "https://httpbin.org", "payload": { "content": "Hello, world!" } } - 創建一個 JSON 文件,例如,
多個測試用例定義示例
- 創建一個 JSON 文件,例如,
data/requests.json
[
{
"name": "TEST: List all users",
"verb": "GET",
"endpoint": "api/v1/users",
"host": "http://localhost:8085/",
"headers": {
"Accept-Language": "en-US"
},
"query_string": {
"limit": 1
}
},
{
"name": "TEST: Add a new user",
"verb": "POST",
"endpoint": "api/v1/users",
"host": "http://localhost:8085/",
"payload": {
"username": "pyhttptest",
"email": "admin@pyhttptest.com"
}
},
{
"name": "TEST: Modify an existing user",
"verb": "PUT",
"endpoint": "api/v1/users/XeEsscGqweEttXsgY",
"host": "http://localhost:8085/",
"payload": {
"username": "pyhttptest"
}
},
{
"name": "TEST: Delete an existing user",
"verb": "DELETE",
"endpoint": "api/v1/users/XeEsscGqweEttXsgY",
"host": "http://localhost:8085/"
}
]
3. 運行命令並獲得報告
pyhttptest execute data/test_server_status.json
單個測試用例的報告
pyhttptest execute data/requests.json
多個測試用例的報告
您可以傳遞給.json文件的屬性包括:
name- 測試用例的名稱。verb- HTTP 方法。endpoint- 您想要在服務器上調用的資源。host- 服務器主機地址。headers- HTTP 頭部。支持所有 HTTP 頭部字段。query_string- URL 問號後的查詢字符串參數。payload- 數據。
最佳實踐
您可能會問,在我的現有/新項目中如何添加、結構和組織測試用例。每個含有測試的 Python 項目都會在其項目目錄中有一個名為tests/的文件夾。
根據慣例,像unittest和pytest這樣的框架會發現並執行 Python 腳本中定義的測試用例。為了不混淆這些測試並保持慣例,我建議在項目根目錄創建一個名為live_tests/的新目錄。
在這個新目錄中,您可以放入所有定義 API 測試用例的.json文件。這樣做可以輕鬆區分您的測試,但這真的取決於您!