测试重器之-巧用fiddler

为什么要讲fiddler,因为无论你是想做爬虫,还是接口自动化,或者是前后端的调试,都绕不开他,今后只要涉及到http协议的工作,你都要用到它。所以各位同行千万不能小看fiddler。
注:本文不是纯扫盲篇,否则篇幅过大:至于http概念,以及fiddler下载安装,证书配置等信息可以自行摸索学习。

fiddler是什么

fiddler在官网的定义是:
适用于 MacOS、Windows 和 Linux 的 Web 调试代理


image.png

我们俗称它叫抓包工具。所以从几个关键词里我们总结一下fiddler的作用和应用范围:
1、系统:试用于macOS,windows和linux。说实话我对这个结果也是感到意外的,因为以前,大约在2012-2016年左右,我用过mac系统,并没有看到有fiddler可以下载,所以mac系统在一些老测试的印象中用的都是Charles。
2、代理:这里所谓的代理实际上就是http协议的代理,也就是说,无论是http协议的接口,还是网页里包含的js,html页面,都可以捕获到。

基本用法:看

掌握一定的http协议知识,对于fiddler就可以进行使用了,看的意思,就是我只是去看抓包结果,他的应用范围主要有:
1、网页
2、移动端app

看什么:

image.png

第一部分,展示的是请求的链接,第二部分是请求body的入参,第三部分是响应的出参。
无论是测试人员还是开发人员,这里面需要关注的是:
-请求接口的状态码,result列。如200属于正常响应。302表示重定向至新的地址,304表示本地有缓存,服务器没无需提供新的数据。401表示请求方法错误,404表示请求的地址路径错误没有找到,451表示身份校验失败。500表示服务器内部错误,502表示网关拒绝,504表示网关超时。从状态码中我们大概可以判断出来后端服务出现了什么问题,问题的大概类型。
-入参和出参:检查入参和出参是否符合接口约定,入参错误需要前端开发进行修改,出参错误需要后端开发进行修改。
总结:通过“看”,我们可以定位到我们的操作过程中发现的问题,做一个初步的分析判断,让提交的BUG更为清晰。而开发人员也应该通过这个步骤去自测自己的代码,前端确保调用正确,后端确保在业务流程中可以正常提供服务。

基本用法:接口自动化要看得更深

做接口自动化,不只是上述方式的看看那么简单。
-首先要区分host和url。
-请求头:


image.png

首先要看request headers内,关于这个请求的请求方法。
client:
一般要注意accept:它决定请求入参的数据格式。
user-agent:表示客户端设备的基本信息,有些接口会做校验,如果你的客户端信息是Python,服务器会拒绝。
cookie:
一般网页会用到cookie,如果它通过cookie存储session信息,那么这个请求头不传是无法通过身份校验的。
entity:
content-type:表示它的请求类型。比如application/json表示它的请求格式为json格式。x-www-form-urlencoded表示它的入参是表单格式,multipart/form-data表示表单+文件入参,text/xml表示入参是xml编码根式的文本:


image.png

security:
这里面的内容包含自定义请求头,比如:Authorization,token等等。
所以请求的部分需要根据不同的格式去找,webform表单,json,xml。如果需要复制整个json入参,需要在raw格式下复制。
image.png

同理,响应也有需要注意的部分:
比如headers内的X-trace-Id:是追踪码,比如有点接口报错的话,会在响应参数里给出追踪码,有的则需要通过这个追踪码去查找后台日志。通常接口的响应的都是json格式,有的网页可能是html页面,js可能响应的是文本。


image.png

这种情况下,页面通过webview去查看,文本通过raw或者textview去查看,如果复制出来整个响应json,也要再raw栏内复制。
重点说一个特殊情况,有些页面响应虽然fiddler给出了json串,但是我们写自动化的时候却无法从json内直接提取想要的信息,比如之前,由于业务需要,我需要给五百个小区打上定位坐标,当时我有两个选择,第一是找一个开源的地图api,第二就是捕获知名地图网站的接口,所以我上网查了查,也没有找到免费好用的地图接口,所以干脆就把某地图的网站抓下来,结果就遇到了这种情况。最后发现响应的参数根本不是json,而是包含一个json串的文本,而这个时候在json格式化内看到的并不是全部内容,它有一些干扰字符,所以需要通过raw这个页面拿到所有的文本,再通过大括号把json筛选出来,转译成字典才可以实现提取。
image.png

