工具連結:
https://github.com/gstroup/apimocker
背景:
QA在内網部署伺服器環境,但系統涉及服務太多,無法部署所有服務,并且ABTest(Maestro)服務使用Google OAuth做授權認證,測試環境沒有域名,無法搭建實際的Maestro服務。在後端(one-eye)服務的代碼中,每次對Maestro服務的請求均傳回特定的json字元串,是以這種情況非常适合簡單搭建一個mock server來模拟API,繞過真實的Maestro服務。
追蹤one-eye代碼,發現所有對maestro的請求都是根據call_maestro_placements_api調用placements接口,是以,我們隻要修改配置并mock一個http://<server_ip>:7878/placements接口并傳回自己想要的資料即可。
# maestro_service.rb
def call_maestro_placements_api(query)
RestClient::Request.execute(method: :get, url: "#{OneEye::MAESTRO_API_URL}/placements#{URI.encode(query)}", headers: headers, timeout: self::TIMEOUT)
end
# 配置檔案one-eye/config/env_config.rb
MAESTRO_API_URL = 'http://<server_ip>:7878'
MAESTRO_TESTS_ENABLED = true
使用:
1.安裝apimocker服務
sudo npm install -g apimocker
2.啟動apimocker
# 指令格式
# apimocker \[-c, --config <path>\] \[-q, --quiet\] \[-p <port>\] \[-f, --proxy <proxyURL>\] \[-i, --intercept <proxyIntercept>\]
#使用預設配置啟動
cd /
find ./ -name apimocker # 根路徑下查找apimocker所在安裝路徑
cd /usr/lib/node_modules/apimocker # 進入apimocker安裝路徑
apimocker
若報錯,請檢查安裝包所在的配置檔案json格式是否正确。通常apimocker安裝在/usr/lib/node_modules/apimocker目錄下。
3.配置目标API
配置apimocker/config.json檔案,webServices節點增加以下内容
"placements":{
"mockFile": "placements.json",
"verbs": [
"get"
]
},
配置apimocker/samplemocks/placements.json檔案為目标傳回内容
{"admin-member-invite":"enabled",
"activity-studio":"enabled",
"enterprise-invite-members":"enabled",
"opengroup":"enabled",
"automatically-record-zoom-meeting":"ready_state",
"whats-new-announcements":"ready_state",
"print-quiz-submissions":"enabled",
"new-assignment-grading":"enabled",
"new-assignment-submission":"enabled"}
4.重新啟動apimocker服務并驗證API
執行apimocker後,浏覽器通路http://<server_ip>:7878/placements,如果頁面能夠傳回placements.json的内容,說明API運作ok
5.更新後端配置生效
修改前文中one-eye的配置檔案one-eye/config/env_config.rb
MAESTRO_API_URL = 'http://<server_ip>:7878'
MAESTRO_TESTS_ENABLED = true
重新開機one-eye服務,使配置生效