點選上方的終端研發部,右上角選擇“設為星标”
每日早9點半,技術文章準時送上
公衆号背景回複“學習”,擷取作者獨家秘制精品資料
往期文章
記五月的一個Android面試經
漫畫:App 防止 Fiddler 抓包小技巧!
混合開發架構的對比,Flutter更勝一籌?
Android 架構元件 - 讓天下沒有難做的 App
從Flutter,Weex,RN 幾大跨平台,論虛拟 DOM?
APP 熱修複都懂了,你會 SDK 熱修複嗎?最全方案在這裡!
來源:初入前端的小菜鳥
原文連結:https://www.jianshu.com/p/63056120fab8
一、為什麼要mock
工作中遇到以下問題,我們可以使用mock解決:
1、無法控制第三方系統某接口的傳回,傳回的資料不滿足要求
2、某依賴系統還未開發完成,就需要對被測系統進行測試
3、有些系統不支援重複請求,或有通路通路頻次限制。如不可重複支付,擷取敏感資訊的接口通路頻次不可高于xx等
二、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的好處
1. 團隊可以并行工作
有了Mock,前後端人員隻需要定義好接口文檔就可以開始并行工作,互不影響,隻在最後的聯調階段往來密切;後端與後端之間如果有接口耦合,也同樣能被Mock解決;測試過程中如果遇到依賴接口沒有準備好,同樣可以借助Mock;不會出現一個團隊等待另一個團隊的情況。這樣的話,開發自測階段就可以及早開展,進而發現缺陷的時機也提前了,有利于整個産品品質以及進度的保證。
2. 開啟TDD模式,即測試驅動開發
單元測試是TDD實作的基石,而TDD經常會碰到協同子產品尚未開發完成的情況,但是有了mock,這些一切都不是問題。當接口定義好後,測試人員就可以建立一個Mock,把接口添加到自動化測試環境,提前建立測試。
3. 可以模拟那些無法通路的資源
比如說,你需要調用一個“牆”外的資源來友善自己調試,就可以自己Mock一個。
4. 隔離系統
假如我們需要調用一個post請求,為了獲得某個響應,來看目前系統是否能正确處理傳回的“響應”,但是這個post請求會造成資料庫中資料的污染,那麼就可以充分利用Mock,構造一個虛拟的post請求,我們給他指定傳回就好了
5. 可以用來示範
假如我們需要建立一個示範程式,并且做了簡單的UI,那麼在完全沒有開發後端服務的情況下,也可以進行示範。說到示範了,假如你已經做好了一個系統,并且需要給客戶進行示範,但是裡面有些真實資料并不想讓使用者看到,那麼同樣,你可以用Mock接口把這些敏感資訊接口全部替換。
6. 測試覆寫度
假如有一個接口,有100個不同類型的傳回,我們需要測試它在不同傳回下,系統是否能夠正常響應,但是有些傳回在正常情況下基本不會發生,難道你要千方百計地給系統做各種手腳讓他傳回以便測試嗎?比如,我們需要測試在當接口發生500錯誤的時候,app是否崩潰,别告訴我你一定要給服務端代碼做些手腳讓他傳回500 。。。而使用mock,這一切就都好辦了,想要什麼傳回就模拟什麼傳回,媽媽再也不用擔心我的測試覆寫度了
如何mock資料
1.安裝Node.js ,通過http-server開啟本地伺服器
擷取端口http://localhost:8000,然後通過在檔案夾建立html和json檔案來測試資料
示例:
我們打開浏覽器的控制台就能看到輸出的資料
2.通過線上來mock資料
- 使用 https://easy-mock.com
- 使用 http://rapapi.org/org/index.do
以第一種為例,進入網站後建立個人項目
進入項目後通過建立接口
選擇接口類型
進行建立
進行檢視
控制台結果
四、特殊場景下對mock資料的處理
有些場景對于mock來說較為特殊。比如,某接口對資料有加解密操作,這使得mock的資料無法直覺了解,無法有效率地調整mock資料的内容以完成測試目标。另外,有些rpc協定不具通用性,通用的mock平台來支援此類協定成本太高。是以,我們的需要對我們的方法做一些變通。
1. 對于接口加解密資料,我們開發一個函數,來支援mock資料的加解密。手工測試時,該函數可表現為mock平台的插件;接口自動化時可表現為處理mock資料的函數。也可以采用方法
2. 直接将這個函數的邏輯整體mock掉。開發某功能:當程式運作到指定的方法時,不繼續運作函數體,而是發送一個http請求到mock平台,将mock資料return出去。
閱讀更多
Flutter + MVP +Kotlin 實戰!
一位Android大牛的BAT面試心得與經驗總結
混合開發架構的對比,Flutter更勝一籌?
漫畫:解密IP 、TCP和DNS與HTTP 的親密關系
什麼樣的履歷,面試官一看就知道多少水份!!!
相信自己,沒有做不到的,隻有想不到的
在這裡獲得的不僅僅是技術!
喜歡就給個“在看”