上图看起来规规矩矩
但是:
image.png

也就是小括号里面的detail才是我们想要的json。
所以,做接口自动化的测试开发人员,需要关注的点要更多,不光要看基本入参出参,还要注意每个接口之间的关系,才能通过接口串联起来一个完整的场景,还要保证同一个场景下的请求属于同一次登录后的操作,最主要的是,真正实现自动化的时候,参数应该是尽可能是活的和反复执行的,这样才能模拟出来真实的操作流程。

正餐:那些很多人不知道的进阶用法

1.文件存储:
工具栏中的file,可以存储抓包文件,也可以读取抓包文件。存储的意义很多。比如我把抓下来的数据发给其他人来协同工作。或者拿到别人抓好的结果去进行浏览分析,帮助我写自动化或者查找BUG。又或者是过了一天之后我准备再次调用它,看看身份是否过期。这里面我延伸出来一个更有意思的用法,就是写了Python爬虫程序,将抓抓包结果生成了自动化用例。
2.搜索:
与其它大多数windows软件一样,Ctrl+F可以进行搜索,也就是当我们在一堆杂乱的抓包结果中去找到想要的东西,比如我抓到接口在使用session,但是我不知道这个session的来源,我可以搜索这个session,这样就所有包含这个字段的接口就会高亮显示,无论它存在于哪个位置,通常是响应头内。
3.标记:
Ctrl+1~9,是给选中的url标记颜色的,这样我们就可以一眼看到标记的接口,keep xxx session我通常会设置成100,这样他左侧只存储最近的100次会话,而有有标记的会被保留,没有标记的会逐渐被删掉。keep 100是为了节约计算机的内存资源,否则达到一定的数量之后,电脑会卡顿。
4.慢网速:
在rules-performacne-simulate modem speeds这个选项,勾选后可以模拟高延迟或者不稳定的网络状况。它的用途是一些页面可以测试双击反应,以及超时反应。Ctrl+r可以调取出fiddler的脚本文件。

image.png

其中有这样一段代码,是可以设置延迟时间的,一个是上传延迟,一个是响应延迟。这里面的语法是.net,有精通这门语言的人可以仔细研究一下,可以对fiddler进行自定义的功能改造。
5.响应时间:
在入参栏内,statistics是关于接口的一个响应时间分析。
image.png

它会清楚的告诉你,客户端什么时候开始连接服务器,发出请求,服务器什么时候接收到的请求,什么时候开始响应等。以及在不同的语种下可能响应时间。
6.筛选和过滤:
左侧请求url的列表内,每个表头都可以点击,讲同一个host下的地址进行分类筛选。过滤则有两种方式,一个是右侧请求区内,勾选filters,在use filters里面输入想抓的域名,这样fiddler就不会显示其它没有用的接口了。但是我个人不建议使用,因为一个复杂的应用不仅仅是一个域名构成,比如里面可能还有一些SDK,比如地图,天气,H5,以及三方的一些调用,你把它们过滤掉的话,有可能会丢失重要的环节。所以我建议直接在左侧url上右键,选filter now,把不想看到的隐藏掉就好,隐藏之后,会显示在左下角,右键点击隐藏的链接,会把它们重新激活。
image.png

7.拷贝和删除:
在url点击右键,可以选择拷贝,可以只拷贝url,丢掉host,也可以拷贝完整地址。删除可以直接按delete删除选中的url,也可以crtl+i反选删除未选中的URL,也可以点击reply按钮右侧的X,选择全部删除。拷贝请求头不建议在这里拷贝,因为内容比较杂乱。拷贝请求头的时候最好选择请求区的header栏,点击右键view header,这样可以精确的复制到key和value。
image.png

