51Testing软件测试论坛

标题: fiddler功能介绍及实战演练 [打印本页]

作者: LJboy    时间: 2020-10-19 17:35
标题: fiddler功能介绍及实战演练
1.        概览
Fiddler是一款功能强大的数据包抓取软件。它通过代理的方式获取程序http通讯的数据,可以用其检测网页和服务器的交互情况,能够记录所有客户端和服务器间的http请求,支持监视、设置断点、甚至修改输入输出数据等功能。
本文以界面抓包为例,介绍Fiddler的基本功能、实际抓包及查看方法。
2.        Fiddler工作原理
浏览器与服务器之间通过建立TCP连接以HTTP协议进行通信,浏览器默认通过自己发送HTTP请求到服务器。 而Fiddler是c#开发的http代理服务器,工作于七层中的应用层,能够捕获到通过的http(s)请求。它使用代理地址:127.0.0.1,端口:8888.在安装了Fiddler的系统中,启动Fiddler之后会监听8888端口。
一般情况下使用浏览器对服务器发送相应的请求,使用Fiddler的话,就是先向Fiddler发送请求,再由Fiddler替代我们向服务器发送请求。如下图所示:

简单说就是:浏览器 < -> Fiddler < -> 服务器
fiddler常用于以下功能:
1. 解析请求:如:解析http请求状态,请求头,请求正文,返回头,返回正文等
2. 修改请求,如:设置断点,则可以修改发出去的请求数据,或者修改请求返回的数据
3.重定向请求,如:替换远程文件
4.构造请求,如:构造请求发送数据
测试人员使用该工具主要使用的是功能1
查看浏览器下发的参数及返回的数据数据,来判断问题是界面的问题还是后台的问题。
3.        Fiddler常用功能介绍
4.1        界面详解

会话列表:记录每一次的请求,Fiddler只能捕获http协议和https协议,自定义的协议无法捕获。
HttpRequest:浏览器发出的请求,可以在这个地方查看浏览器下发的参数是否正确。
HttpResponse:服务器返还的信息,可以在这个地方查看到服务器返回的数据是否正确。
4.2 Inspectors功能介绍
Inspectors对请求和相应提供查看和分析,单击Inspectors右边界面会分为上下两部分,上部分为HttpRequest,下部分为HttpResponse,如下图示。


HttpRequest区域TextView对应的是浏览器下发的正文,通过该信息,可以查看到浏览器下发参数数据。
HttpResponse区域对应的TextView对应的是浏览器返回的正文,通过该信息,可以分析服务器返回的数据。
HttpResponse区域对应的JSON是对TextView的一种格式化处理, 数据显示比较有清晰,容易解读。
测试人员在定位问题时,可以通过以上数据对下发的数据和返回的数据进行解读,判断问题出在哪个模块,为开发人员处理问题提前进行定位。
4.3 statistics功能介绍
该功能对浏览器从服务器上取回数据的耗时统计。如下图:

1表示发送字节数
3表示接收字节数
2表示发送和接收之间的耗时,如上图的overall Elapsed 0.00.00.011
该功能可以查看界面和服务器之间的耗时统计,同时也是服务器端性能统计的一个手段。
4.        Fiddler抓包实战
5.1 准备工作
        代理服务器设置:
由于fiddler的运行机制就是监听本机上的8888端口的http代理,所以我们要将浏览器的IE代理设置为127.0.0.1:8888,以IE为例:
点击浏览器的【选项】—【Internet选项】—【连接】—【局域网设置】-【高级】
如下图:

设置HTTP协议IP地址为127.0.0.1,端口为8888
        Fiddler Https会话设置:
默认情况下,fiddler是不会捕获https会话的,所以需要提前进行设置。
启动Fiddler软件,单击【Tools】-【Fiddler Options】,在弹出的新窗口中,点击HTTPS选项卡,将捕获HTTPS连接这一选项前面全打上勾,点击OK就设置成功了,如下图:

5.2 抓包实战
通过抓包来定位问题原因。
        以**工具获取指定网元下单盘信息为例:
选择指定网元执行统计,fiddler抓包如下:

