Fiddler在软件测试中的具体应用
一、抓包,辅助定位bug(web中类似谷歌浏览器F12开发调试工具)
合格的软件测试工程师,不仅仅需要能够发现bug,还需要能透过bug表象,分析出问题根本原因,从而提升bug的解决效率,通过fiddler可以抓取接口请求的request和response,通过对参数进行分析,可以定位是前端问题还是后台问题,直接找到对应的开发人员,可以快速解决问题。
1.1、示例--APP抓包分析
配置前提:手机与电脑在同一局域网
配置步骤:
1、Fiddler设置打开Fiddler, Tools-> Options。选中"Allow remote computers to connect". 是允许别的机器把HTTP/HTTPS请求发送到Fiddler上来(配置完后记得要重启Fiddler).
2、获取电脑ip地址:cmd输入ipconfig,或者直接通过fiddler查看,鼠标放在fiddler界面右上角网络连接图标处,即可展示本机ip(如图)。
3、手机安装证书:首先要知道Fiddler所在的机器的IP地址,手机浏览器访问“ip地址:8888”,FiddlerRoot certificate" 然后安装证书并设置信任。
4、打开手机, 找到你的无线网络连接, 打开HTTP代理,选择“手动”, 输入Fiddler所在机器的IP地址(比如:192.168.1.104) 以及Fiddler的端口号8888
二、构建需要的测试场景(通过拦截篡改接口的请求或返回)
在测试过程中,为了测试覆盖率,往往需要执行很多场景的用例来验证某一功能在各种场景下的业务处理能力,包括正常、异常的场景;而仅仅通过页面端来发起校验,往往是不能够模拟所有场景的。另外,如果系统调用的有外部接口,根据外部接口的不同返回结果进行不同的逻辑处理,那么就需要外部接口的提供方配合我们进行测试,而在实际操作中这是很难做到的,这个时候我们就可以使用fiddler来篡改接口返回的数据,构造我们需要的测试场景,可以大大提高我们的测试效率。
2.1、断点篡改请求参数
举例:boss后台模拟充值
输入充值金额,提交前,进行断点设置,fiddler中选中Rules->Automatic Breakpoints->Before Requests;页面进行业务操作,此时在fiddler页面可以看见对应的请求图标会有个红色通行标示,表示请求过程中设置了断点,客户端发出的请求被fiddler拦截了
在左侧点击这个请求,在右侧Inspectors->TextView或WebForms等界面下会看到请求发送的具体内容,直接修改需要模拟的测试场景数据,再点击右下页面的run to complete按钮即可。
此时再看接口,会发现接口向服务器发送的请求是我们篡改过的。此方法在充值,购物支付等重要场景可以对服务端的安全性进行校验。本质是绕过前端的限制直接向服务端发起请求,有多种应用场景
2.2、接口指向本地资源。在本地文件中配置你想要的的返回结果,请求特定接口时返回你自己配置的资源。
举例:将“baidu”这个关键字跟本地电脑的一张图片绑定,再访问带有“baidu”关键字的地址,就会被劫 持,具体步骤如图所示:
2.3、直接修改指定接口的返回结果,构造所需要的测试场景
举例:
三、APP弱网模拟测试,网络延迟
移动端测试,常常会对网络有一定要求,因为移动端使用的网络环境是多变的,传统方法要满足不同网络可能要将移动端置于不同网络的真实环境中,但是fiddler可以帮助实现此功能。
举例:APP弱网测试
fiddler中选中Rules->Cutomize Rules,Ctrl+F搜索关键字:m_SimulateModem;
首先修改m_SimulateModem值为true,开启网络模拟
修改uploaded、downloaded的数据来模拟不同的弱网场景:
上传1KB需要300ms,转化一下上传速度:1Kb/0.3s = 10/3(KB/s),如果想设置上传的速度为50KB/s,你则需要设置Delay 时间为 20ms;(=1000/50)
2G一般上行/下行速率约为:2.7、9.6kbs,模拟设置为:uploaded 约 2962 ms,downloaded 约 833 ms;(弱网一般指2G网络)
3G一般上行/下行速率约为:384、2560kbs,设置为:uploaded 约 2.6 ms,downloaded 约 0.39 ms;
四、验证对重复请求的限制(
有些需求,我们需要验证下后台接口是否对请求做了只能处理一次的限制,以防止漏洞产生
解决办法:
1.Reply:点击该按钮可以向服务器重新发送选中的请求,他可以帮助我们验证接口是否屏蔽了重复请求的情况
2.模拟多次重复点击,点击“Reissue Requests”的同时按下SHIFT键会弹出提示对话框,要求指定每个请求应该被重新发送的次数。