閱讀本篇內(nèi)容之前,建議先對(duì)基礎(chǔ)熟悉下
本文內(nèi)容綱要如下
1、模擬限速操作
2、篡改數(shù)據(jù)
3、重定向功能
4、發(fā)送自定義請(qǐng)求,模擬小型接口測(cè)試
5、APP端抓包
一、限速
先補(bǔ)充下知識(shí):
網(wǎng)絡(luò)數(shù)據(jù)傳輸分為發(fā)送數(shù)據(jù)和接收數(shù)據(jù)兩部分。
上傳就是向外部發(fā)送數(shù)據(jù),下載為從外部接收數(shù)據(jù)。他們都受網(wǎng)絡(luò)帶寬和設(shè)備性能制約。 在日常網(wǎng)絡(luò)傳輸中大致1Mbps=1024/8Kb/s=128Kb/s(1/8)。例如上行的網(wǎng)絡(luò)帶寬為100Mbps,那么最大上傳速度就是12800Kb/s,也就是12.5Mb/s。
用戶(hù)申請(qǐng)的寬帶業(yè)務(wù)速率指技術(shù)上所能達(dá)到的最大理論速率值,用戶(hù)上網(wǎng)時(shí)還受到用戶(hù)電腦軟硬件的配置、所瀏覽網(wǎng)站的位置、對(duì)端網(wǎng)站帶寬等情況的影響,故用戶(hù)上網(wǎng)時(shí)的速率通常低于理論速率值。 理論上:2M(即2Mb/s)寬帶理論速率是:256KB/s(即2048Kb/s),實(shí)際速率大約為103--200KB/s;4M(即4Mb/s)的寬帶理論速率是:512KB/s,實(shí)際速率大約為200---440KB/s。以此類(lèi)推。
背景:進(jìn)行日常測(cè)試時(shí)通常網(wǎng)絡(luò)情況都比較好(內(nèi)網(wǎng)),所以有時(shí)會(huì)忽略在低速或網(wǎng)絡(luò)狀況不好的情況下系統(tǒng)頁(yè)面的表現(xiàn)(前端是怎么處理的)
手機(jī)可以用2G、3G、4G,也是一種方式,但這都是網(wǎng)絡(luò)模式,而Fiddler可以設(shè)置上傳和下載的延時(shí)時(shí)間,這種控制非常靈活,可以幫助我們模擬低速網(wǎng)絡(luò)情況下頁(yè)面、APP的顯示與交互情況,比如響應(yīng)時(shí)間過(guò)長(zhǎng)時(shí)是否有彈出網(wǎng)絡(luò)不好的提示、頁(yè)面crash以及顯示錯(cuò)亂、session是否一致等
設(shè)置限速時(shí)間
(1)打開(kāi) 【Rules---Customer Rules】,Ctrl+F搜索(m_SimulateModem),默認(rèn)發(fā)送數(shù)據(jù)是300毫秒,接收數(shù)據(jù)是150毫秒,根據(jù)實(shí)際情況限速后進(jìn)行保存(Ctrl+S)
PS:默認(rèn)是300和150,大致模擬出來(lái)的帶寬如下
上傳帶寬=(1*8/1000)/0.300≈0.053Mbps
下載帶寬=(1*8/1000)/0.150≈0.027Mbps
實(shí)際帶寬是在計(jì)算所得的基礎(chǔ)上乘2,也就是說(shuō)
上傳帶寬=((1*8/1000)/0.300)*2.0≈0.106Mbps
下載帶寬=((1*8/1000)/0.150)*2.0≈0.053Mbps
(2)啟用限速:Rules---Performance---Simulate Modem Speeds

演示:對(duì)于發(fā)送數(shù)據(jù)(uploaded)每KB延遲30000毫秒,接受數(shù)據(jù)(downloaded)每KB延遲30000毫秒
(3) 重啟
打開(kāi)瀏覽器,訪(fǎng)問(wèn)百度,搜索python,頁(yè)面加載非常慢,等全部加載完成時(shí)可以到Statistics查看時(shí)間

真實(shí)案例:
訂單詳情頁(yè)面,有個(gè)添加備注按鈕,在按鈕點(diǎn)擊時(shí)已經(jīng)做了控制,將按鈕置灰,避免用戶(hù)重復(fù)點(diǎn)擊,但最終忘記做低速測(cè)試了,導(dǎo)致線(xiàn)上出問(wèn)題了
通過(guò)排查是button未做防重復(fù)點(diǎn)擊導(dǎo)致低網(wǎng)速下插入多條記錄,這種情況需要前后端一起控制,前端設(shè)置變量,按鈕點(diǎn)擊后記錄狀態(tài)


