[騰訊 TMQ] 零基礎學習 Fiddler 抓包改包


本文轉載於https://testerhome.com/topics/7159

 

一、Fiddler
1.1.簡介
Fiddler是一款HTTP協議調試代理工具,它能夠抓取記錄本機所有HTTP(S)請求,通過設置斷點等方法我們可以任意修改進出Fiddler的數據(cookie,html,js,css)完成測試。其原理如下圖,我們僅需要修改Proxy中收到的數據就可以模擬客戶端和服務器的交互,完成一系列Mock測試。

 

 

關於Fiddler的安裝、配置方法KM上教程很多,這里就不再介紹。
1.2.抓包
如果需要抓取本機請求,只需要啟動程序並確保左下角為Capturing狀態即可

 

 

 

如果需要抓取移動端請求,則需要在移動終端上指定代理服務器為Fiddler所在主機IP(需要處於同一網絡),端口默認8888

 

 

 

Fiddler配置

 

 

 

Android中網絡配置
如果需要抓取HTTPS請求,需要在Fiddler中勾選菜單欄Tools選項

 

 

 

勾選如下選項:

 

 

 

導出證書並安裝

 

 

 

移動終端可以在瀏覽器中訪問127.0.0.1:8888來安裝證書。

如果不安裝證書的話只能抓取HTTP請求。

1.3.修改數據
Fiddler提供修改數據的方法有很多,常用的如下AutomaticBreakpoint命令行設置斷點

AutoResponsder

FiddlerScript (Customize Rules)

后面將在實例中為大家介紹各個方法的具體使用方法。

二、測試實例

2.1. 需求介紹
如圖所示,App中的一個頁面向用戶展示天氣信息,具體規則如下:

 

 

 

拉取時機:進入頁面后刷新天氣信息數據源: Yahoo接口顯示數據:溫度信息、天氣icon、出行提示、風速、能見度……

從測試角度看這個功能的測試難度不大,問題是如何快速的將全部天氣信息匹配的icon和出行提示驗證完畢。

2.2.測試前分析
通過分析接口和客戶端代碼了解到,客戶端向服務器請求指定城市天氣信息,在服務器返回的天氣信息中各類天氣狀況由code值表示(對應關系如圖1-1),數值對應的天氣圖標如圖1-2.

 

 

 

圖1-1

 

 

 

圖1-2因此在測試中我們只需要讓客戶端接收到指定code值的天氣數據就可以完成全部驗證,所以先用Fiddler抓包看下接口的返回數據。

方法如前文:首先PC上開啟Fiddler,其次在手機中配置代理,接下來我們還要在手機瀏覽器中訪問127.0.0.1:8888來安裝證書(本例中接口為HTTPS請求),最后客戶端觸發下請求就OK了。

 

 

 

可以看出,紅框內圈出的這一部分就是我們需要修改的數據啦。下面我們就采用各種手段來Mock吧。

2.3.修改數據

AutomaticBreakpoint

如果在工作中需要對某一個請求進行操作,最簡單的方法莫過於使用Fiddler的這個功能

 

 

默認情況下狀態為Disabled,根據需要我們可以選擇開啟不同的斷點

Before Requests:向服務器發起請求前打中斷,用以修改請求內的數據。

After Responses: 在服務器返回數據后中斷,用以修改響應數據。

我們的用例中需要修改客戶端收到的數據,因此勾選After Respnses即可。

注意:使用此功能需要正確使用Filter,否則Fiddler抓到的所有請求的會發生中斷。

 

 

 

所有的設置都打開后就可以進行測試了,在Fiddler抓到返回數據后發生中斷時我們手動將所有天氣信息(code值)更改為龍卷風

 

 

 

修改完畢后點擊Run to Completion 向客戶端返回數據。接下來就是檢查結果了。

 

 

 

結果符合預期,頁面中的所有天氣icon均為龍卷風通標。

以上便是自動打斷點的使用方法,唯一不足的地方是當你需要查看其它請求的時候,已配置的Filter可能導致它們無法展示在Fiddler中,不過沒關系,看看下面這種方法。

命令行設置斷點

 

 

 

為了方便用戶使用,Fiddler還提供了一個命令行接口,通過一系列內置命令可以大大的提高使用效率,這里我們只關注斷點相關的幾個常用命令,其他的內容可以通過help查詢。

 

 

 

本例中我們關閉Filter並使用bpafter進行中斷

 

 

 

鍵入斷點后進入天氣也觸發天氣信息拉取

 

 

 

這樣一條熟悉的中斷請求就出現在我們面前了,后面的操作跟之前一樣,修改數據返回即可。

注:清除斷點輸入斷點命令符不接參數即可,如:bpafter對於熟悉Fiddler的同學這種方法更靈活,可以快速的對需要監控的數據打點操作。

AutoResponsder
AutoResponsder這個功能基本原理就是替換線上文檔,例如一個js/css請求,我們可以設置規則將返回的文件替換成本地文件。使用方法也很是簡單,只需要在AutoResponder插件內添加規則即可。

 

 

 

在我們這個測試用例中,只需要創建規則匹配指定字符串,然后將修改好的響應文件添加進去,同時勾選上方三個復選框即可。一切搞定之后,當客戶端發起請求后Fiddler會將本地構造的文件(如圖)作為response返回給客戶端完成測試

 

 

 

這種方法操作簡單,一勞永逸,對於數據量改動比較大的場景較為適用。

FiddlerScript(Customize Rules)
前面的方法對於Mock數據來講盡管夠用,但總感覺有所些欠缺:人工介入太多,不能自動替換數據也無法通過數據驅動來進行測試。幸好,Fiddler提供了這樣一個FiddlerScript插件,通過它可以編輯腳本文件實現自定義規則的實現。

FiddlerScript使用JScript語言(不是JS)需要單獨安裝后才可以使用

JScript:

http://doc.51windows.net/jscript5/?url=/jscript5/dir.htm

安裝:

http://www.telerik.com/download/fiddler/fiddlerscript-editor

安裝完畢后重啟點擊【Fiddler Script】tab即可

 

 

 

可以看到,腳本中已經預先設置好了這些接口,我們只需要在其中定義自己需要的規則就可以了。

第一種方法 
我們可以向下面這樣將直接替換數據中的字符串來進行測試

 

 

 

再次發送請求后收到的數據將自動修改(之前的 code=”23” 變更為code=”1” test=”23”)

 

 

 

第二種方法 
也可以向下面這樣,當收到服務器響應時彈出提示框動手動輸入數據

 

 

 

 

 

 

第三種方法
當然最建議的一種方式還是搞成數據驅動:

① 創建一個txt文件按行存儲測試用例

 

 

 

② 腳本里讀取文件信息,此處的getCurrentTestCase方法是自己實現的,功能就是計算出第一個未標注“done”的數據作為當前需要替換的數據,並在結束時做上標記。這樣一來,系統中所有的請求信息將按照預先設計好的順序Mock

 

 

 

③ 測試同學按照預先設計好的用例檢查結果就可以了。

這是一個很小的例子,但足以說明它強大的擴展性。對於測試工作而言FiddlerScript更像是一種粘合劑,它可以把手機、測試數據、執行腳本等測試中參與的一切粘合在一起,讓測試更便捷,讓自動化測試更強大。

三、小結

Fiddler除以上介紹的這些Mock數據的功能外還有很多其他用途,如域名的重定向、API的測試,這里就不一一列舉。但根據我們以往的經驗,如果能結合我們在其他領域的研究和探索,肯定還能有更深更廣的應用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM