Fiddler 抓包工具使用指北: 弱网络环境模拟限速测试流程

综合技术 2018-05-18 阅读原文

一:为什么要做弱网络测试?

实际的客户现场可能网络不稳定或者网速低,恶劣的网络环境会导致出现一些bug,影响用户体验甚至某些服务不可用。而公司内部的研发环境网络通常比较顺畅,难以复现这种bug。要解决这种问题,就需要制造弱网络的环境进行测试、复现并修复问题。

二:如何模拟恶劣网络环境?

本文仅以fiddler为例,其他的做个了解,不具体研究。

三:Fiddler怎样模拟弱网?

Fiddler 是一个 HTTP 调试代理,它能够记录所有你电脑和互联网之间的 HTTP 通讯,Fiddler 也可以让你检查所有的 HTTP 通讯,设置断点,以及修改所有的“进出”的数据(指Cookie/HTML/JS/CSS 等文件)。

利用Fiddler来模拟恶劣的网络环境,实现简单,较为直观,缺点是只能支持那些利用HTTP进行通信和交互的服务。

  • 打开fiddler,默认情况下Rules –> Performances –> Simulate Modem Speeds 是未勾选状态,网络正常。当选中此选项(模拟光猫网速)后,网速就会变很慢,打开一个网页要加载很久。这样就实现了弱网络效果。

  • 设置

    如果想了解(上传和下载)网速的具体数值,可以使用一个工具speedtest,测速方法很简单,网上有大把教程。

    http://www.speedtest.net/是英文的网站,应该是国外版,访问比较慢。而且Windows系统只支持Windows10下载客户端,我用的Windows7使用chrome浏览器要安装Speedtest扩展程序就得翻墙,所以不推荐使用。建议访问http://www.speedtest.cn/网站,测速生成结果很快且是中文的。支持手机客户端APP下载。

    四:限速原理

    Fiddler限速是以网络延迟的方式实现的,网络延迟时间*网速=传输字节数。

    • 点击Rules – Customize Rules(快捷键Ctrl + R)打开Fiddler ScriptEditor,或者直接点开右侧主页签的FiddlerScript。

    image.png

    • 打开该文件后,Ctrl + F 查找m_SimulateModem标志位,可以看到如下代码:

    if (m_SimulateModem) { // Delay sends by 300ms per KB uploaded. oSession["request-trickle-delay"] = "300"; // Delay receives by 150ms per KB downloaded. oSession["response-trickle-delay"] = "150"; }

    注释说明: request-trickle-delay 中的值代表每KB的数据被上传时会被延时多少毫秒; response-trickle-delay 则对应下载时每KB的数据会被延时多少毫秒。比如你要模拟上传速度100KBps的网络,那上传延迟就是1KB/100KBps=0.01s=100ms,就改成100。

    当勾选了Simulate Modem Speeds时, request-trickle-delay response-trickle-delay 就会被设置,如果本身网速已经相当快的话,这里设置的值就可以近似地推算出开启模拟后的上传和下载带宽了,比如默认设置下上传延时为300ms下载延时为150ms,可以推算出大致的模拟带宽为:

    上传带宽=(1 * 8/1000) /0.300 ≈ 0.027Mbps

    下载带宽=(1 * 8/1000) /0.150 ≈ 0.053Mbps

    实际情况下得到的带宽可能会有误差,受各种外因影响不会这么精确。

    由此可见下载带宽是上传的两倍,也就是延时越小,带宽越大。带宽和这里的延时是成反比的。

    五:调整网络环境参数

    Fiddler 默认的 Simulate Modem Speeds速度实在太慢了,而这个限速的参数是可以调整的,如果需要再快一点可以修改配置文件Fiddler2ScriptsCustomRules.js。(如若修改勿忘备份原文件)在fiddler官网http://www.fiddlerbook.com/Fiddler/dev/ScriptSamples.asp可以找到参考示例。

    下面提供了两种简单的修改脚本的方法,选择一种即可。

    • 方法1

    查找到if (m_SimulateModem)语句,修改代码。下面的脚本实现了一个随机延时量设置,使得网络带宽不是恒定为一个低速的值,而是会在一定范围内随机抖动:

    static function randInt(min, max) { return Math.round(Math.random()*(max-min)+min);}if (m_SimulateModem) { // Delay sends by 300ms per KB uploaded. oSession["request-trickle-delay"] = ""+randInt(1,50); // Delay receives by 150ms per KB downloaded. oSession["response-trickle-delay"] = ""+randInt(1,50);}
    • 方法2

    点击fiddlerScript 在代码里找到onBeforeRequest,这里定义了在发送请求前做什么。加入如下代码可以实现延迟:

    oSession["request-trickle-delay"]="3000"; //请求阶段延迟3秒oSession["response-trickle-delay"]="3000"; //响应阶段延迟3秒

    添加代码

    上面两种方法选其一,修改后保存配置文件(Ctrl+S)或者清掉缓存(Rules –> Performances –>Disable Caching),再次勾选Rules –> Performances –> Simulate Modem Speeds 进行测速。 注意:每次编辑并保存配置文件后,Simulate Modem Speeds选项会被取消,请重新勾选。

    限速完毕一定要取消勾选,不然会影响上网。像第二种方法由于请求和响应都延迟3秒,会导致访问网页很慢。

测试窝

责编内容by:测试窝阅读原文】。感谢您的支持!

您可能感兴趣的

Troubleshooting Data Refresh Performance Issues Wi... A lot of people have problems with the performance of OData data sources when loading data into Power BI and Excel. ...
Fiddler监控任意APK的HTTPS请求 APK的http请求中使用的安全措施大致可以分成3个阶段: java层的签名+加密 so层的签名+加密 https 当然,并不是说在so中的安全措施就一定比在java层的安全,https亦如此(曾经看过一个...
Decrypt HTTPS traffic with Wireshark and Fiddler × Table of Contents Using Wireshark on Windows 7 – Key Facts and Overview Understandin...
Network Sniffing with Fiddler Now and then when you encounter a problem, you have to put on your Hacker hoodie and just go for it. That's how I discov...
Serve Javascript and source map files locally usin... One of the major downsides of developing on Dynamics 365 is that the feedback loop can be pretty long. Say if we wante...