8.重播:
首先说重播,reply键,可以将选中的一个或者多个url进行重复请求,参数不变。它的作用是可以看到哪些接口的参数可以重复使用,也可以排除不应该可以重复使用的接口。比如我在网站给一个用户进行了充值或者退款,那么我再重播这个接口的话,极有可能造成充值重复或者退款重复,这就属于安全漏洞。
重播还有一个自动化玩法,就是shift+r,这里可以设置重播次数。那么我们可以通过选择重播数量让fiddler产生并发请求,重播次数可以产生持续性的请求,没想到fiddler还是一个可以做压测的工具吧,但是不要太高兴,它只能做一些临时压力测试,在没有压测计划的时候,对查询类接口这样做,可以初步有一个性能评估,但是它毕竟不是压测工具,真的做压测还是该用locus或jmeter或loadrunner这些专业方法吧。有时候我们需要持续创建一些数据,如果服务器不校验重复的话,那么就可以使用reply去做。
9:断点
断点是fiddler的灵魂所在
image.png

有个比较隐蔽的位置,点一下,会出现上箭头,它就会阻断请求,再按一下,出现下箭头,它就会阻断响应,什么都不显示表示不给予断点。
image.png

这里还有一个隐蔽的按钮,打上断点的接口也会显示对应颜色的箭头
image.png

这个go的作用就是,放行,否则它会一直处于阻断的状态。
请求断点可以修改入参,这就等于模拟客户端去骗服务器。
响应断点可以修改出参,这就等于模拟服务器去骗客户端。
这里面我列举三个使用场景。
场景1:我不知道哪些请求头是有用的,所以我每次reply的同时,打上请求断点,每次删掉一个请求头的参数,以此方法去了解接口对哪些请求头做严格的校验。
场景2:类似于postman,打上请求断点,reply后,我们对请求参数做修改,删减等操作,以此来对接口进行测试。比如网页里请求每页10条,30条,50条记录,如果我们想让它每页显示100条怎么办,按照上述方法就可以实现了。
场景3:有时候测试或者开发遇到的麻烦就是数据量不足,比如我们需要很多数据,或者很长的字符串,各种字符类型显示在列表内,而制作一条数据是非常耗时甚至很难实现的。比如银行回盘,营业扎帐每天只能做一次,有些年终结算之类的每年生成一个。那我们开发调试或者测试测试的时候怎们去看前端的分页情况,展示情况,这个时候就用到了响应断点。我们可以根据相应数据的规则自己去制造一些响应数据,将要给到客户端的数据进行了篡改,以此来测试客户端的展示逻辑。
场景4:有时候我们需要看到各类不同的提示,比如三方的支付失败,加载失败之类的情况,或者有些报错很难去制造数据,它必须是依赖三方特定的情况下才能得到的,这个时候我们也可以强制让一个原本好好的接口响应报错信息,看客户端的显示效果。
10.代理服务器:
如果说断点重播的应用,符合fiddler“调试”的目的,那么代理服务器就真正的诠释了fiddler可以当服务器来用的情况。
案例:
有个老同事说,我们没有做公网域名,但是又想测试IOS app,怎么办?
解决方案1:修改手机的host文件,但是问题是,没有越狱的苹果手机不能访问host。
解决方案2:使用手机连接fiddler代理,在fiddler所在电脑上修改host映射,把公网不认识的域名映射给内部的ip地址,从而实现了fiddler作为代理服务器的意义。
例如:我们内网部署的测试平台域名是个ip地址。
平时我们使用的时候,访问http://192.xxx.xx.xxx:8000/api/login
这个时候打开fiddler,点击tools选择修改hosts,此处用法与windows一样。
image.png

这个时候呢,我在浏览器输入http://ecej/api/login/ 也可以访问测试平台。同理,我在手机浏览器里输入,也是一样的走到fiddler的代理服务器上。通过fiddler和windows都可以修改host,通过fiddler修改host的好处是,我可以随时去关闭和启用它,同时在关闭fiddler的时候,电脑则不再使用fiddler的映射关系。

结语:
各位看官,是不是很神奇,如果今后你在面试别人的过程中,提到fiddler的使用,你不妨通过他对fiddler的掌握程度,来推断他的内功深度。你甚至都不需要问其他的问题,因为只有用到的才能使用到它。你可能会猜到一个后端开发将来需要学会什么,或者一个前端开发将来需要学会什么,但是没人能猜透一个测试将来都能学会什么,这就是测试这项“找毛病”的工种的神奇之处。因为他会尝试你想不到的方法去找毛病。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容