1.简介
现在这个时代已经属于流量时代,用户对于App或者小程序之类的操作界面的数据和交互的要求也越来越高。对于测试人员弱网测试也是需要考验自己专业技术能力的一种技能。一个合格的测试人员,需要额外关注的场景就远不止断网、网络故障等情况了。还要对于弱网的数据定义,不同的应用所界定的含义是不一样且不清晰的,不仅要考虑各类型网络最低速率,还要结合业务场景和应用类型去划分。按照移动的特性来说,一般应用低于2G速率的都属于弱网,也可以将3G划分为弱网。除此之外, 弱信号的Wifi通常也会被纳入到弱网测试场景中。无论是做web端还是app端的测试,我们都需要对弱网进行测试,对于弱网方法有很多种,如:Fiddler模拟弱网,控制电脑的网速等,今天介绍下Fiddler如何进行测试弱网。
2.什么是弱网?
弱网看字面意思就是网络比较弱,我们通称为信号差,网速慢、卡。通常低于3G网络速率和弱信号的Wifi都属于弱网。现在这个科技时代大量的用户会在地铁、隧道、电梯和车库等场景下使用APP 。这种场景下,网络会出现延时、中断和超时等情况。
3.什么是弱网测试?
弱网测试主要是对网络带宽、丢包、延时等进行模拟弱网环境去测试不同应用软件,属于健壮性测试。根据大部分用户使用移动端软件模拟弱网测试,调研而得出来的网络数据情况, 弱网环境控制上行速率为10 下行速率为30这个范围内都算弱网测试。
4.为何要进行弱网测试?
国内移动智能设备迅速普及,大大增加了用户碎片化使用智能设备的概率,用户可能会在车站、地铁、高铁、公交、电梯间、楼梯间、隧道、地下车库等弱网环境下使用互联网应用。我们需要针对这些弱网环境,验证应用软件的健壮性和容错性,提高用户体验,避免因用户体验不友好造成核心用户的流失。
如果你想学习接口自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386
【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click
5.如何做弱网测试?
对于测试人员来说,要高效地进行弱网测试,就需要借助第三方工具搭建出各种弱网的环境,模拟一个弱网环境即可。宏哥这里主要讲解和分享第三方工具Fiddler。通过工具对数据链路层进行干扰,设置不同的网络带宽、丢包、延时参数来模拟弱网环境,进行测试。首先,只要搭建出来弱网环境, 模拟一个弱网环境即可。可以通过软硬件方式两种。软件方式利用 模拟网络参数来配置弱网环境,就可以达到目的。你也可以选择第三方,比如:Charles , Network link Conditioner 。在各类网络软件中,主要就是对带宽、丢包、延时等进行模拟弱网环境。但是方式是有一定的弊端的,不是非常接近弱网络环境,想要更接近弱网环境。在windows环境下我们通常可以使用fiddler和network emulator for windows toolkit来模拟,在mac环境下则可以使用Charles和Xcode自带的开发环境网络异常模拟工具进行测试。例如大多数专项测试,会更倾向于通过 硬件方式来协助测试,但这种方式又会变得很麻烦,都是通过「树莓派」网维协助搭建!如果出现有些无法模拟的情况,只能靠人工移动到电梯、地铁等信号比较弱的地方。补充一点, 软件方式的成本低且实施起来容易操作。
6.弱网测试工具
常用的弱网测试工具有:Fiddler、Charles、Clumsy、弱网仪等。
7.Fiddler模拟限速的原理
我们可以通过Fiddler来模拟限速,因为Fiddler本来就是个代理,它提供了客户端请求前和服务器响应前的回调接口,我们可以在这些接口里面自定义一些逻辑。Fiddler的模拟限速正是在客户端请求前来自定义限速的逻辑,此逻辑是通过延迟发送数据或接收的数据的时间来限制网络的下载速度和上传速度,从而达到限速的效果。
那么我们的算法就是:
1000/下载速度 = 需要delay的时间(毫秒) //比如50kb/s 需要delay200毫秒来接收数据。
8.参考常见网络制式的上行、下载速度表
参考常见网络制式的上行、下载速度表,如下图所示:
9.弱网测试思路
9.1弱网测试思路简单归纳
1.网络正常情况下功能正常使用。
2.无网络情况下功能是否可用。
3.弱网网络情况下功能是否可用:
(1)后端服务器是否做了超时处理、提示是否友好;
(2)APP 是否会发生 Crash 或者 ANR 情况;
(3)数据是否会丢失;
(4)前端页面展示是否完整.....
4.网络转变:由 4g 到 3g 、由强 WiFi 到弱WiFi、断网情况下功能是否可用。
9.2思维导图
弱网测试思维导图,如下图所示:
10.弱网测试点
根据测试思路我们可以罗列测试要点,如下图所示:
11.弱网测试用例
根据测试要点我们可以编写弱网测试用例,如下图所示:
12.弱网模拟常用工具
12.1 360免费WiFi
12.1.1前提准备
1.电脑插入无线网卡(台式需要一般需要插入网卡,笔记本一般不需要)
2.电脑安装360免费WiFi软件
12.1.2部署环境
1.在360免费WiFi 设置中配置WiFi名称和WiFi密码,如下图所示:
2.手机连接此无线WiFi。
3.在360免费WiFi 中打开已连接的手机,点击图标,就能清楚地看到下载和上传的网速。
4.在360免费WiFi 中打开已连接的手机,点击限速管理图标,开始设置下载速度和上传速度,下载速度2KB/s,上传速度10KB/s,那么表示下载的最大速度为每秒2KB/s,上传的最大速度为每秒10KB/s。如下图所示:
以上方法通过限制下载上传的网络请求,来达到测试弱网的目的。
12.2浏览器限速,打开F12控制台
宏哥这里就简单地介绍两种浏览器,其他浏览器类似
12.2.1Edge
1.Edge的设置如下,如果要自己设置网速,就点击自定义设置,如下图所示:
12.2.1Chrome
1.Chrome网络设置,如下图所示:
12.3Fiddler
12.3.1Fiddler中启动弱网
1.打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds。如下图所示:
2.勾选之后访问网站会发现网络慢了很多。
12.3.2设置弱网的参数
1.打开Fiddler,Rules—>Cutomize Rules。如下图所示:
首先来分析一下这几行代码:
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";
}
首先来判断m_SimulateModem是否为true(是否开启),也就是是否设置了弱网模式。在前边我们可以找到这样的代码默认没有开启, 当勾选了Simulate Modem Speeds时, var m_SimulateModem: boolean = false;会变成 var m_SimulateModem: boolean = true;有兴趣的小伙伴或者童鞋们可以自己验证一下,宏哥说的正确不。
// Cause Fiddler Classic to delay HTTP traffic to simulate typical 56k modem conditions
public static RulesOption("Simulate &Modem Speeds", "Per&formance")
var m_SimulateModem: boolean = false;
Delay sends by 300ms per KB uploaded:上传1KB内容需要300ms,转化一下上传速度:1Kb/0.3s = 3.3KB/s,也就是说网络上行速度只有3.3KB。
oSession[“request-trickle-delay”] = “300”;
Delay receives by 150ms per KB downloaded:下载1KB内容需要150ms,转化后的下载速度:1KB/0.15s=6.6KB/s,也就是说网络下载速度只有6.6KB。
oSession["response-trickle-delay"] = "150";
如果你想设置下载的速度为50KB/s,你则需要设置Delay 时间为 20ms。也可以限制上传的速度,调整oSession[“response-trickle-delay”]的值即可。
12.3.3编写自定义脚本
1.我们可以扩展CustomRules.js里的逻辑,参照Jscript的文档可以在模拟弱网环境中加入更多自定义的逻辑,这里实现了一个随机延时量设置,使得网络带宽不是恒定为一个低速的值,而是会在一定范围内随机抖动,这里的randInt(1,50)应该很好理解,代表1-50中的一个随机整数,这样就会出现偶尔有延迟偶尔网络又良好的情况。参考代码如下:
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);
}
此外,(1)路由器修改上行和下行速度,(2)Charles弱网模拟(后期关于这个工具宏哥也可能出一个系列的文章),(3)iOS手机自带Network Link Conditioner 弱网模拟。
13.验证效果
为了更清楚地查看效果,宏哥就单独抓取百度网址的包,就把访问百度,然后搜索“北京-宏哥”的请求和响应抓取,看一下效果,具体操作步骤如下:
1.打开fiddler–选择过滤器,如下图所示:
2.勾选“Use Filters”,选择“Show only the following Hosts(仅显示以下主机)”,在下边的编辑框中输入百度网址,如下图所示:
3.点击“Action(动作)”,选择“Run Filterset now(现在运行筛选器)”,如下图所示:
4.没有启动Fiddler弱网,开始抓包,访问百度,搜索“北京-宏哥”,如下图所示:
5.Ctrl+A全选所有的会话,查看Statistics和Timeline,如下图所示:
6.启动Fiddler弱网,再次重复第4步和第5步,是不是感觉比刚才很卡了,一直在加载转圈。如下图所示:
7.查看Statistics和Timeline,如下图所示:
14.恢复设置
完成测试之后,需要再次执行:打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,关闭弱网模拟。否则上网的速度在一启动Fiddler就会有影响,切记切记!!!
15.小结
Fiddler模拟弱网环境的局限性
Fiddler进行限速较为简单和灵活,配置也较为方便,但是由于它是一个应用层的HTTP的代理,只能模拟该层上的行为,对于一些复杂的网络层的丢包、重传等恶劣情况就不能很好地模拟出来,而且对于其他协议的应用也不支持。