MockServer 模擬伺服器 整合測試

MockServer入門:輕鬆整合前後端接口

毛絜妤 Clara Mao 2020/04/27 12:48:55
4612

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: programmingClient 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 (IDEIntellij 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 bodyjson文字

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

 

 

 

 

 

 

 

毛絜妤 Clara Mao