作者:极客小俊
把逻辑思维转变为代码的技术博主
Fiddler 断点(breakpoints)实战
所谓断点功能就是将你的请求或者响应截获下来,但是不发送也不返回,都放到Fiddler这里, 这个时候你可以做很多事情,比如说,把请求报文改了,或 响应报文改了,再发送给服务器 或 客户端
请求之前执行断点
还记得前面状态栏说过的小空白区域吗? 点击这个区域就会出现断点标志符号,如下表:
| 状态 | 描述 |
|---|---|
意思就是请求之前断点, 也就是当这个状态启动的时候,那么你发送的请求就会卡在这里! | |
| ........... |
以上状态图标其实对应的也就是菜单栏中的Rules--->Automatic Breakpoints--->Before Request
如图
举个例子🌰
我们请求某个网站之前就先把这个断点打开, 那么在请求的时候, 会话列表中所对应的请求也会呈现断点状态的图标, 会话列表中URL所对应的网站也是无法显示出来的, 因为此时此刻请求还未发到服务器。中间被Fiddler所截获 ,那么现在就可以做一些数据和请求信息上的修改
然后等确定要发送到服务器的时候就点击Run to Completion(完成) 把这一个请求发送到服务器端就可以了 !
如图
注意 点击Run to Completion(完成) 只是把当前所选择到的会话解除断点,让它发送到服务器端,从而响应
响应之前执行断点
| 状态 | 描述 |
|---|---|
| [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LaOqoiWK-1651910920401)(img/Icon_4.png)] | 响应在断点处暂停, 也就是说服务器已经返回请求的数据了,但是被Fiddler在中间卡住了,还没有到客户端这一边, 所以当我们开启了这个状态,那么在响应之前就会卡主! |
| ............. |
当我们再次点击一下的时候就会切换到以上状态图标
其实对应的也就是菜单栏中的Rules--->Automatic Breakpoints--->After Request
而After Request(请求之后断点) 和 Before Request(请求之前断点)正好相反
如图
举个例子🌰
还是请求某个网站之前就先把这个请求后断点打开, 那么此时响应信息已经返回了,但是被的时候Fiddler卡主了, 会话列表中所对应的请求也会呈现请求后断点的图标, 会话列表中URL所对应的网站也是无法显示 或者 无法提取最新的页面信息, 因为此时此刻响应还未发到客户端。返回途中被Fiddler所截获
那么如果可以的话,现在就能做一些响应报文信息上的修改
然后等确定要发送到客户端的时候就点击Run to Completion(完成) 把这一个响应发送到客户端就可以了 !
如图
所以在Fiddler拿到响应信息的时候,先断住,然后篡改一些信息之后再发给客户端!
命令断点
大家还记得状态栏上的快速命令执行框吗? 在这里也可以输入来执行一些命令断点
如图
那么一些常见的断点命令如下表:
| 命令 | 描述 | 案例 | 解除断点 |
|---|---|---|---|
bpafter | bpafter后边跟一个字符串,表示中断所有包含该字符串的请求 | bpafter baidu | 输入bpafter解除断点 |
bpu | 跟bpafter功能差不多, | bpu baidu | 输入bpu解除断点 |
bpv | 只中断HTTP方法的命令,HTTP方法如POST、GET | bpv get | 输入bpv解除断点 |
bpm | 只中断HTTP方法的命令,HTTP方法如POST、GET | bpm get | 输入bpm解除断点 |
go | 放行中断下来的请求,相当于工具栏上的go按钮 | go | |
| ................................... | ......................................... |
Fiddler 弱网测试
什么是弱网?
弱网在Fiddler中就是设置网络限速 简单理解也就是在网络不好 或者 网络环境复杂、使用场景多变异常、网络抖动、延时、丢包的环境下进行检查的一种方式 就叫弱网测试
举个例子
一款适配于低资源环境的医疗it系统项目来说,而它的使用场景主要是在一些2G网络环境下,3G网都很少,并且稳定性也是比较差。因此这款网站应用或app应用要想完成交付,就一定要在弱网状态甚至在没有网络状态下运行, 看看是不是能够正常交付!
所以我们要模拟一个弱网环境进行测试 通过Fiddler软件方式利用模拟网络参数来配置弱网环境,就可以达到对带宽、丢包、延时等进行模拟弱网环境目的
在windows环境下我们通常可以使用fiddler和network emulator for windows toolkit来模拟
在mac环境下则可以使用Charles和Xcode自带的开发环境网络异常模拟工具进行测试
Timeline 请求响应时间
在左侧的会话列表窗口选择一个或多个会话,再切换到Timeline选项卡中 便会显示指定的资源从服务端传输到客户端的响应时间!
如图
从上图来看 似乎都属于正常的网络延迟范围之内吧!
那么我们现在就利用Fiddler这个软件来设置一下网络延迟,让网络限速
方法也很简单从Fiddler的菜单栏上选择Rules---->Performance--->Simulate Modem Speeds(模拟调制解调器速度)就可以了!
如图
当我们勾选了Simulate Modem Speeds(模拟调制解调器速度) 之后你在测试一下请求某个网页看看响应时间就知道了!
如图
看到了吧 很明显某些资源请求的时长增加了!
Fiddler 脚本限速
那么到底Fiddler给我们限制了多少网速呢 ?
其实我们可以通过脚本去查看和设置,在Fiddler菜单栏选择Rules--->Customize Rules(自定义规则)
打开Fiddler ScriptEditor编辑器,然后按下Ctrl+ F来搜索关键字Simulate(模拟的意思) 找到if判断的m_SimulateModem变量
如图
以上的代码中写明了注释:
Delay sends by 300ms per KB uploaded意思是每上传1KB延迟发送 要花费300毫秒
Delay receives by 150ms per KB downloaded意思是延迟每下载1KB接收要花费150毫秒
要知道这里的单位是毫秒 而1秒=1000毫秒 那么知道了这个之后,我们就可以手动的来设置网络延迟了!
如图
也就是说我现在发一个请求上传也要1.3秒,并且每一个资源的下载时间也要1.5秒
设置之后保存即可! 就可以再去Timeline中查看一下请求会话的响应时间了!
注意: Simulate Modem Speeds(模拟调制解调器速度) 依旧要为勾选状态!
如图
是不是比刚才很卡了呢!
小结
总之弱网测试的目的就是尽可能保证用户体验, 也就是说我们的项目或页面的数据响应时间是否可以被用户所接受, 常见的一些关注点包含如下:
- 热启动和冷启动时间、页面切换、前后台切换、首字时间,首屏时间等..
- 页面呈现是否完成一致。
- 超时是否符合定义,异常信息是否显示正常。
- 是否有超时重连。
- 安全角度:是否会发生dns劫持、登陆ip更换频繁、单点登陆异常等。
- 大流量事件风险:是否会在弱网下进行更新apk包、下载文件等大流量动作。
- 是否会有页面的crash以及显示的错乱、session是否一致、请求堆积处理等
- 登录、单局、支付等 不能有导致项目无法正常进行UI显示、交互问题
- 不能有损害用户利益 或者 可被用户额外获利的问题
- 需要有合理的断线重连机制,避免每次重连都返回到登录界面等等..
补充扩展
当然这里要多说一句 软件模拟弱网方式是由一定的弊端的,因为不是非常接近弱网络环境,想要更接近弱网环境,例如大多数专业项目的测试高延时、高丢包、响应时间、页面呈现、超时文案、超时重连...等会更倾向于通过硬件方式来协助测试,但这种方式又会变得很麻烦,都是通过树莓派 但是软件方式的成本低且实施起来容易操作而已!
如果觉得有帮助到你的话,就请在来个 "点赞"👍 "评论"✍️ "收藏"💙 支持一下!
如果以上内容有任何错误或者不准确的地方, 欢迎在下面 👇 留个言指出、或者你有更好的想法,欢迎一起交流学习 💕💕💕