使用Fiddler模拟网络

Fiddler已经预置提供了模拟Modem速度的选项,其位置位于: 
Rules->Performances->Simulate Modem Speeds 
fiddler模拟网络
勾选该选项后,所有通过Fiddler代理的流量都会变得用56k modem上网一般。 
要直观观察限速后的效果,最好使用运行在浏览器中的测速工具,这里推荐用“http://www.speedtest.cn/”在线测速工具进行测试。 
调整模拟恶劣网络环境的参数
直接模拟Modem速度实在是慢爆了,事实上就算是在很差信号的情况下,手机移动网络的速度都已经超过了56k 的Modem速度,所以采用默认的配置模拟出来的环境,并不一定符合需求,此时就需要对限速的参数进行调整。 
Fiddler本身就提供了一个配置文件供调整这些参数,点击: 
Rules – Customize Rules… 
打开CustomRules.js文件(默认位于用户目录的文档目录下的Fiddler2Scripts),后缀名是js。在编辑内容中找到“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"; 
        }


该标志位控制着oSession的两个参数值的设置,当勾选了Simulate Modem Speeds时,request-trickle-delay与response-trickle-delay就会被设置,其中request-trickle-delay中的值代表每KB的数据上传时会被延时多少毫秒,response-trickle-delay则对应下载每KB的数据会被延时多少毫秒,如果本身网速已经相当快的话,这里设置的值就可以近似地推算出开启模拟后的上传和下载带宽了,比如默认设置下下载延时为150ms,上传延时为300ms,对应可以推算出大致的模拟带宽为:
上传带宽=(1*8/1000)/0.300≈0.053Mbps 
下载带宽=(1*8/1000)/0.150≈0.027Mbps
编写自定义脚本
进一步地扩展CustomRules.js里的逻辑,参照Jscript的文档可以在模拟恶劣环境中加入更多自定义的逻辑,这里实现了一个随机延时量设置,使得网络带宽不恒定为一个低速的值,而是会在一定范围内随机抖动:

 

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);
}


通过进一步扩展CustionRules.js可以实现很多需要的恶劣环境模拟场景,如果场景较为复杂的话,也可以通过编写Fiddler的插件的方式,编写C#插件代码来进一步控制Fiddler的行为,在这里就不多做赘述了。
Fiddler模拟恶劣网络环境的局限性
Fiddler进行限速较为简单和灵活,配置也较为方便,但是由于它是一个应用层的HTTP的代理,只能模拟该层上的行为,对于一些复杂的网络层的丢包、重传等恶劣情况就不能很好的模拟出来,而且对于其他协议的应用也不支持。(复杂网络环境模拟可以参见文章  
网络异常测试之网络模拟(windows&linux)



留言