发送请求:
token=5580521025689280614&strJson={"emsIdSeq":null,"objIdSeq":[42949807177733]}&type=0
这个请求标识的工程和指定网元
返回的网元信息如下,在textview TAB页中
5e4
[{"boardId":42949773623349,"emsId":10000,"neId":42949807177733,"boardName":"XSO2","userLabel":"","physicalAddr":"工程1-680-1-架1-Citrans R865-XSO2-10","logicalAddr":"工程1-680-1 [2-1]-XSO2-10","slotAddr":"10"},{"boardId":42949773623350,"emsId":10000,"neId":42949807177733,"boardName":"SCUO2","userLabel":"","physicalAddr":"工程1-680-1-架1-Citrans R865-SCUO2-09","logicalAddr":"工程1-680-1 [2-1]-SCUO2-09","slotAddr":"09"},{"boardId":42949773623351,"emsId":10000,"neId":42949807177733,"boardName":"SCUO2","userLabel":"","physicalAddr":"工程1-680-1-架1-Citrans R865-SCUO2-08","logicalAddr":"工程1-680-1 [2-1]-SCUO2-08","slotAddr":"08"},{"boardId":42949773623352,"emsId":10000,"neId":42949807177733,"boardName":"XSO3","userLabel":"","physicalAddr":"工程1-680-1-架1-Citrans R865-XSO3-07","logicalAddr":"工程1-680-1 [2-1]-XSO3-07","slotAddr":"07"},{"boardId":42949773623353,"emsId":10000,"neId":42949807177733,"boardName":"XGO1","userLabel":"","physicalAddr":"工程1-680-1-架1-Citrans R865-XGO1-06","logicalAddr":"工程1-680-1 [2-1]-XGO1-06","slotAddr":"06"},{"boardId":42949773623354,"emsId":10000,"neId":42949807177733,"boardName":"RCUO1","userLabel":"","physicalAddr":"工程1-680-1-架1-Citrans R865-RCUO1-00","logicalAddr":"工程1-680-1 [2-1]-RCUO1-00","slotAddr":"00"},{"boardId":42949773623568,"emsId":10000,"neId":42949807177733,"boardName":"GSO2","userLabel":"","physicalAddr":"工程1-680-1-架1-Citrans R865-GSO2-11","logicalAddr":"工程1-680-1 [2-1]-GSO2-11","slotAddr":"11"}]
0
以上是文本信息,标识了该网元下有哪些单盘,盘所在的槽位是多少。
也可以单击Response界面中的JSON tab页,显示格式好的数据信息,更直观。
通过发送和接收的信息,可以对问题进行初步定界:后台问题还是界面问题。

        获取一个指定网元下的单盘信息耗时统计
见截图:

在这个图中,各种耗时显示的非常清楚,如下:
ClientConnected: 23:26:13.598      
ClientBeginRequest: 23:26:27.170  浏览器开始请求的时间
GotRequestHeaders: 23:26:27.170   
ClientDoneRequest: 23:26:27.170   浏览器完成请求的时间
Determine Gateway: 0ms
DNS Lookup:  0ms
TCP/IP Connect: 2ms
HTTPS Handshake: 0ms
ServerConnected: 23:26:27.172
FiddlerBeginRequest: 23:26:27.172   Fiddler开始请求的时间
ServerGotRequest: 23:26:27.172
ServerBeginResponse: 23:26:27.225   server开始反应的时间
GotResponseHeaders: 23:26:27.225
ServerDoneResponse: 23:26:27.225     server完成反应的时间
ClientBeginResponse: 23:26:27.225    浏览器开发反应的时间
ClientDoneResponse: 23:26:27.225     浏览器完成反应的时间
Overall Elapsed: 0:00:00.055         总耗时。

浏览器到fiddler代理耗时0.00.00.002
Fiddler代理到服务器开发反应耗时0.00.00.053
可以大致推算出后台对于数据的处理效率
        登录运维工具界面,输出的密码是错误,抓包验证
输入IP,打开运维工具界面,输入用户名和错误的密码,抓包如下:

HttpRequest区域显示token=&strJson={"captcha":null,"hasCaptcha":false,"pwd":"d033e22ae348aeb5660fc2140aec35850c4da997","randomNum":null,"userName":"admin"}
显示的是输入用户名和密码信息。从抓包的信息来看,用户名是admin,密码是被加密的。
HttpResponse区域显示:
error_密码错误
这就表示发送的参数密码验证是错误的,需要界面排查下发的参数是否有问题。
以上就是针对实际测试项目,展示fiddler在定位问题中的作用。


作者: applepen    时间: 2020-10-19 23:16

作者: Miss_love    时间: 2020-10-20 08:56





欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2