一.Fiddler的原理:
Fiddler是客户端和服务器端中间的HTTP代理服务器, 它能够记录客户端和服务器之间的所有 HTTP(S)请求,可以针对特定的HTTP(S)请求,分析网络传输的数据,还可以设置断点、修改请求的数据和服务器返回的数据;
1) 客户端向WEB服务器发送HTTP(S)请求时,请求会先经过代理Fiddler代理服务器。
2) Fiddler代理服务器截取客户端的请求报文,再转发到WEB服务器,转发之前可以做一些请求报文参数修改的操作。
3) WEB服务器处理完请求以后返回响应报文,Fiddler代理服务器会截取WEB服务器的响应报文。
4) Fiddler处理完响应报文后再返回给客户端。
二.Fiddler抓包的流程:
1.https抓包配置:fiddler默认是不可以抓取https协议的,需要进行配置,在Fiddler的https设置里面勾选捕获https连接,点击actions选择将证书生成到桌面上,再在浏览器的证书管理中导入证书;重启fiddler。
2.设置域名筛选:找到Fiters(筛选器)选项,勾选启用,hosts栏下拉选项选择'仅显示以下主机';下方的编辑框输入域名,如果多个域名用分号分隔。再下面有个Request Header栏,勾选Hide if URL contains(隐藏包含下面字符的URL),按提示的格式输入公式,隐藏掉包含js、css、png、google等的地址。配置好后就可以过滤掉不需要的信息,只抓取需要的接口信息
公式:REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav|js|jpeg)(\?.*)?$
或REGEX:\.(js|css|png|google|favicon\?.*)+
或\.(css|ico|jpg|png|gif|bmp|wav|js|jpeg)
3.打开fiddler,左下角capturing(获取)选项默认开启,先点击该选项,让其关闭;避免其他不需要的接口抓取到;
4.操作系统到需要抓取的功能入口处,打开fiddler,左下角capturing选项打开抓取功能,操作系统,即可抓取到该操作对应的接口;
5.Fiddler左侧面板:显示抓取到的接口,可以查看响应状态、使用的协议、请求的域名/ip、url地址、Body请求的大小、ContentType请求响应的类型;
6.Fiddler右侧面板:主要看inspectors(检查页签),上部分为Request(请求)展示,下部分为Response(响应)展示;都可以通过headers、textview、hexview,Raw等多种方式查看单条http请求的请求报文的信息
三.Fiddler设置断点:
请求前断点:修改Request的参数
1.抓取接口,获取接口地址
2.fiddler左下角有一个快捷输入框,点击该输入框,输入bpu+空格+接口url地址,回车;
3.操作界面,当执行到该接口对应的功能时,会被fiddler抓包识别,对应的操作在界面中就会显示为加载中,此时查看fiddler截取到的请求数据可以编辑
4.右侧的Request框点击Raw选项修改返回值
5.修改完成后,然后点Run to Comple;检查界面就会根据修改的后的参数返回服务端响应的数据;
6.输入bpu,取消断点
请求后断点:修改Response的参数
1.与上述步骤相同,在快捷输入框输入bpafter+空格+接口url地址,回车;
2.操作界面,当执行到该接口对应的功能时,会被fiddler抓包识别,对应的操作在界面中就会显示为加载中,此时查看fiddler截取到的响应数据可以编辑
3.右侧的Respone框找到点击Break on Response,然后在TextView或Raw修改返回值
4.修改完成后,然后点Run to Comple;检查界面就会显示自己构造的数据
四.用fiddler做简单的并发测试:
1.选中请求
2.按shift+u,弹出并发次数的设置:
3.点击ok,次数会话列表就多出5个请求
五.用fiddler做接口测试:
1.点击Composer选项
2.选择请求方式、填写接口地址、上方面编辑框输入请求头信息、下方编辑框输入参数信息;点击右上角的Exceute按钮即可发起请求
3.发起后左侧框会生成一条接口请求的数据,点击即可在右侧查看接口的响应信息
六.fiddler添加接口响应时间:
1.打开定制规则文件:
2.添加这段代码,重启fiddler即可看到列表新增了响应时间列
public static BindUIColumn("TimeTaken/ms", 120)
function TimeTaken(oS: Session):String{
var sResult = "0";
var t1_ms = oS.Timers.ClientBeginResponse.ToUniversalTime().Millisecond;
var t1_m = oS.Timers.ClientBeginResponse.ToUniversalTime().Minute;
var t1_s = oS.Timers.ClientBeginResponse.ToUniversalTime().Second;
var t1 = t1_m*60*1000 + t1_s*1000 + t1_ms ;
var t2_ms = oS.Timers.ClientDoneRequest.ToUniversalTime().Millisecond;
var t2_m = oS.Timers.ClientDoneRequest.ToUniversalTime().Minute;
var t2_s = oS.Timers.ClientDoneRequest.ToUniversalTime().Second;
var t2 = t2_m*60*1000 + t2_s*1000 + t2_ms ;
if(t1 >= t2){
var t3 = t1 - t2;
sResult = t3.toString();
}
return sResult;
}