一、為什么要mock
工作中遇到以下問題,我們可以使用mock解決:
- 無法控制第三方系統某接口的返回,返回的數據不滿足要求
- 某依賴系統還未開發完成,就需要對被測系統進行測試
- 有些系統不支持重復請求,或有訪問訪問頻次限制。如不可重復支付,獲取敏感信息的接口訪問頻次不可高於xx等
- 其他情況
二、mock的實現原理
一般測試場景中,都是對接口的返回數據進行mock。以http協議為例,
- 最簡單的mock,可在mock服務器上保存一份mock數據,並給此mock數據生成對應的url。將要訪問的第三方url,以mock url代替,這樣即可滿足最基本的mock需求。可在此處了解到更多關於此種mock的信息。
- 使用proxy實現mock。wiremock/anymock等開源工具可提供此實現。好處在於:
-
- 可查看請求及回應,方便獲取mock數據的原型
- 匹配到規則的請求會返回mock數據,未匹配到的請求訪問原服務
- 無需修改服務配置,無需重啟服務
最近有接觸到一些函數級別的mock。比如,mockito這個工具,即可實現不發出請求,即可獲得mock數據的功能。
三、特殊場景下對mock數據的處理
有些場景對於mock來說較為特殊。比如,某接口對數據有加解密操作,這使得mock的數據無法直觀理解,無法有效率地調整mock數據的內容以完成測試目標。另外,有些rpc協議不具通用性,通用的mock平台來支持此類協議成本太高。所以,我們的需要對我們的方法做一些變通。
1. 對於接口加解密數據,我們開發一個函數,來支持mock數據的加解密。手工測試時,該函數可表現為mock平台的插件;接口自動化時可表現為處理mock數據的函數。也可以采用方法2.
2. 直接將這個函數的邏輯整體mock掉。開發某功能:當程序運行到指定的方法時,不繼續運行函數體,而是發送一個http請求到mock平台,將mock數據return出去。