你们好,我是TT,互联网测试行业多年,没有牛逼的背景,也没有什么可炫耀的,惟独比他人更努力,在职场打拼。遇到过的坑,走过的弯路,愿意与你们分享,分享本身的经验,少走弯路。首发于我的公众号【测试架构师】html
原文以下: 前端
先来看一个小故事:ios
小T在测试APP时,打开某个页面展现异常,因而就跑到客户端开发小A那里说:“你这个页面作的有问题,页面展现异常”;
小A说:“这哪是个人问题,你去找后台吧,后台接口返回数据有问题”;
小T就屁颠屁颠的跑到后台接口开发小M那里说:“你接口返回数据有问题,改下吧”;
小M看了看服务器日志说:“没找到报错啊,我这里服务正常,你抓个包看下吧”;
小T郁闷了,屁颠屁颠的回去了想:“抓包?抓啥包?”;web
以上故事,在实在的测试工做中应该会有很多初入职场的测试人员遇到,公众号中应该有很多刚入职场的测试人员,若是你对fiddler抓包还不熟悉,那么接下来这篇文章可能对你有所帮助,废话很少说,下面开始介绍:chrome
1、HTTP协议简介
2、Fiddler简介
3、Fiddler工做原理
4、Fiddler界面介绍
5、Fiddler抓取HTTPS请求配置
6、Fiddler自带方便的编码工具:TextWizard
7、接口测试
8、设置断点,篡改和伪造数据
9、修改电脑系统hosts
10、HTTP请求统计视图
11、简单并发测试
12、慢网络测试(限制网速)
十3、显示出服务器IP方法
十4、命令行QuickExec用法浏览器
HTTP是超文本传输协议,信息是明文传输的,而HTTPS是安全超文本传输协议,须要证书和提供安全链接,换句话说,HTTPS是嵌套了SSL加密的HTTP链接,其内容由SSL先加密,而后再传输。安全
简单来说,HTTPS是加过密的HTTP。因为网络上传输的数据是加密的,用户在浏览网页时,除了用户本身能够看到当前在看什么网页,其余第三方是没法得知用户在作什么的。好比用户在网上登陆或输入其余敏感信息进行传输时一旦使用HTTPS,那么数据传输就不是明文了,对于第三方来说就没法获取你的敏感信息。服务器
官网:https://www.telerik.com/fiddler
Fiddler是比较好用的web代理调试工具之一,它能记录并检查全部客户端与服务端的HTTP/HTTPS请求,可以设置断点,篡改及伪造Request/Response的数据,修改hosts,限制网速,http请求性能统计,简单并发,接口测试,辅助自动化测试,等等。如今抓包工具成为测试人员的必备使用工具,开发人员也在广泛使用,进行问题的定位分析,是很是有助于工做的一款工具。微信
先来看看fiddler未参与时,一个普通的客户端与服务端的请求流程图:浏览器访问一个网站:87testing.com,浏览器给webserver发送一个Request,webserver接收到Request后进行处理,返回给浏览器Response,而后浏览器解析Response中的html,展示网页给用户。如图:网络
Fiddler工做于七层中的应用层,在client与webserver之间以代理服务器的形式存在,启动fiddler后会监听本地127.0.0.1的8888端口(默认端口),IE/Chrome浏览器会自动设置局域网代理(Firefox代理是独立的,须要单独设置),如图:
此时,fiddler就做为代理服务器,浏览器访问87testing.com的流程:浏览器给webserver发送一个Request,代理服务器fiddler接收到Request,fiddler将Request发送到webserver,webserver接收到Request后进行处理,Response到代理服务器fiddler,Fiddler将Response返回到浏览器,如图:
因为fiddler安装后默认只能抓取http请求,若是须要抓取https请求须要进行配置。配置方式:
Tools--->Options--->HTTPS,勾选CaptureHTTPS CONNECTs、Decrypt HTTPS traffic 、ignore server certificate errors(unsafe),点击OK,会弹出证书直接确认便可。
此时,在电脑chrome浏览器上就能够访问https的请求了,且fiddler会话列表上就能够显示出https请求。
在配置移动端证书以前检查下以下配置,Tools---->Connections---->勾选Allow remote computers to connect:
实际工做中,移动端项目大部分会在真机上进行测试,那么下面介绍针对手机端访问http/https请求在电脑端能够抓取到对应手机端发出的请求。iOS设备及Android设备设置方式基本相似,下面以iphone设置为例:
在手机上设置代理:设置—>无线网络,设置服务器ip和端口号:
而后手机safari浏览器输入地址:电脑ip:8888如:http://172.21.10.42:8888会出现以下页面:
点击“FiddlerRoot certificate”进行证书安装,安装完成后,以下说明安装成功:
此时,证书还不算完成安装完,假如手机是ios10.0以上系统,须要在手机系统设置---关于手机----证书信任设置,在此页面把证书开启便可,此时手机safari浏览器地址栏输入:87testing.com,进行访问,在电脑端fiddler上便可显示出对应的请求:
这个自带编码工具就不过多解释了,直接看截图:
接口测试工具备很多,好比postman、soapui、jmeter等等,那么平时在测试的时候通常都会抓包,那么有可能开发会说帮忙再重现一下,那么又要从新造数据,太麻烦,此时就能够把这个接口保留下来,从新点下Execute便可调用。(根据实际状况可修改请求数据),以下:
点击Execute,在会话列表中会新产生一条请求:
设置断点,篡改和伪造数据,在测试中使用的也较平凡,给你们举个我以前写过一篇文章《互联网产品接入第三方支付功能应如何测试?》中也提到过的一个真实的案例:好比使用支付宝购买虚拟商品,往支付宝跳转时,篡改了小的金额,结果购买虚拟商品成功了。(本来10元的商品,0.01元就搞定了)。多么可怕的一个bug啊,固然这个问题可能对于一个作过支付有过经验的测试朋友来讲,可能会想:哎呀,这个问题都发现不了,还作什么测试?是的,问题是很简单,对于一个刚入职场的测试朋友或者没有支付相关经验的测试朋友来讲,颇有可能会忽略。
前面讲过fiddler做为代理服务器时的请求流程图,请求时,可被篡改的两个点:Before Requests、After Responses。
修改Requests方法:Rules---->Automatic Breakpoints---->Before Requests
以论坛发布帖子为例,修改请求前数据内容,好比发布的内容以下:
点击发布帖子,此时请求被fiddler拦截掉,将右侧requests body里面的字段message内容前新增内容:“篡改requests数据成功!”,而后点击Run to Completion,先关闭掉拦截Rules---->Automatic Breakpoints---->Disabled,其余请求都放过,点击工具栏中的“Go”
论坛中查看到刚刚发布的帖子内容以下,就被成功篡改了requests
还有一种方式在命令行中中断某一个域名的方式,如中断www.87testing.com,在命令行输入命令:bpu www.87testing.com,这样就能够拦截www.87testing.com的请求了,取消拦截输入命令:bpu
修改Responses方法:Rules---->Automatic Breakpoints---->After Responses,方法跟修改Requests相似,无非修改的内容变成了Response。
做为前端工程师如今使用绑定hosts在本地开发调试的场景也愈来愈多,另外,当预发环境和生产环境共用同一个域名时,经过绑定hosts的方式将访问的域名本来指向生产服务器,强制指向预发服务器上。举个例子,假如我要将www.baidu.com指向87testing.com对应的服务器上,87testing.com对应的服务器公网ip:47.94.18.31,配置以下:Tools---->Hosts---->勾选Enable remapping of requests for one host to a different host or IP,overriding DNS.而后host编辑区域,输入须要域名须要指向的服务器公网IP,好比我将www.baidu.com域名指向了47.94.18.31,保存便可。(若是不使用host,勾去掉便可)
此时,电脑浏览器访问:www.baidu.com,结果打开的内容以下:
同时,抓包看到的结果以下:
页面请求时间的统计,比较详细,若是要看整个页面从请求,到最后一个请求结束的总体时间,也能够在会话列表中,ctrl+点击须要统计的请求,右边Statistics能够看到整体明细。
在测试中,这样的场景也很是多,好比被测平台能够有多种货币,有可能从一种货币能够直接兑换成另外一种平台货币,在兑换的时候,要多关注下两点安全:数据篡改及并发状况,数据篡改要测试扣减A货币时,篡改金额为负值或金额变少,那么兑换到B货币的数据校验,这个有点相似支付拿少的钱买多的东西,这里就不过多描述了。另外,并发状况,再好比常常会有一些活动相关的测试,假如抽奖活动,通常都有限制一我的一天只能抽一次,那么抽奖的时候同一个用户并发,会不会领取屡次奖励。固然最好仍是要有正规的压测,或者在测试中能够借助fiddler作一个简单的并发测试,都是颇有必要的。
一我的一天只能有一次抽奖机会,那么在点击抽奖按钮发出请求以前,要设置Before Requests Breakpoints,点击抽奖后在会话列表中会看到一个被断点的请求,此时鼠标选中此请求,按shift+u,会弹出并发次数的设置,以下,设置并发次数5次(下面演示截图是发布帖子并发时的截图,可参考)
点击ok,次数会话列表就多出5个请求,以下:
此时,点击工具栏“GO”,六个请求同时发到对应的服务端,便可造成6个并发请求,再看看发表帖子的状况以下:
一、Fiddler---》Rules---》Customize Rules ,
二、在CustomRules.js里搜索找到:m_SimulateModem,
三、在以下脚本中修改上传及下载延时毫秒数便可:
if (m_SimulateModem) { // Delay sends by 300ms per KB uploaded. oSession["request-trickle-delay"] = "300"; // Delay receives by 150ms per KB downloaded. oSession["response-trickle-delay"] = "150"; }
修改完成后,重启下fiddler,Rules---->Performance---->Simulate Modem Speeds,选中便可生效。
Fiddler默认配置中是看不到服务器IP的,接下来简单介绍下在fiddler上也可以看到请求的服务器IP:
一、Fiddler---》Rules---》Customize Rules ,
二、在CustomRules.js里搜索找到:static function Main() ,
三、添加以下一行脚本:
FiddlerObject.UI.lvSessions.AddBoundColumn("Server IP", 120, "X-HostIP");`
完整js代码以下: static function Main() { var today: Date = new Date(); FiddlerObject.StatusText = " CustomRules.js was loaded at: " + today; // Uncomment to add a "Server" column containing the response "Server" header, if present FiddlerObject.UI.lvSessions.AddBoundColumn("Server IP", 120, "X-HostIP"); }
添加完成后,重启下fiddler,就能够显示出请求的服务器ip。
经常使用命令:
help-----打开官方QuickExct命令用法帮助
?87testing------选中带有87testing的请求
bpu www.87testing.com-------拦截www.87testing.com域名请求的requests
Bpafter www.87testing.com------拦截www.87testing.com域名请求的responses
参考官方文档:http://docs.telerik.com/fiddler/knowledgebase/quickexec
若是以上还没解决,请关注个人微信公众号:测试架构师,后台留言找到我!
了解更多请关注微信公众号:测试架构师