Mock是什麼?
我給你描述一下這幾個場景,你看看是不是熟悉的呢?
測試一個業務子產品,這個業務子產品中有幾個接口對接到了第三方,因為第三方延期傳遞,導緻項目延期,我又背鍋了![]()
接口抓包分析與mock 我想測試前端頁面字型是不是有做相容性處理,需要改相關字段的資料庫,但是我又沒有修改資料庫的權限,我好愁呀![]()
接口抓包分析與mock 上司讓我測試部署在某個機器上的軟體,可是。。。機器都沒有部署好,沒辦法測試呀![]()
接口抓包分析與mock 我測試的子產品嚴重和其他子產品有耦合,其他子產品還沒開發完成,我隻能幹等,導緻最後測試延期了…績效又打C了![]()
接口抓包分析與mock
這些都是我們在平時測試過程中,經常碰到的阻塞測試進度的問題,那有什麼技術手段,可以解決這些問題,提升我們的測試效率呢?
先不要着急知道答案,大家可以看一下上面的這四個過程,其實都是我們的被測子產品在向某一個依賴環境(第三方服務、後端接口、硬體裝置、其他服務)發送請求的過程中,依賴環境出現了問題,導緻影響我們的測試效率。
那如果我們把這個“拖後腿”的依賴環境直接替換,改成我們自己的一個服務接口,我們想讓它傳回什麼就傳回什麼,測試起來,是不是就輕松多了?
那上面的這個場景,其實所使用的,就是我們接下來要教給大家的Mock技術。
如何使用Mock技術?
Mock的實作有多種方式,可以通過mitmproxy+python 實作深度定制的Mock,也可以通過fiddler或Charles這種比較簡單的工具實作一些基礎的Mock。
首先,我們先來看如何通過Charles實作Mock。在實作之前,先簡單介紹一下Charles這個工具。Charles本身是一個很強大的代理工具, Charles 主要的功能包括:
- 支援SSL代理。可以抓取分析https的請求。
- 支援流量控制。可以模拟慢速網絡以及等待時間(latency)較長的請求。
- 支援重發網絡請求,友善後端調試。
- 支援修改網絡請求參數。
- 支援網絡請求的截獲并動态修改。
- 可以自動将json或xml資料格式化,友善檢視。
當然了,本文的重點是在講Mock技術,那接下來就看一下,Charles是如何實作Mock的吧。
注意: 以下操作預設已經安裝 Charles 并且設定好信任證書,可以成功代理。
通過Mock技術修改百度頁面的效果
1.先儲存接口傳回資料,右鍵單擊某接口->點選 SaveResponse ->檔案字尾寫上 .html
image1080×570 250 KB
1080×570 220 KB
image1080×570 210 KB
2.對本地的 html 進行修改,将“百度一下”改為“霍格沃茲”
(1)使用記事本打開
1080×560 269 KB
(2)使用替換功能
(3)将“百度一下”替換成“”霍格沃茲
1080×557 274 KB
3.設定 Charles 進行 map local,右鍵點選 Map Local->進入 Edit Mapping ->點選 choose ->選擇修改後的 html->點選 OK
1080×606 427 KB
1080×570 215 KB
1080×570 213 KB
4.此時再次請求百度,則可以看到“百度一下”變為了“霍格沃茲”
1080×570 94.9 KB
image1080×511 159 KB
通過Mock技術修改股票的展示效果
上面這個案例是 Mock 技術相對比較簡單的一個應用場景,那 Mock 技術是否可以在App應用上取得同樣的效果呢?比如下圖,我們要去測試雪球股票界面的清單展示顔色是否會跟随股價的漲跌停進行變化。
image827×1067 136 KB
可能到這裡,很多同學說,改資料庫就可以實作了呀,但是改資料庫有可能存在兩個問題:
1、不是所有的測試都有資料庫的修改權限。
2、有一些資料資訊是直接從第三方接口擷取的,測試也不可能有改第三方服務資料庫的權限。
其實要實作上面這個測試需求是非常簡單的,隻要善用Mock工具,了解Mock的實作與配置原理,就能夠輕松完成雪球股票界面的清單展示顔色是否會跟随股價的漲跌停進行變化,進而提升測試效率。