本文為霍格沃茲測試學院優秀學員課程學習筆記
作為一名測試工程師,抓包是最常用的分析問題手段。Charles 則是最常用的代理工具,而且對於 Windows 和 Mac 也非常友好。之所以這麼受歡迎還有以下幾個原因:
- 代理功能
- HTTP/HTTPS、Socks5
- 限速模擬
- 斷點調試
- 轉發
- 映射:讓發往a網站的請求返回b網站的內容
- 重寫:自動把請求和內容篡改掉
- 工具:拼裝請求、重放請求、重讀請求
Charles 代理工具的每個知識點都值得認真研究。
遠程服務 Mock(Map Remote)
作為測試工程師可能需要各種"天馬行空"的數據,當接口返回數據不能滿足你需要時,怎麼辦?當想在真實環境中測試 H5,而新版本還未上線,怎麼辦?
在測試過程中,對於某些不容易構造或者不容易獲取的對象,我們需要”自己動手,豐衣足食“;攔截請求、篡改請求、轉發請求——Mock 助你想你所想,要你所要;而實現Mock 有很多方法,這裡介紹以 Charles 工具實現的方法。這裡以訪問百度首頁,然後將請求轉發至 TesterHome 首頁為例。
備註:以下操作默認已經安裝 Charles 並且設置好信任證書,可以成功代理。
1)在 Charles-Tools 中選中 Map Remote
2)打開後勾選 Enable Map Remout,再點擊 Add
3)設置映射自(Map From)的路徑、協議(不選默認 HTTP/HTTPS 都支持)和映射至(Map To)的路徑、協議;完成後點擊 OK
4)這個時候我們在瀏覽器中輸入 www.baidu.com 進行訪問,發現實際訪問的是 TesterHome,從抓包也可以看出來顯示為
Mapped from remote URL: https://www.baidu.com/
Rewriting traffic with Breakpoints
利用 Breakpoints,可以對指定的 HTTP 或 HTTPS 請求在到達客戶端之前進行攔截暫停,暫停後可以對原數據進行修改,例如對返回值進行修改,修改完成後再將請求發送至客戶端。
有時候我們對界面進行檢查,可能會涉及字段長度、數字位數、不同數值對應不同顏色或標識圖片的展示等,如果純依靠後端來構造複雜的數據可能沒有那麼方便,也可能會有大量髒數據產生,並且我們測試的目的只是為了驗證前端的展示,所以這個時候可以利用 Charles 的 rewrite 功能來完成數據的 mock;
1)在需要攔截的請求上右擊選中“ Breakpoints ”
2)在 Proxy->Breakpoint Settings 中勾選 Enable Breakpoints,然後雙擊請求彈出 Edit Breakpoint 框,選中 Response 後 OK 。
3)這個時候我們訪問 TesterHome 首頁,會發現者請求被攔截了,網站也一直處於加載等待響應階段。
4)選中 Edit Response,修改原標題欄中"社區"字段為" Charles 社區",點擊 Execute。
5)查看 TesterHome 首頁,發現原標題字段已被成功修改。
Rewriting traffic with the Rewrite tool
Breakpoint 快速的實現接口攔截修改,但是如果每次都想要以相同的方式進行攔截修改就需要每次都進行手動觸發,這樣就很不方便,影響效率;因此我們可以使用 Tools 中的 Rewrite 功能來完成提前定義好接口數據的篡改規則,這樣每次訪問的時候就會自動攔截修改發送
1)Tools 中選中 Rewrite,然後設置需要攔截的請 URL
2)再選擇 Add 一個重寫規則,將返回值中的“ TTF榜單 ”替換為“ 11111榜單 ”
3)重新訪問 TesterHome 首頁
上述 Rewrite 功能,不僅可以對 Response 進行修改,還可以對 Request 進行修改,只是較為常用的就是對 Response 進行修改。
上述例子中都是以 Web 端做了演示,移動端的用法和此原理一致,要注意的是 Android6.0 以上的版本默認不支持代理抓包了,需要讓開發在 App 中添加兩個配置項。
閱讀更多 測吧測試開發 的文章