本文轉載於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的測試,這里就不一一列舉。但根據我們以往的經驗,如果能結合我們在其他領域的研究和探索,肯定還能有更深更廣的應用。