MockServer入門:輕鬆整合前後端接口
MockServer輕鬆整合前後端接口
INTROUDCTION
每當我們在開發新系統時都會需要整合前後端並進行無數次的測試, 但若是遇到API尚未開發完成、需要手動的大量壓力測試, 或是無法由client端主動產生的例外請求等狀況, 這時就需要一個厲害的模擬伺服器MockServer來解決囉!
# MockServer allows you to mock any server or service via HTTP or HTTPS, such as a REST or RPC (Remote Procedure Call) service.
當MockServer接收到用戶端請求時, 執行的架構流程為:
1. find matching expectation and perform action
尋找與該期望匹配的結果並採取行動
2. if no matching expectation proxy request
若找不到相符的結果則由MockServer代理client端發送新的請求
3. if not a proxy request return 404
若還是無法回覆請求則回傳404錯誤訊息或例外處理
舉個輕鬆的例子說明:就像點餐機, 選擇你要的餐點(sending request), 由點餐機發送請求(proxy received request from client), 回傳給server端並開始製作指定的套餐(confirmed expectation and performing action), 訂單失敗或取消則發送匹配失敗請求例外處理(handling failure messages), 若以上皆成功就能獲得美味的麥香魚套餐囉(request successful)!
透過這樣模擬伺服器的方式, 即使同時再多個請求或無法預期的狀況發生, MockServer都能幫你自動匹配相對應的回傳, 觸發事先模擬好的行為, 也能有效避免原本真的伺服器被假測試資料攻擊等問題。
GETTING START
Let’s digging into coding! 開始動手實作吧!
The typical sequence for using MockServer is as follows:
0. Start MockServer 環境安裝
MockServer提供多元化的用法及服務, 常被運用且可直接寫入程式裡有:
§ Via a Maven Plugin: 添加於Maven依賴(注入</plugin>)
§ Using a Java API: programming於Client API端(注入</dependency>)
§ From the command line: 直接安裝於終端機
Using Java
Using maven plugin
§ As a Docker container: 能架設於任何可執行Docker的環境下
§ Using a Junit 4 or 5/Node.js(npm) module/Grunt plugin/Helm chart等等
1. Setup Expectations 設定期望值
添加好依賴後就能開始寫根據不同請求回傳該對應的response, 以下程式碼示範幾種較常用到的的Request Matchers :(IDE為Intellij IDEA)
l Match request by path/by regex path
l Match request by path exactly once in the next 60 seconds
l Match request by query parameter value regex
l Match request by headers
l Match request by body in utf16
l Match request by body with form submission
2. Run test Scenarios 模擬測試情境
Expectations設定好後, 就可以測試用戶端可能會發送的各種請求囉!測試環境也皆可架設於上述任何Container:
範例一 用PUT方法建立該回傳的expectation (當請求路徑為/some/path的時候)
(MockServer端)
java -jar <MockServer .jar檔的路徑位址> -serverPort <port> -logLevel <預設為INFO>
成功則顯示已啟動於自己設定的ports 例如: [1080,1081]
(Client端)
再另外開啟新的cmd視窗作為用戶端對server發送任何你想送出的請求
(MockServer端) 成功建立請求(自動生成一組id)
範例二 用Get方法發送請求, 成功後則回傳response body內json文字
(Client端)
(MockServer端)
範例三 請求需match所有param(id, name, price)才回傳response
(Client端)
(MockServer端)
還有很多種模擬請求可參考官方文件再測試喔, 這邊先示範幾個較為常用的
3. Verify Specific Requests 驗證例外請求
若要處理較複雜的request, 透過.verify多層次的驗證機制就能提高安全性問題
l 驗證重複請求
l 不接受請求
l 按照特定順序驗證請求(不限次數)
CONCLUSION
最後整理幾個MockServer重點功能:
1. Generate and return flexible responses
2. Forward request to the others directly
3. Execute callbacks with diverse functionality
4. Multiple intensive verifications
其實除了自己架設虛擬server端以外, Postman也有簡易版的設定Collection來處理用戶端的request, 歡迎有興趣的人再自行深入研究囉!
官方參考:https://www.mock-server.com
Swagger文件:https://app.swaggerhub.com/apis/jamesdbloom/mock-server-openapi/5.9.x