PS:測(cè)試結(jié)束后記得取消限速
二、篡改數(shù)據(jù)
篡改分兩種:
一種是修改請(qǐng)求數(shù)據(jù),檢查接口的處理情況,這種適用于不方便直接調(diào)接口,其不關(guān)心頁(yè)面,只看接口處理是否正常,返回的數(shù)據(jù)對(duì)不對(duì)
比如 Harbor House官網(wǎng)注冊(cè)頁(yè)面 用戶(hù)名限制的字符長(zhǎng)度是2-20 ,把字符加到21以上,看效果,根據(jù)前端頁(yè)面的預(yù)期結(jié)果是提示用戶(hù)名超長(zhǎng)了,而實(shí)際結(jié)果是注冊(cè)成功了

于是去數(shù)據(jù)庫(kù)查了下表結(jié)構(gòu),發(fā)現(xiàn)用戶(hù)名字段的長(zhǎng)度是50,所以重新注冊(cè)下,字符超過(guò)50,看接口返回的信息,提示“信息輸入有誤”,OK,測(cè)試通過(guò),說(shuō)明接口在這塊做了保護(hù)

用剛注冊(cè)成功的用戶(hù)名進(jìn)行登錄,提示“賬號(hào)長(zhǎng)度只能在2-20位字符之間”,登錄失敗
(引申:這些不會(huì)生效的數(shù)據(jù),也會(huì)被稱(chēng)為臟數(shù)據(jù),不改掉會(huì)影響到后續(xù)性能)

在這里做個(gè)假設(shè):
仍然是上面的例子,頁(yè)面上注冊(cè)時(shí)提示沒(méi)成功,但實(shí)際數(shù)據(jù)庫(kù)中已經(jīng)保存數(shù)據(jù)了,這樣就算bug了,前端不應(yīng)該在用戶(hù)捕獲到超過(guò)長(zhǎng)度的字符時(shí)還去調(diào)用接口
理論上前后端對(duì)于輸入?yún)?shù)的限制應(yīng)該保持一致,但實(shí)際上數(shù)據(jù)庫(kù)字段長(zhǎng)度是要比前兩者多的,因?yàn)橐粲懈辉5目臻g作為優(yōu)化
再比如注冊(cè)頁(yè)面對(duì)用戶(hù)郵箱有進(jìn)行驗(yàn)證,F(xiàn)iddler中修改后查看服務(wù)端是否有驗(yàn)證,有興趣的朋友可以自己去嘗試下
修改頁(yè)面請(qǐng)求值
構(gòu)造請(qǐng)求數(shù)據(jù),突破表單的限制,可以隨意提交數(shù)據(jù),避免頁(yè)面JS和表單限制,從而影響相關(guān)調(diào)試(繞過(guò)前端)
1、設(shè)置斷點(diǎn):
Fiddler菜單欄->Rules->Automatic Breakpoints->選擇Before Responses,
也就是發(fā)送請(qǐng)求之后,在Fiddler代理中轉(zhuǎn)之前是可以修改請(qǐng)求數(shù)據(jù)的
2、觀察inspector,頁(yè)面內(nèi)容出現(xiàn)變化后修改Body的Value值,然后點(diǎn)擊 “Run To Complete“,回到瀏覽器查看響應(yīng)結(jié)果

從案例分享中,可以知道運(yùn)單號(hào)的長(zhǎng)度需>=5,那么調(diào)試時(shí)就輸入3個(gè)字符,看看頁(yè)面的響應(yīng)是否正常
圖中獲取不到提示,顯示undefined,說(shuō)明并沒(méi)有調(diào)用接口

另一種是修改返回包的數(shù)據(jù),關(guān)心的是頁(yè)面處理情況
比如理財(cái)app上顯示金額,那么我們?cè)跍y(cè)試時(shí)肯定要考慮金額的長(zhǎng)度,此時(shí)可以通過(guò)篡改數(shù)據(jù)來(lái)看服務(wù)端返回不同的結(jié)果來(lái)看頁(yè)面顯示是否正常
修改頁(yè)面響應(yīng)結(jié)果(攔截響應(yīng)數(shù)據(jù),修改響應(yīng)實(shí)體)
1、設(shè)置斷點(diǎn):
Fiddler菜單欄->Rules->Automatic Breakpoints->選擇After Responses,
也就是服務(wù)器響應(yīng)之后,但是在Fiddler將響應(yīng)中轉(zhuǎn)給客戶(hù)端之前是可以修改響應(yīng)的結(jié)果
2、觀察inspector,頁(yè)面內(nèi)容出現(xiàn)變化(說(shuō)明攔截成功)

3、切換到TextView,修改message,然后點(diǎn)擊 “Run To Complete“,回到瀏覽器查看響應(yīng)結(jié)果

PS:可以試著將message信息改的很長(zhǎng),頁(yè)面變形了,那就說(shuō)明有問(wèn)題了
如下頁(yè)面是增加了滾動(dòng)條

三、利用AutoResponder替換服務(wù)器的返回?cái)?shù)據(jù)(即原資源)
AutoResponder:重定向功能,將HTTP請(qǐng)求重定向到本地的文件,進(jìn)行調(diào)試。
1、比如 百度官網(wǎng) logo,用戶(hù)提出來(lái)要更新下,這時(shí)可以通過(guò)這功能實(shí)現(xiàn),也就是不需要修改代碼,就能預(yù)覽換個(gè)logo圖片文件的效果
在右上角選擇AutoResponder頁(yè)簽,勾選Enable rules、Unmatched requests passthrough 兩個(gè)選項(xiàng),點(diǎn)擊Add rule 按鈕,在下方填寫(xiě)替換的規(guī)則,編輯好之后,點(diǎn)擊保存
第一行填寫(xiě)地址完全匹配,也可以寫(xiě)正則表達(dá)式進(jìn)行模糊匹配,也可以從左側(cè)把請(qǐng)求數(shù)據(jù)拖過(guò)來(lái)
第二行填寫(xiě)要替換的內(nèi)容,下拉框有很多選項(xiàng)可以選擇, 比如201、302、404,502等status code

設(shè)置好替換圖片后點(diǎn)擊重新訪(fǎng)問(wèn)百度,請(qǐng)求回來(lái)的數(shù)據(jù)已經(jīng)是替換后的內(nèi)容了

2、修改Response數(shù)據(jù)時(shí)超時(shí)
設(shè)置斷點(diǎn)【After Response】之后,修改響應(yīng)數(shù)據(jù),來(lái)實(shí)現(xiàn)修改Response的內(nèi)容,
但是這樣容易造成請(qǐng)求超時(shí)
超時(shí):客戶(hù)端發(fā)送一個(gè)請(qǐng)求出去,如果在指定的時(shí)間內(nèi),沒(méi)有返回,那么就不會(huì)再來(lái)處理這個(gè)請(qǐng)求了
假設(shè)修改內(nèi)容的操作大于設(shè)置的超時(shí)時(shí)間,就算之后將斷點(diǎn)放行,請(qǐng)求返回200,這個(gè)時(shí)候客戶(hù)端也不會(huì)做任何處理,可以理解為修改的內(nèi)容沒(méi)有產(chǎn)生效果。
此時(shí)就可以利用AutoResponder的功能了,直接將修改之后的內(nèi)容放到文件
步驟:
(1)查看該結(jié)果返回的數(shù)據(jù)內(nèi)容及格式
選擇請(qǐng)求,右擊,Save -> Response -> Response Body ,保存響應(yīng)體,可以是文本格式

(2)修改響應(yīng)體的數(shù)據(jù),如圖修改title,重新發(fā)送請(qǐng)求,發(fā)現(xiàn)title和響應(yīng)頭部信息都已經(jīng)更新

PS:強(qiáng)制刷新Ctrl+F5,獲取最新資源
四、發(fā)送自定義請(qǐng)求(request-builder)
Composer:一個(gè)小型、簡(jiǎn)易的接口測(cè)試工具,可以填接口地址,設(shè)置請(qǐng)求參數(shù)、填寫(xiě)響應(yīng)結(jié)果,也可以修改相應(yīng)的頭信息(如添加常用的accept,host,referrer,cookie,cache-control等頭部)后execute
1、比如 POST請(qǐng)求, Harbor House官網(wǎng)注冊(cè)頁(yè)面
先輸入正常值,抓取請(qǐng)求數(shù)據(jù),然后找到相應(yīng)的請(qǐng)求,直接拖到Composer里面,然后在Copmposer中修改參數(shù)數(shù)據(jù)(此處為賬號(hào)),點(diǎn)擊Execute 就會(huì)產(chǎn)生一個(gè)新的請(qǐng)求,雙擊后可以看到返回的信息,提示賬號(hào)已經(jīng)存在


2、比如GET請(qǐng)求,百度搜索python
雙擊請(qǐng)求,切換到Webview

PS:如果是亂碼,請(qǐng)求header那設(shè)置 Content-Type:charset=utf-8
五、APP端抓包
前置條件
1、手機(jī)和電腦在同一局域網(wǎng)(PC端可以設(shè)置wifi熱點(diǎn))
2、完成Fiddler的配置(允許遠(yuǎn)程連接),端口默認(rèn)8888,然后重啟Fiddler使其生效
Tools——>Options——>Connections,勾選Allow remote computers to connect

