在使用手机程序、游戏过程中是否会经常出现聊天内容不出现或者延迟出现、图片、视频、游戏中的模型没有渲染出来,点击没有反应等?我们在玩王者的时候,是否有遇到过自己开局进场的时间比其他队友迟?在团战中技能的释放出现延迟的现象?当在其他条件是正常的前提下,出现这些状况就表明极有可能是网络状态不好的表现。
那么针对这种情况的测试,
1、卡死、崩溃、无响应、闪退、断网。
2、业务交互数据传输正确性。
能模拟弱网的工具有许多,不再累赘。这里我使用Network Emulator Toolkit
1.设置Network Emulator Toolkit模拟测试网络;
2.设置wifi共享网络;
3.手机连接该wifi,打开App进行测试。
1:为什么选择Network Emulator Toolkit
a)Fiddler进行限速较为简单和灵活,配置也较为方便,但是由于它是一个应用层的HTTP的代理,只能模拟该层上的行为,对于一些复杂的网络层的丢包、重传等恶劣情况就不能很好的模拟出来,而且对于其他协议的应用也不支持。主要还是用来抓包的。
ps:这里为什么说应用层的代理就不能做到丢包、重传等模拟呢?这个就要贴出下面这个著名的TCP\IP的7层协议栈了。因为重传、丢包都是在在网络层发生的。所以只有在网络层的工具才能模拟出这个效果。但是Fiddler是处在应用层的,所以就模拟不了这个了。
b)在Mac上自带了Network Link Conditioner,Windows上可以使用Network Emulator for Windows Toolkit。Linux的话可以用TC。
2:基本使用方法
a)打开NetworkEmulator Toolkit,新建Channel(通道)。菜单栏 Configuration -> New Filter 或工具栏的快捷按钮。
b)新建Filter。菜单栏 Configuration -> New Filter 或工具栏的快捷按钮。可选择所有网络(ALL NetWork),选好过滤条件后,点击添加(ADD)按钮,添加过滤条件;选中已添加的记录,点击删除(Delete)按钮,可删除记录;选中已添加的记录,重新修改过滤条件,点击修改按钮(Modify),可修改记录。这里需要主要的是,如果勾选上了,是代表这个过滤条件没有启用。
c)新建连接。菜单栏 Configuration -> New Link 或工具栏的快捷按钮。选中link,右键Set UpStream/Set UpStream设置上行下行网络模拟情况。
d)开启控制
点击Start开始按钮,开始模拟网络。
e)打开WiFi共享工具,手机连接WiFi,操作App进行测试。
f)点击Stop停止网络模拟。
1:测试点
正常游戏的主要流程,例如:登录、进入游戏、游戏中操作、游戏结算等;
游戏中涉及支付购买的地方,例如购买钻石、购买道具、游戏复活等;
游戏中涉及领取奖励的地方,例如每日奖励、任务奖励、抽奖等;
游戏中对网络敏感的交互功能,例如实时对战;
2:测试方法
第一种方法:
单独针对上述的每一个测试点,分别进行:发包、收包断网测试。这种方式只适用于客户端单个请求上行对应服务器单个响应回包,收发消息是一对一同步进行的一般手游场景,比如购买,升级,开局,结算等。
这里的发包、回包断网测试可能比较模糊,解释下:
发包、回包断网测试的过程如下:
1:在断网的情况下,进行事情触发,比如点击按钮等。
2:网络恢复后手动或者自动再次请求
一般预期的结果是:
1:不会无限重试(有些游戏会不断的重复发包),
2:有合理提示,比如超时转菊花,
3:网络恢复后可以正常执行该逻辑
4:转菊花期间网络恢复,无异常
5:多次请求后网络恢复,逻辑正常,不会导致消耗和收益不一致(这个bug在网易某款游戏中出现过,当网络卡的情况下,多次点击按钮后,会导致多次获得家族声望)
第二种方法:
设置一种网络模式,执行玩家经常遇到的游戏场景。同时配合在测试点上,采用断网或切换网络等操作,观察是否符合有效(能完成逻辑)或无效预期(不能完成逻辑)。
第三种方法:
利用Network Emulator Toolkit给网络加上延迟、丢包等属性。然后在这种网络情况下,查看游戏的表象(特别是pvp战斗情况)是否正常。
3:本次测试说明
目前我所在的项目还处在demo阶段,所以支付、登入等模块没有完成,也就没有进行相关的弱网测试。本次的弱网测试主要观察战斗过程是否正常(技能是否能正常释放),即采用第三种方法。
具体的方法是:手机wifi链接用360随身wifi工具导出的wifi,然后在该台电脑用Network Emulator Toolkit对网络加延迟、丢包等属性。那么此时相当于游戏客户端的网络有了延迟、丢包等情况。游戏服务器放在另外一台电脑上,不受Network Emulator Toolkit的影响。
4:结果展示
网络情况 |
请求响应时间(ms) |
操作是否正常 |
100ms,100kb/s,0% |
||
100ms,100kb/s,2% |
||
100ms,100kb/s,5% |
||
200ms,50kb/s,5% |
||
400ms,50kb/s,5% |
||
400ms,20kb/s,8% |
||
1000ms,20kb/s,8% |
||
1000ms,10kb/s,10% |
||
2000ms,10kb/s,20% |
1:统计响应时间
现在是人肉直觉看下反馈,后期可以研究下采用在代码中插入统计时间的相关函数,具体的得到在弱网条件下的游戏响应时间,并且进行数据可视化。
当然比如技能特效,UI显示是否正常,还是需要人肉去观察的。
2:考虑到自己项目还处于demo阶段。本次弱网测试只是简单了进行了战斗技能释放,其他的用例并没有执行。等后期还需要进一步实践和研究,这里只是抛砖引玉,并且做个简单的理论总结。有好的意见和补充,请告知我,不甚感激。
3:网络切换测试。
补充材料:
Network EmulatorToolkit常用参数说明
1、Loss
No Loss:默认,不模拟丢包。
Periodic loss: 模拟周期性的丢包。按填写数量(设为x个),每x个包,就丢一个包。
Random loss: 模拟随机丢包,按给定丢包的概率,随机丢包。(设置1,代表丢包率是100%,设置0.5,代表丢包率是50%)。
2、Error
真实世界中,当数据包经过网络传输时,包中的一到多个字节(bit)数据可能发生错误。
No Error:不模拟传输错误。
Random error:根据给定的比例,模拟随机发生传输错误。
错误概率单元(Error Rate Unit):
Bit error: 设置出错概率为每个字节出错的概率。
Packet error: 设置出错概率为每个包出错的概率。
出错和丢包的关系
大多数情况下,包出错导致包丢失,特殊情况下,包中的数据被编码,协议栈可恢复被损坏的包,经过修正后,包为可接受的包,即包不丢失。此外,除了包出错会导致包丢失,其它因素也会影响包丢失,如连接失败(Link failure),缓冲区溢出(buffer overflow),队列管理和传输超时(transmission timeout)等。
3、Latency
延迟来自某应用发送的数据包被另一个应用程序接收到的时间。
Fixed delay: 按给定值,延迟固定时间(单位:毫秒)packets are delayed for a fixed amount of time.
Uniform delay: 按统一分布,延迟一定量的时间(时间控制在最大最小值之间)
Normal delay: 按正态分布.延迟一定量的时间(average:平均值,Devation:偏差)
Linear delay: 延迟一定量的时间(在给定时间周期(Period)内,延迟的时间大小从最小值线性增加到最大值,当达到最大值时,又从最小值开始。
Burst delay: 根据给定概率(Probability),延迟一定量的时间(Latency),丢包数控制最大值和最小值之间。
4、BW&Queue
如果不指定带宽(bandwith),则不修改传输速率。
5、Disconnection
模拟周期性断开连接的行为。
Connection time: 一段时间周期内,link保持连接状态的持续时间。
Disconnectiontime: 一段时间周期那日,link保持断开状态的持续时间
Disconnectionrates: link发生断开连接的比率。
目录
一、关注点在于:
二、使用的工具:
三、步骤:
四、Network Emulator Toolkit使用简介
五、测试方案
六、改进方向和进一步研究
主要参考文献:
【1】http://ks.netease.com/blog?id=2795
【2】http://wetest.qq.com/lab/view/?id=20?from=content_zhihu