閱讀本篇內(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。
用戶申請(qǐng)的寬帶業(yè)務(wù)速率指技術(shù)上所能達(dá)到的最大理論速率值糊渊,用戶上網(wǎng)時(shí)還受到用戶電腦軟硬件的配置右核、所瀏覽網(wǎng)站的位置、對(duì)端網(wǎng)站帶寬等情況的影響渺绒,故用戶上網(wǎng)時(shí)的速率通常低于理論速率值贺喝。 理論上:2M(即2Mb/s)寬帶理論速率是:256KB/s(即2048Kb/s),實(shí)際速率大約為103--200KB/s宗兼;4M(即4Mb/s)的寬帶理論速率是:512KB/s躏鱼,實(shí)際速率大約為200---440KB/s。以此類推殷绍。
背景:進(jìn)行日常測(cè)試時(shí)通常網(wǎng)絡(luò)情況都比較好(內(nèi)網(wǎng))染苛,所以有時(shí)會(huì)忽略在低速或網(wǎng)絡(luò)狀況不好的情況下系統(tǒng)頁面的表現(xiàn)(前端是怎么處理的)
手機(jī)可以用2G、3G主到、4G茶行,也是一種方式,但這都是網(wǎng)絡(luò)模式登钥,而Fiddler可以設(shè)置上傳和下載的延時(shí)時(shí)間畔师,這種控制非常靈活,可以幫助我們模擬低速網(wǎng)絡(luò)情況下頁面牧牢、APP的顯示與交互情況茉唉,比如響應(yīng)時(shí)間過長(zhǎng)時(shí)是否有彈出網(wǎng)絡(luò)不好的提示固蛾、頁面crash以及顯示錯(cuò)亂、session是否一致等
設(shè)置限速時(shí)間
(1)打開 【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趾诗,大致模擬出來的帶寬如下
上傳帶寬=(1*8/1000)/0.300≈0.053Mbps
下載帶寬=(1*8/1000)/0.150≈0.027Mbps
實(shí)際帶寬是在計(jì)算所得的基礎(chǔ)上乘2,也就是說
上傳帶寬=((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) 重啟
打開瀏覽器恃泪,訪問百度,搜索python犀斋,頁面加載非常慢贝乎,等全部加載完成時(shí)可以到Statistics查看時(shí)間
真實(shí)案例:
訂單詳情頁面,有個(gè)添加備注按鈕叽粹,在按鈕點(diǎn)擊時(shí)已經(jīng)做了控制览效,將按鈕置灰,避免用戶重復(fù)點(diǎn)擊虫几,但最終忘記做低速測(cè)試了锤灿,導(dǎo)致線上出問題了
通過排查是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)心頁面倘是,只看接口處理是否正常浪箭,返回的數(shù)據(jù)對(duì)不對(duì)
比如 Harbor House官網(wǎng)注冊(cè)頁面 用戶名限制的字符長(zhǎng)度是2-20 ,把字符加到21以上辨绊,看效果奶栖,根據(jù)前端頁面的預(yù)期結(jié)果是提示用戶名超長(zhǎng)了,而實(shí)際結(jié)果是注冊(cè)成功了
于是去數(shù)據(jù)庫查了下表結(jié)構(gòu)门坷,發(fā)現(xiàn)用戶名字段的長(zhǎng)度是50宣鄙,所以重新注冊(cè)下,字符超過50冻晤,看接口返回的信息绸吸,提示“信息輸入有誤”设江,OK,測(cè)試通過叉存,說明接口在這塊做了保護(hù)
用剛注冊(cè)成功的用戶名進(jìn)行登錄度帮,提示“賬號(hào)長(zhǎng)度只能在2-20位字符之間”歼捏,登錄失敗
(引申:這些不會(huì)生效的數(shù)據(jù),也會(huì)被稱為臟數(shù)據(jù)笨篷,不改掉會(huì)影響到后續(xù)性能)
在這里做個(gè)假設(shè):
仍然是上面的例子率翅,頁面上注冊(cè)時(shí)提示沒成功冕臭,但實(shí)際數(shù)據(jù)庫中已經(jīng)保存數(shù)據(jù)了庄吼,這樣就算bug了,前端不應(yīng)該在用戶捕獲到超過長(zhǎng)度的字符時(shí)還去調(diào)用接口
理論上前后端對(duì)于輸入?yún)?shù)的限制應(yīng)該保持一致,但實(shí)際上數(shù)據(jù)庫字段長(zhǎng)度是要比前兩者多的榴芳,因?yàn)橐粲懈辉5目臻g作為優(yōu)化
再比如注冊(cè)頁面對(duì)用戶郵箱有進(jìn)行驗(yàn)證跺撼,F(xiàn)iddler中修改后查看服務(wù)端是否有驗(yàn)證歉井,有興趣的朋友可以自己去嘗試下
修改頁面請(qǐng)求值
構(gòu)造請(qǐng)求數(shù)據(jù),突破表單的限制躏嚎,可以隨意提交數(shù)據(jù)卢佣,避免頁面JS和表單限制箭阶,從而影響相關(guān)調(diào)試(繞過前端)
1、設(shè)置斷點(diǎn):
Fiddler菜單欄->Rules->Automatic Breakpoints->選擇Before Responses婆殿,
也就是發(fā)送請(qǐng)求之后待笑,在Fiddler代理中轉(zhuǎn)之前是可以修改請(qǐng)求數(shù)據(jù)的
2暮蹂、觀察inspector仰泻,頁面內(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īng)是否正常
圖中獲取不到提示月幌,顯示undefined,說明并沒有調(diào)用接口
另一種是修改返回包的數(shù)據(jù),關(guān)心的是頁面處理情況
比如理財(cái)app上顯示金額轴术,那么我們?cè)跍y(cè)試時(shí)肯定要考慮金額的長(zhǎng)度钦无,此時(shí)可以通過篡改數(shù)據(jù)來看服務(wù)端返回不同的結(jié)果來看頁面顯示是否正常
修改頁面響應(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)給客戶端之前是可以修改響應(yīng)的結(jié)果
2建车、觀察inspector椒惨,頁面內(nèi)容出現(xiàn)變化(說明攔截成功)
3康谆、切換到TextView沃暗,修改message,然后點(diǎn)擊 “Run To Complete“嚼黔,回到瀏覽器查看響應(yīng)結(jié)果
PS:可以試著將message信息改的很長(zhǎng)隔崎,頁面變形了,那就說明有問題了
如下頁面是增加了滾動(dòng)條
三撵彻、利用AutoResponder替換服務(wù)器的返回?cái)?shù)據(jù)(即原資源)
AutoResponder:重定向功能陌僵,將HTTP請(qǐng)求重定向到本地的文件创坞,進(jìn)行調(diào)試题涨。
1、比如 百度官網(wǎng) logo巡雨,用戶提出來要更新下铐望,這時(shí)可以通過這功能實(shí)現(xiàn)正蛙,也就是不需要修改代碼,就能預(yù)覽換個(gè)logo圖片文件的效果
在右上角選擇AutoResponder頁簽咽筋,勾選Enable rules奸攻、Unmatched requests passthrough 兩個(gè)選項(xiàng)睹耐,點(diǎn)擊Add rule 按鈕部翘,在下方填寫替換的規(guī)則新思,編輯好之后夹囚,點(diǎn)擊保存
第一行填寫地址完全匹配,也可以寫正則表達(dá)式進(jìn)行模糊匹配假哎,也可以從左側(cè)把請(qǐng)求數(shù)據(jù)拖過來
第二行填寫要替換的內(nèi)容舵抹,下拉框有很多選項(xiàng)可以選擇惧蛹, 比如201、302爵政、404钾挟,502等status code
設(shè)置好替換圖片后點(diǎn)擊重新訪問百度掺出,請(qǐng)求回來的數(shù)據(jù)已經(jīng)是替換后的內(nèi)容了
2汤锨、修改Response數(shù)據(jù)時(shí)超時(shí)
設(shè)置斷點(diǎn)【After Response】之后闲礼,修改響應(yīng)數(shù)據(jù)铐维,來實(shí)現(xiàn)修改Response的內(nèi)容嫁蛇,
但是這樣容易造成請(qǐng)求超時(shí)
超時(shí):客戶端發(fā)送一個(gè)請(qǐng)求出去睬棚,如果在指定的時(shí)間內(nèi),沒有返回包警,那么就不會(huì)再來處理這個(gè)請(qǐng)求了
假設(shè)修改內(nèi)容的操作大于設(shè)置的超時(shí)時(shí)間害晦,就算之后將斷點(diǎn)放行篱瞎,請(qǐng)求返回200,這個(gè)時(shí)候客戶端也不會(huì)做任何處理牵素,可以理解為修改的內(nè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ù)纸型、填寫響應(yīng)結(jié)果狰腌,也可以修改相應(yīng)的頭信息(如添加常用的accept,host瑰枫,referrer躁垛,cookie教馆,cache-control等頭部)后execute
1土铺、比如 POST請(qǐng)求板鬓, Harbor House官網(wǎng)注冊(cè)頁面
先輸入正常值俭令,抓取請(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
接下來在CMD命令窗口涉枫,查看Fiddler進(jìn)程是否能正常監(jiān)聽8888端口愿汰,如果服務(wù)沒有正常開啟衬廷,可以嘗試使用其他端口,端口修改的位置侧戴,如上圖位置
以下兩種方法都可以:
(1)執(zhí)行 netstat -anop tcp
(2)執(zhí)行 netstat -ano|findstr “8888”
PS:0.0.0.0:8888酗宋,4個(gè)0代表所有的ip都可以連接進(jìn)來這個(gè)端口
3寂曹、查看本機(jī)的IP
(1)命令行中輸入:ipconfig 查看 IPV4
(2)直接在Fiddler中查看
4、手機(jī)配置代理(我用的iPhone手機(jī))
(1)設(shè)置——>無線局域網(wǎng)——>選擇wifi——>設(shè)置HTTP代理(輸入IP翔烁,端口是Fiddler的代理端口8888)
(2)打開手機(jī)瀏覽器Safiri下載證書 就可以抓取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”開關(guān))
答疑解惑:
有一次寻狂,公司辦公蛇券,需要抓包樊拓,此時(shí)手機(jī)和電腦連的都是wifi筋夏,工具設(shè)置也沒問題条篷,就是抓不到包,后來發(fā)現(xiàn)是網(wǎng)絡(luò)的問題
解決辦法:電腦上安裝熱點(diǎn)指蚜,手機(jī)連電腦熱點(diǎn)姚炕,之后就可以抓包了
PS:抓包之后記得關(guān)閉手機(jī)代理,以免手機(jī)上不了網(wǎng)
結(jié)束語
通過Fiddler可以抓取請(qǐng)求和響應(yīng)參數(shù)播瞳,對(duì)參數(shù)進(jìn)行分析赢乓,可以定位是前端還是后臺(tái)問題牌芋。
案例一:
在測(cè)試登錄接口時(shí)松逊,輸入了正確的手機(jī)號(hào)和密碼经宏,點(diǎn)擊登錄后烁兰,前端提示“請(qǐng)輸入正確的用戶名和密碼”
如上案例沪斟,僅僅通過界面的提示信息主之,我們只能描述bug表象杀餐,但不能分析出問題原因。假設(shè)通過抓包發(fā)現(xiàn)是由于前端參數(shù)名錯(cuò)誤或 參數(shù)值為空枉长,從而導(dǎo)致后臺(tái)報(bào)錯(cuò)。
案例二:
在列表頁測(cè)試搜索接口時(shí)必峰,輸入商品一洪唐、二級(jí)類目,點(diǎn)擊搜索吼蚁,頁面沒有數(shù)據(jù)
通過抓包發(fā)現(xiàn)前端提交的二級(jí)類目參數(shù)與接口文檔中的字段不一致
針對(duì)上述兩種案例凭需,測(cè)試人員就可以將bug指向前端開發(fā)人員,并將參數(shù)數(shù)據(jù)和接口文檔中對(duì)應(yīng)的報(bào)文數(shù)據(jù)以附件的形式上傳肝匆,是不是可以提高bug的解決效率呢粒蜈?同時(shí)也可以讓開發(fā)對(duì)測(cè)試人員有個(gè)好印象(哇旗国,這測(cè)試還是可以的枯怖,把原因找出來了),不是嚹茉度硝!
Fiddler在實(shí)際的功能測(cè)試中有很大的作用
1、可以更好的了解某個(gè)業(yè)務(wù)中客戶端和服務(wù)器端是通過哪些接口進(jìn)行請(qǐng)求的寿冕,從而更好的了解代碼邏輯(尤其對(duì)于新人來說蕊程,通過抓包和數(shù)據(jù)庫的數(shù)據(jù)寫入操作就能很快熟悉);
2驼唱、可以通過響應(yīng)數(shù)據(jù)判斷哪里出現(xiàn)了問題
比如服務(wù)器掛了藻茂,導(dǎo)致前端報(bào)“服務(wù)器故障”,這時(shí)通過抓包發(fā)現(xiàn)響應(yīng)數(shù)據(jù)返回502曙蒸,這時(shí)我們可以手動(dòng)去重啟服務(wù)或是聯(lián)系運(yùn)維重啟服務(wù)