接下來(lái)在CMD命令窗口,查看Fiddler進(jìn)程是否能正常監(jiān)聽(tīng)8888端口,如果服務(wù)沒(méi)有正常開(kāi)啟,可以嘗試使用其他端口,端口修改的位置,如上圖位置
以下兩種方法都可以:
(1)執(zhí)行 netstat -anop tcp
(2)執(zhí)行 netstat -ano|findstr “8888”
PS:0.0.0.0:8888,4個(gè)0代表所有的ip都可以連接進(jìn)來(lái)這個(gè)端口

3、查看本機(jī)的IP
(1)命令行中輸入:ipconfig 查看 IPV4

(2)直接在Fiddler中查看

4、手機(jī)配置代理(我用的iPhone手機(jī))
(1)設(shè)置——>無(wú)線(xiàn)局域網(wǎng)——>選擇wifi——>設(shè)置HTTP代理(輸入IP,端口是Fiddler的代理端口8888)

(2)打開(kāi)手機(jī)瀏覽器Safiri下載證書(shū) 就可以抓取https的請(qǐng)求了
- 輸入:http://本機(jī)的IP:8888,下載FiddlerRoot certificate
- 安裝并進(jìn)行驗(yàn)證

5、操作app進(jìn)行抓包

如果只想看移動(dòng)端數(shù)據(jù),也很簡(jiǎn)單,只需關(guān)閉pc端的代理就可以了(關(guān)閉Fiddler的“Capuring”開(kāi)關(guān))

答疑解惑:
有一次,公司辦公,需要抓包,此時(shí)手機(jī)和電腦連的都是wifi,工具設(shè)置也沒(méi)問(wèn)題,就是抓不到包,后來(lái)發(fā)現(xiàn)是網(wǎng)絡(luò)的問(wèn)題
解決辦法:電腦上安裝熱點(diǎn),手機(jī)連電腦熱點(diǎn),之后就可以抓包了
PS:抓包之后記得關(guān)閉手機(jī)代理,以免手機(jī)上不了網(wǎng)
結(jié)束語(yǔ)
通過(guò)Fiddler可以抓取請(qǐng)求和響應(yīng)參數(shù),對(duì)參數(shù)進(jìn)行分析,可以定位是前端還是后臺(tái)問(wèn)題。
案例一:
在測(cè)試登錄接口時(shí),輸入了正確的手機(jī)號(hào)和密碼,點(diǎn)擊登錄后,前端提示“請(qǐng)輸入正確的用戶(hù)名和密碼”
如上案例,僅僅通過(guò)界面的提示信息,我們只能描述bug表象,但不能分析出問(wèn)題原因。假設(shè)通過(guò)抓包發(fā)現(xiàn)是由于前端參數(shù)名錯(cuò)誤或 參數(shù)值為空,從而導(dǎo)致后臺(tái)報(bào)錯(cuò)。
案例二:
在列表頁(yè)測(cè)試搜索接口時(shí),輸入商品一、二級(jí)類(lèi)目,點(diǎn)擊搜索,頁(yè)面沒(méi)有數(shù)據(jù)
通過(guò)抓包發(fā)現(xiàn)前端提交的二級(jí)類(lèi)目參數(shù)與接口文檔中的字段不一致
針對(duì)上述兩種案例,測(cè)試人員就可以將bug指向前端開(kāi)發(fā)人員,并將參數(shù)數(shù)據(jù)和接口文檔中對(duì)應(yīng)的報(bào)文數(shù)據(jù)以附件的形式上傳,是不是可以提高bug的解決效率呢?同時(shí)也可以讓開(kāi)發(fā)對(duì)測(cè)試人員有個(gè)好印象(哇,這測(cè)試還是可以的,把原因找出來(lái)了),不是??!
Fiddler在實(shí)際的功能測(cè)試中有很大的作用
1、可以更好的了解某個(gè)業(yè)務(wù)中客戶(hù)端和服務(wù)器端是通過(guò)哪些接口進(jìn)行請(qǐng)求的,從而更好的了解代碼邏輯(尤其對(duì)于新人來(lái)說(shuō),通過(guò)抓包和數(shù)據(jù)庫(kù)的數(shù)據(jù)寫(xiě)入操作就能很快熟悉);
2、可以通過(guò)響應(yīng)數(shù)據(jù)判斷哪里出現(xiàn)了問(wèn)題
比如服務(wù)器掛了,導(dǎo)致前端報(bào)“服務(wù)器故障”,這時(shí)通過(guò)抓包發(fā)現(xiàn)響應(yīng)數(shù)據(jù)返回502,這時(shí)我們可以手動(dòng)去重啟服務(wù)或是聯(lián)系運(yùn)維重啟服務(wù)
