一、什么是Mock服務/工具
在測試過程中,對於一些不容易構造/獲取的對象,創建一個 Mock 對象來模擬對象的服務/工具。比如:在測試過程中,手工構造的數據不能返回我想要的結果,從而導致程序的后續處理走不到我們期待的分支,最終造成測試的不充分。當然,Mock 服務除了有這種能力以外,還有其他優點:
解除依賴
隨着現在軟件系統架構越來越復雜,一個全流程的測試通常都要走好幾個系統/模塊,如果各個系統/模塊的開發進度不一致,提前開發好的系統/模塊要進行測試,這時我們可以依賴 Mock 服務/工具來對已經開發好的系統/模塊進行測試。
充分測試
就像上面提到的,在手工測試無法構造出我們想要的數據返回時,Mock 服務能給我們返回任何想要的返回數據,這樣有利於我們對程序進行充分的測試。
穩定性保障
在做性能測試時,第三方系統如果不能接收大量請求,那么性能測試將無法進行,這時我們可以使用 Mock 服務模擬第三方系統的返回進行性能測試,同時 Mock 服務返回的數據也會比第三方系統更加穩定可靠,更加有利於我們定位自己系統的性能瓶頸。
自動化測試的支持
如果我們發現,自動化測試的 Case 老是因為環境的不穩定導致失敗,這時我們可以使用 Mock服務模擬目標服務的數據返回從而使自動化 Case 能夠順利的運行,保證自動化測試的成功率。
二、Mock服務的優缺點
優點
- 由於其他系統模塊出錯引起本模塊的測試錯誤,我們可以采用 Mock隔離,避免干預;
- 開發過程中,只要交互雙方定義好接口,團隊之間可以並行工作,進程互不影響;
- 依賴系統無法響應,或者響應異常時,可以用 Mock Object代替,快速反應,不會影響測試進度;
- 提前接入測試,提高測試效率,當接口定義好后,測試人員就可以創建 Mock,把接口添加到自動化測試環境,提前開始測試,起到測試驅動開發效果;
- 可以有效的增加覆蓋,接口涉及入參,或者業務邏輯復雜的情況,某些場景無法通過正常手段進行操作,可以通過 Mock 虛擬模擬;
缺點
測試過程中如果大量使用 Mock,測試的場景失去了真實性,則會導致很多場景沒有得到正確的測試,所以不管 Mock 服務功能有多強大,在真實環境下必要的聯調測試是必不可少的。
三、Mock服務實現能力
- mock所有http請求
- 可基於url和ip進行匹配
- 返回數據固定
- 可實現注入 隨機id,時間戳等數據的替換
- 性能要高
- 返回數據模板化
- 要實現可以遷移
- 追加: 透傳
四、Mock服務的基本設計思路
- 第一步:將被測服務請求的第三方服務的地址改為Mock服務的地址;
- 第二步:人工請求Mock服務,添加Mock數據;
- 第三步:正常請求被測服務;
- 第四步:被測服務請求Mock服務,Mock服務返回數據給被測服務;
五、Mock服務的模塊設計
gateway
- 負責接收數據的注冊,把注冊的數據存入數據庫;
- 負責接收被測服務發過來的請求,並從數據庫中查出匹配的數據返回給被測服務
core
- 核心的邏輯處理,包括注冊數據存儲邏輯以及返回給被測服務的數據的查詢與處理
dao
- 負責數據庫層的處理
commons
- 枚舉、工具類、POJO類、異常體系、常量等的定義
sdk
- 接口自動化需要用到的一個模塊
- 編寫接口自動化用例時,向Mock服務發送注冊數據,同樣是發送給gateway模塊接收
- 單獨打包給接口自動化框架依賴
manager
- 通過頁面錄入注冊數據,和gateway模塊進行關聯
六、代碼實現
地址: