1.應用場景:
1.1 測試環境中,可能存在部分依賴外部系統的http接口,因為外部系統未部署或服務不可用等其他原因,導致接口無法正常響應(特別是qa1環境);
而平時的測試主要還是以界面上的功能測試為主,所以需要自行mock接口。這里可以利用charles抓包工具來實現。
2.環境准備:
2.1 下載charles,並且配置好代理
這一步比較簡單,經常使用 抓包工具的應該都熟悉,可以參考以下文章
https://www.jianshu.com/p/187afc1049ca
3.實踐步驟:
3.1 charles 提供了 map local 和 map remote 兩種方式來實現mock(PS : 個人覺得比對某一接口打斷點,然后修改返回參數 這種騷操作好用)
對於 map local 來說,其實是將構造好的返回結果,以json文件的形式存在本地,然后charles會自行構造響應頭,返回數據。這種方式實現成本比較低,但是可能靈活性不是很高;
而 map remote,則是需要有一個可用的mock server,將響應頭和返回結果都構造好,然后直接返回。這種方式,如果自己寫代碼實現,成本會比較高,但是靈活性也相對較高,能適用更多場景。
3.2 下面以具體例子,演示一下 map local 的使用:
打開charles,讓接口請求都中轉到charles,先右鍵接口,在彈窗中按以下步驟配置:

PS:這一步需要先將構造好的接口返回參數,以json文件格式保存;(一個小技巧:可以在其他接口能正常響應的環境,復制一份正常的響應數據,然后做對應的修改)
例子

這一步配置完之后,其實已經成功了一半;
重新回到界面,點擊對應的功能,觸發接口請求,大概率會看到接口還是報錯的,但是charles上已經是正常返回數據的了;
打開F12 的console界面,可以看到報錯提示,這里出現的問題其實是跨域問題

跨域問題的解決:
點擊Charles的Tools菜單,點擊 Rewrite Settings ,在彈窗中配置重寫規則,針對指定的接口,重寫響應頭

配置完成之后,點擊OK,再重新回到界面觸發請求,會發現接口已經正常返回Mock的數據了
到這里,利用map local 做接口 mock 就已經成功了,可以解決大部分使用場景,缺點在於返回結果是放在本地的文件中,可能需要每次都去修改一下;
3.3 使用map remote
配置的方式和map local差不多,不進一步展開。使用這個功能的關鍵點在於,需要有一個可用的mock server,並且能自行構造響應頭,以解決跨域問題;
如果使用map remote的話,個人更傾向於自己搭一個python web 應用來作為 mock server,可以靈活定制響應結果。