雖然 Smart Mock 根據您的 API 規範自動生成資料,但有時您需要更多控制。Mock Expectations(Mock 期望)允許您定義帶有特定條件的自訂 Mock 回應,讓您完全控制 Mock 伺服器返回的內容。在這篇文章中,我們將學習如何為 Pet Store API 建立 Mock Expectations,包括固定回應、條件回應和動態回應。
1. 什麼是 Mock Expectations?#
Mock Expectations 是您為特定場景定義的自訂 Mock 回應。與 Smart Mock(自動生成資料)不同,Mock Expectations 讓您:Mock Expectations 具有 最高優先級——如果請求符合期望的條件,則會返回該期望的回應,而不是 Smart Mock。
2. 何時使用 Mock Expectations#
在以下情況下使用 Mock Expectations:特定測試場景:測試您的應用程式如何處理特定回應(成功、錯誤、邊緣情況)
條件回應:根據請求參數返回不同資料(例如:針對不同 ID 的不同回應)
錯誤模擬:模擬錯誤回應(404、500 等)進行測試
3. 建立一個固定的 Mock Expectation#
讓我們從最簡單的情況開始:建立一個始終返回相同資料的 Mock Expectation。範例:始終返回特定寵物#
假設您希望 GET /pets/{id} 端點在被呼叫時始終返回特定的寵物:步驟 1:打開 Mock 分頁#
1.
在您的 Pet Store API 中打開 GET /pets/{id} 端點
步驟 2:建立新的 Expectation#
2.
為 Expectation 輸入名稱(例如:"Fixed Pet Response")
3.
將 Conditions(條件)部分留空(無條件 = 始終匹配)
4.
在 Response(回應)部分,輸入您想要返回的 JSON 資料:
{
"id": "pet_123",
"name": "Luna",
"species": "DOG",
"breed": "Golden Retriever",
"ageMonths": 24,
"status": "AVAILABLE",
"adoptionFee": 150.00
}
步驟 3:使用 Mock URL#
1.
複製為此 Expectation 提供的 Mock URL
4. 建立條件式 Mock Expectations#
Mock Expectations 的真正威力在於 條件回應——根據請求參數返回不同資料。範例:針對不同寵物 ID 的不同回應#
讓我們建立 Expectations,根據 id 路徑參數返回不同的寵物:步驟 1:為 ID "pet_123" 建立 Expectation#
3.
Parameter Type:Path Parameter
{
"id": "pet_123",
"name": "Luna",
"species": "DOG",
"breed": "Golden Retriever",
"status": "AVAILABLE"
}
步驟 2:為 ID "pet_456" 建立 Expectation#
3.
Parameter Type:Path Parameter
{
"id": "pet_456",
"name": "Max",
"species": "CAT",
"breed": "Persian",
"status": "PENDING"
}
步驟 3:測試條件回應#
1.
使用帶有 id=pet_123 的 Mock URL → 返回 Luna 的資料
2.
使用帶有 id=pet_456 的 Mock URL → 返回 Max 的資料
3.
使用帶有任何其他 ID 的 Mock URL → 回退到 Smart Mock(如果沒有條件匹配)
匹配如何運作#
Mock Expectations 從 上到下 檢查
如果 沒有條件匹配,Apidog 回退到 Smart Mock 或回應範例
5. 支援的條件類型#
查詢參數 (Query parameters):?status=AVAILABLE
路徑參數 (Path parameters):/pets/{id} 其中 id=pet_123
標頭參數 (Header parameters):自訂標頭如 X-User-Id
Body 參數:JSON Body 欄位(僅限 JSON)
範例:建立 一個 Expectation,根據查詢參數返回不同回應:條件:查詢參數 status 等於 "AVAILABLE"
6. 建立動態 Mock Expectations#
您還可以使用 Faker.js 和 Nunjucks 範本建立生成動態資料的 Expectations。範例:生成寵物列表#
讓我們建立一個 Expectation 來生成動態寵物列表:{
"pets": [
{% for i in range(0, 5) %}
{% if i>0 %},{% endif %}
{
"id": "pet_{{i}}",
"name": "{{$person.firstName}}",
"species": "{{$helpers.arrayElement(['DOG','CAT'])}}",
"ageMonths": {{$number.int(min=1,max=120)}}
}
{% endfor %}
],
"total": 5
}
每個都有唯一的 ID(pet_0、pet_1 等)
範本語法#
{{$...}} → Faker.js 表達式用於隨機資料
{% for ... %} → Nunjucks 迴圈
{% if ... %} → Nunjucks 條件語句
7. 進階功能#
Mock Expectations 支援額外功能:自訂回應標頭#
1.
在 Expectation 中,前往 Headers 部分
2.
新增標頭如 X-Total-Count: 100 或 Authorization: Bearer token123
HTTP 狀態碼#
1.
在 Expectation 中,點擊 "More"
2.
將 HTTP Status Code 設定為 404、500 等(預設為 200)
回應延遲#
啟用/停用 Expectations#
您可以針對不同環境(本地 Mock、雲端 Mock)開啟/關閉 Expectations,而無需刪除它們。
8. 關鍵重點#
Mock Expectations 給您對 Mock 回應的完全控制權
條件 Expectations 根據請求參數返回不同資料
動態 Expectations 使用範本生成可變資料
最高優先級:Mock Expectations 覆蓋 Smart Mock
多重條件:您可以組合查詢、路徑、標 頭和 Body 參數
Mock Expectations 提供了建立用於測試和開發的複雜 Mock 場景的靈活性。在下一篇文章中,我們將學習 Cloud Mock——如何在雲端部署 Mock 伺服器以供團隊範圍存取。 Modified at 2025-12-29 09:35:19