背景
最近APP上線了一個版本,但是上線后發(fā)現(xiàn)測試數(shù)據(jù)(應(yīng)該是接口返回的,但是寫死了)沒有刪除,導(dǎo)致線上出現(xiàn)嚴重的BUG。
問題
那么如何在開發(fā)中使用測試數(shù)據(jù)。通常情況下為了方便使用,我們會在代碼中直接創(chuàng)造一些假數(shù)據(jù)使用,方便快捷,但是這不僅污染了代碼(測試數(shù)據(jù)一大堆),而且有時候你正在改一個東西時被其他事情打斷了,回來后又忘了改掉測試數(shù)據(jù)就尷尬了。所以這是中不好的習慣。
解決辦法:
一、本地搭建測試服務(wù)器:
就是本地自己搭個服務(wù)器,然后把開發(fā)時需要攔截的網(wǎng)絡(luò)請求地址改為自己搭建的服務(wù)器地址,然后返回自己自定義的JSON數(shù)據(jù)。但這種方式也有三個缺點:
- 有一定門檻,雖然搭建服務(wù)器是很簡單的事,并不是所有人都會,也是需要一定的學習成本的。
- 還是要修改源碼中網(wǎng)絡(luò)請求的地址,這雖然已經(jīng)把源碼污染降到最低了,但畢竟還是有。
- 要想模擬不同的網(wǎng)絡(luò)狀態(tài),還需去修改服務(wù)器的代碼,不方便。
二、網(wǎng)絡(luò)代理
第二種就是利用現(xiàn)有的網(wǎng)絡(luò)代理軟件,直接攔截對應(yīng)的網(wǎng)絡(luò)請求,然后返回本地寫好的JSON數(shù)據(jù)。
- 不會污染代碼,代碼寫的就是線上的邏輯,接口地址不需要改變,也不需要寫測試數(shù)據(jù)。
- 攔截起來很方便,許多網(wǎng)絡(luò)代理軟件,都自帶攔截甚至改寫網(wǎng)絡(luò)請求的功能,所以啟動攔截功能很方便。
- 方便調(diào)試,網(wǎng)絡(luò)代理一般都有改變一個網(wǎng)絡(luò)請求狀態(tài)的功能,可以輕松實現(xiàn)返回網(wǎng)絡(luò)錯誤、網(wǎng)絡(luò)超時和延遲網(wǎng)絡(luò)請求等不同的網(wǎng)絡(luò)請求狀態(tài)的功能,非常方便。
下面介紹一下如何通過charles的map local功能實現(xiàn)接口請求攔截,然后返回自己生成的json數(shù)據(jù)。
map local設(shè)置流程
Charles配置:
1、Proxy -> Proxy Settings ,填入代理端口8888 ,并且勾選 “Enable transparent HTTP proxying"

iPhone設(shè)置:
- 首先保證iphone和你的mac在同一網(wǎng)段
- 獲取mac電腦的ip地址
- 進入手機設(shè)置 -> 無線局域網(wǎng) -> 選中連接的wifi -> 進入wifi詳情 -> 切換 ”HTTP代理“為手動 -> 輸入mac電腦對應(yīng)的ip地址和代理端口8888
- 連接之后,Charles會彈出提示框,點擊allow之后,手機請求網(wǎng)絡(luò)就會走代理(mac電腦)。
mac local配置
1、 Tools -> Map Local...

2、 勾選 ” Enable Map Local“

3、點擊 ”Add“添加要攔截的接口地址(可以直接把整個連接填入 Host選項,它自己會識別各個選項)。



4、填寫Local Path,這個是你本地json文件的路徑

5、點擊”O(jiān)K“添加完畢,啟動APP,當調(diào)用這個接口的時候,代理就會攔截接口請求,然后返回你本地的JSON文件中的json數(shù)據(jù)。
參考鏈接:
問題:
https抓包問題:
1、Charles: Proxy -> SSL Proxying Settings -> Enable SSL Proxying -> 添加你要攔截的Host

2、手機安裝HTTPS證書
通過電腦瀏覽器打開http://charlesproxy.com/getssl
下載對應(yīng)系統(tǒng)的證書,然后通過郵件發(fā)送給手機,手機下載安裝驗證。
3、證書信任
1、iOS低版本系統(tǒng),好像不需要證書信任也能攔截到https
2、iOS10.3真機抓包https,手機設(shè)置 -> 通用 -> 關(guān)于本地 ->底部證書信任設(shè)置 -> 打開charles證書信任 才能抓包。掛證書的API貌似抓不到包,只顯示請求錯誤,只有不掛證書的才能抓包。