zoukankan      html  css  js  c++  java
  • 3.抓包神器Fiddler简介(转载)

    转自:https://www.cnblogs.com/ailiailan/p/hanxiaobei.html

    使用Fiddler的两个场景,1:客户端对服务端返回数据的容错;2:服务端对异常请求数据的处理。

    以下是需要做的准备和要掌握的知识点

     

    4.Fiddler抓包原理解析

    打开tools-->Fiddler Options--Https/Connections,分别按下图勾选:

    配置好了之后,File-->exit退出Fiddler再重新启动。

    Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。当Fiddler退出的时候它会自动注销,这样就不会影响别的程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。Fiddler原理图:

    5.Fiddler修改客户端发出的请求

    Fiddler设置断点修改Request有两种方式:1.通过工具栏设置断点;2.通过命令设置断点。

    方式1:通过工具栏设置断点。

    Rules-->Automatic Breakpoints-->Before Requests;设置之后,Fiddler会拦截到所有发送给服务器的请求。

    接下来要做的演示是:1.打开谷歌(www.google.com.hk),输入查询词“mook”;2.点击搜索;Fiddler要完成的任务是在浏览器发送查询词“mook”给服务器之前,把查询词修改为“test”。从下图可以看到此时发出的请求被Fiddler拦截了,接下来点击session,点击下图框中的“Run to Completion”。

    如图2,会新弹出一个session,修改此session下"WebForms"中的“mook”为“test”;然后再点击“Run to Completion”,到此请求已经执行完成了,搜索关键词已经由“mook”变为“test

    ”,可以通过查看当前浏览器的效果(图3)验证是否成功。

    另外,可以看到用这种方式会拦截所有的请求,而我们所需要测试的站点只是“www.google.com.hk”,想要做到只测试某个站点,可以采用第二种方式:通过命令设置断点。

    方式2:通过命令设置断点。

    在命令行中输入“bpu www.google.com.hk”,回车(如图4),然后可以看到在底部出现如图5框中的信息,这时就做到了只针对“www.google.com.hk”站点进行拦截(可以打开一个其他的网址查看,其他的网址是可以成功访问的)。以上可以看出,通过命令设置断点可以做到针对某个站点进行拦截,也就是方式2的好处所在。当想要撤除断点时,可以在命令行中输入“bpu”,回车,来完成撤除。

    6.Fiddler修改服务器端返回的内容

     Fiddler设置断点修改Response有3种方式:1.通过工具栏设置断点;2.通过命令设置断点;3.AutoResponse设置。

    方式1:通过工具栏设置断点。

    Rules-->Automatic Breakpoints-->After Responses;设置之后,Fiddler会拦截到所有服务器返回的响应。

     接下来要做的演示是:1.打开谷歌(www.google.com.hk),输入查询词“mook test”;2.点击搜索;Fiddler要完成的任务是在服务器发出响应之后把查询词修改为“test”。从下图可以看到此时返回的响应被Fiddler拦截了,接下来点击session,点击下图框中的“Run to Completion”。

    此时浏览器中的tittle已经变成了“test”,说明刚才的修改已经生效了。

    方式2:.通过命令设置断点。

    在命令行中输入“bpafter www.google.com.hk”,回车。然后在浏览器中执行搜索“mook test”,点击session,删除服务器返回的所有内容,输入“mook test”,点击下图框中的“Run to Completion”,此时再查看浏览器,返回的所有内容就是“mook test”。当想要撤除断点时,可以在命令行中输入“bpafter”,回车,来完成撤除。

    方式3:AutoResponse设置

    在浏览器中输入“mook test”并搜索,完成正常的搜索过程;点击session,按下图所示,选中AutoResponder并勾选下方三个选项,然后点击“Add Rule”选择匹配方式,这里默认是“EXACT...”精确匹配,如果两个请求完全相同,那么这个规则生效,由于此次请求内的内容很长(如图6所示),就可能会出现“两次不匹配的情况”,解决的办法是选择模糊匹配(正则表达式)的方式,修改的规则是正则表达式的内容可以唯一匹配要拦截的请求,这里修改为“regex:(?inx)^https://www.google.com.hk/serah?.+”,因为所有session中只有我们要拦截的session才包含正则表达式中的内容,“.+”的作用是连接多个符号(如图7),然后选择返回状态“404_Plain.dat”,然后点击“Save”。

    此时刷新浏览器,可以看到如图8所示的结果,证明本次的拦截成功了。

    这是Fiddler提供的默认的返回内容,如果想自定义返回内容该怎么办呢?如图9,选择“Find a file”,选择一个实现编辑好的文件(txt,如图10),然后点击“Save”。

    此时刷新浏览器,可以看到如图11所示的结果,证明本次的拦截成功了。

    通过以上3种方式,我们就可以测试当服务器返回异常数据时,客户端的稳定性。

    7.Fiddler实现会话的过滤、对比及请求的编解码

    7.1,会话的过滤

    在浏览器中执行多次请求,session区域会有大量的请求,如果想过滤出“www.baidu.com”的请求,可以通过图12所示的方式来完成。

    7.2,会话的对比

    Ctrl键选中两个session,右键选择如下图中的“Compare”,对比的结果如图13所示,用“标红”、“标黄”的方式来表明两个session的差异。

    7.3,请求的编解码

    选择一个sesion,点击Tools-->TextWizard,弹出如下图14的窗口,其中‘...Decode’是解码,‘...INcode’是编码,图中将发送的请求中的“mook+test”解码为“mook test”,而mook test”正是我们所搜索的内容。

    8.Fiddler实现Host的配置

    方法:Tools->HOSTS,按下图15勾选,并点击蓝色链接,就可以在窗口中设置host了。

    9.Fiddler构造HTTP GET请求

    举例:构造一个在www.google.com.hk中搜索“mook”的请求;步骤:1.在浏览器中搜索“mook”,2.在回话中找到这个请求的session,复制图16中绿色框中的请求的头部信息(header),3.如图17,请求区域选择“Copmoser”,把红色框中的内容复制到绿色框中(注意去掉尾部的协议“HTTP/1.1”),4.修改绿色框中url的关键字,5.点击棕色框中的“Execute”按钮;至此完成了本次HTTP GET请求的构造。

    10.Fiddler构造HTTP POST请求

    举例:构造如图18中登陆的一次post请求。步骤:1.复制图19中的header信息,2.切换到“Copmoser”,粘贴到绿色框中,然后把图20中的红色框内容剪切到“Request Body”中,修改header中的内容,最终如图21所示,点击“Execute”按钮,结果如图22所示,证明我们成功的构造了一次post请求。

    很多时候,需要修改post请求中的参数,可以在“Copmoser”中的“Request Body”内修改。

    11.Fiddler抓取手机上的网络数据包

    设置环境:1.配置Fiddler允许监听https,2.配置Fiddler允许远程连接,3.手机端设置代理服务。

    Fiddler上的设置如前文中4.Fiddler抓包原理解析”,手机上的设置如图23,其中“代理服务器主机名”为fiddler所在电脑的ip地址,“代理服务器端口”为8888。经过这样的设置之后,手机上所有访问网络的请求都会转发到fiddler,然后再由fiddler转发给后端服务。

    上文中提到的客户端为pc浏览器时Fiddler的应用,在客户端为手机app时也同样适用。

    接下来演示一下如何使用“AutoResponder”来修改服务器返回给app端的内容,通过这样的修改可以模拟各种异常数据返回给app端,从而验证app端的容错情况。步骤:1.选择一个session,在服务端返回的Response中找到一个在app上可以明显被看到的内容,如图24中的“谈姐弟恋的,原来都是这样的女人”,2.点击图24中的绿框,弹出编辑窗口,修改“谈姐弟恋的,原来都是这样的女人”为“谈姐弟恋的,原来都是这样的人”(如图25),保存txt文档。3.切换到“AutoResponder”,再次选中图24中的session,选择模糊匹配规则,并把步骤2中保存的txt文档导入到如图26中的绿色框中,点击svae,4.清除所有session,退出APP,再重新启动,此时我们可以看到之前修改过的返回内容已经生效了。

    那么,使用fiddler抓取手机包有哪些优点呢?

    1.无需root权限;2.Android&IOS都适用;3.操作简单、界面清晰。

    12.为什么使用PostMan做API接口测试

     既然已经有很好用的fiddler工具了,为什么还需要用PostMan呢?因为在做API接口测试时,会遇到以下的问题:

    1.后端服务的提测时间要早于客户端,很难去构造测试需要的请求;2.很难用客户端模拟异常请求;3.Fiddler的Composer无法实现自动化验证。

    而PostMan能够弥补以上的问题,那么PostMan能够应用于哪些产品呢?PostMan的适用范围:1.PC;2.WAP(无线);3.APP。

    13.PostMan测试HTTP GET请求

    步骤:1.启动app,通过fiddler获取一个get请求(如图28),2.启动postman,在fiddler中选中步骤1中的session,右键copy出url,3.copy出header部分,点击Send。

    如图30,得到了本次请求的返回值,这样我们就可以在发送请求后对返回值进行校验;步骤:1.选中Request区域的Test,再选择右侧验证方法中红色框住的“Response body:contains string”(验证返回值中是否包含哪些内容),把返回值中的数据copy到绿色框中(两个参数间用&&连接),点击Send,如图31,Response区域的Test中新增了一个Pass记录,说明本次对返回值的校验通过了。以上也就是对Request设置检查点。如果想在回归测试的时候再次执行这次请求的话,可以把这次请求保存到Cellection中(如图32)。

    自动执行一个Cellection中的所有Request

    方法:1.如图33,点击Cellection上的“箭头”,点击“Run”;2.如图35,弹出一个新的窗口,在新的窗口中点击“Start Test”,此时就会自动执行Cellection中的所有请求,另外,还可以设置执行Cellection的循环测试和延时。这就是postman带来的好处:可以收集请求,在需要的时候可以批量的的执行请求。

    14.PostMan测试HTTP POST请求

     步骤:1.启动app,通过fiddler获取一个post请求(如图35),2.启动postman,在fiddler中选中步骤1中的session,右键copy出url,3.copy出header部分(如图36),4.post请求和get请求的最大区别就在于post请求中包含body,在fiddler请求区“Inspectors”中找到“webForms”,把“body”中的内容也逐一复制到postman的请求区的body中(注意选择第二个选项“x-www-form-urlencoded”),至此一个post请求就构造完成了;点击Send。

    同样的,也可以对post请求的返回值进行验证;如图39,postman返回数据选择“Raw”,校验方法和结果同get请求,就不多介绍了。

    15.数据驱动DDT实现API接口自动化测试简介

    以上,我们认识到postman会在回归测试当中帮我们节省很多的人力,那既然postman这么好用,为什么我们还要把数据驱动应用在API接口测试中呢?这是由于我们测试的内容是API接口,在测试的过程中需要输入大量的参数和不同的数据值,如果使用postman去完成的话,需要不断地构造各种请求,而构造各种请求的过程其实是很耗时的,如果我们把这一个过程就脚本的方式去实现的话,会变得更加简单高效。

    既然决定要通过脚本的方式去实现,首先就需要选择一种技术去支持我们来完成这样的实现。使用Python requests模块来实现脚本的自动化,之后我们就可以写出HTTP GET/POST请求的脚本,并且利用DDT将脚本实现参数化。

    16.Python requsts测试HTTP中的GET、POST请求

    代码构成;1.首先代码中引入requests模块和unittest框架;2.TestCase中用字典的形式配置herder、cookies和get/post请求部分。

    17.数据驱动DDT实现API接口自动化测试实战

     以上我们已经实现了get、post脚本,下面来把两条脚本实现参数化,那么如何参数化呢?使用数据驱动的方式。

     代码构成;1.引入ddt模块;2.ddt.ddt修饰TestCase;3.ddt.data设置不同的参数集合;4.测试类中引入参数化的device_id;5.修改请求中的device_id。

  • 相关阅读:
    Ext JS学习第三天 我们所熟悉的javascript(二)
    Ext JS学习第二天 我们所熟悉的javascript(一)
    Ext JS学习第十七天 事件机制event(二)
    Ext JS学习第十六天 事件机制event(一)
    Ext JS学习第十五天 Ext基础之 Ext.DomQuery
    Ext JS学习第十四天 Ext基础之 Ext.DomHelper
    Ext JS学习第十三天 Ext基础之 Ext.Element
    Ext JS学习第十天 Ext基础之 扩展原生的javascript对象(二)
    针对错误 “服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF” 的原因分析
    C# 使用HttpWebRequest通过PHP接口 上传文件
  • 原文地址:https://www.cnblogs.com/yuany66/p/10796753.html
Copyright © 2011-2022 走看看