mock以及特殊場景下對mock資料的處理

myLittleGarden發表於2017-10-25

一、為什麼要mock

工作中遇到以下問題,我們可以使用mock解決:

  1. 無法控制第三方系統某介面的返回,返回的資料不滿足要求
  2. 某依賴系統還未開發完成,就需要對被測系統進行測試
  3. 有些系統不支援重複請求,或有訪問訪問頻次限制。如不可重複支付,獲取敏感資訊的介面訪問頻次不可高於xx等
  4. 其他情況

 

二、mock的實現原理

一般測試場景中,都是對介面的返回資料進行mock。以http協議為例,

  1. 最簡單的mock,可在mock伺服器上儲存一份mock資料,並給此mock資料生成對應的url。將要訪問的第三方url,以mock url代替,這樣即可滿足最基本的mock需求。可在此處瞭解到更多關於此種mock的資訊。
  2. 使用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出去。

相關文章