移动端弱网测试实践
弱网测试作为健壮性测试的重要部分,对于移动端测试来说必不可少。这是因为目前移动端产品的使用用户所处的网络并非完全的流畅WIFI环境,仍有相当体量的用户主要使用4G、3G、2G等网络,另外因移动端产品使用场景多变,如进地铁、上公交、进电梯等,使得弱网测试显得尤为重要。毕竟考虑到各种场景的客户端展示及容错,能极大提升产品印象和用户体验。
一、弱网测试的思路篇
总结了下(如上图所示),弱网测试主要进行特殊网络状态下的功能测试同时关注用户体验,具体来说,弱网测试包括弱网功能测试、无网状态测试、网络切换测试等,测试的同时关注用户体验的诸多方面。
1.弱网功能测试
这一部分主要是在各种非wifi网络环境下进行的功能测试,同时模拟高延时和高丢包的异常网络环境进行健壮性测试。2G/3G/4G的网络可以通过使用电话卡移动/联通/电信等网络进行模拟,关注页面的响应时间、页面呈现是否完整一致等。高延迟和高丢包的网络环境需要借助工具来模拟,在windows环境下可以使用fiddler和network emulator for windows toolkit来模拟,在mac环境下则可以使用charles和Xcode自带的开发环境网络异常模拟工具进行。工具的使用在工具篇具体介绍。
弱网功能测试建议将整体的功能测试用例在弱网环境下进行一轮测试,相同模块下的功能可以分多个网络条件进行测试。这部分发现的问题可能会有:页面图片在弱网环境下加载不出来(图片加载逻辑需优化)、需要模版的页面版式结构混乱(模版文件在弱网环境的加载需优化)、页面响应时间较长没有任何显示(页面显示逻辑待优化、重试机制加入)等。
2.无网状态测试
无网状态测试则是在切段网络的情况下进行的测试,主要关注页面的显示与交互、本地数据的存储、断网功能的使用等,经常该部分也需要与网络切换部分协同进行。通常来说,(1)断网情况下请求一个非本地数据的页面需要设定一定的时间等待上限,及时提示网络异常以及提示重试;(2)断网情况下请求一个部分本地数据的页面需要观察本地数据的部分是否加载显示正常,待请求的部分是否符合交互给的缺省样式一致;(3)断网情况下请求一个完全本地数据的页面是否显示正常。这里还需考虑本地数据存储的情况,有些需要联网后上报服务器的数据本地是否正确存储,联网后这些数据能否正常上报。
无网状态测试建议按照页面划分进行,针对每个页面单独测试无网状态的显示,页面间跳转的显示,页面内功能的点击和显示,同时关注无网到有网时的页面恢复显示状态、数据上报情况是否正常。
3.网络切换测试
这部分主要是进行几个不同网络场景的切换,包括wifi-2G/3G/4G、wifi-无网、2G/3G/4G-wifi、2G/3G/4G-无网、无网-2G/3G/4G、无网-wifi等。主要关注页面的显示与交互,尤其是弱网到wifi,wifi到弱网的情况,是否会有页面的crash以及显示的错乱、session是否一致、请求堆积处理等。
4.用户体验关注
弱网测试的目的就是尽可能保证用户体验,关注的关键点包括:
(1)页面响应时间是否可接受,关注包括热启动、冷启动时间,页面切换,前后台切换,首字时间,首屏时间等。
(2)页面呈现是否完整一致
(3)超时文案是否符合定义,异常信息是否显示正常。
(4)是否会有超时重连
(5)安全角度:是否会发生dns劫持、登录ip更换频繁、单点登录异常等。
(6)大流量事件风险:是否会在弱网下进行更新apk包、下载文件等大流量动作。
二、弱网测试的工具篇
在安卓产品测试的过程中,使用到的弱网测试工具主要是fiddler模拟网络延迟,以及network emulation for windows toolkit模拟网络丢包场景。MAC环境下的charles等抓包工具的实现原理是相同的。这里主要介绍下安卓弱网测试场景下使用到的工具。
1.fiddler
fiddler主要是使用Rules->Performance->Simulate Modem Speeds功能进行的网络延迟模拟,点击Rules->Customize Rules进行设置,打开自定义脚本编辑器,如下图所示:
红框内标出的就是设置延迟时可以操作的上行和下行网络延迟时间,意为每上传/下载1KB的数据要延迟多少毫秒。这里我把请求(上行)时间延迟设置为3000ms,响应(下行)时间延迟设置为1000ms(模拟了2G网络的速度)。
这里通过计算上行和下行的网络延迟时间,可以模拟出想要的网络效果。利用 (1KB/下载速度)x1000 = 要delay的毫秒数 来计算。比如我们要模拟2G的网络。2G网络上行和下行的网络速度如下图所示:
我们看到在各种制式下上行速度都是2.7kb/s,下行速度是9.6kb/s,根据1KB=8kb,可以计算出上行延迟为(1/(2.7/8))x1000=2962ms ,同理下行延迟未(1/(2.7/8))x1000=833ms。这里我取了近似整值3000ms和1000ms,模拟了2G网络。同理也可以通过计算模拟3G网络,附3G网络制式及速度图如下:
设置完成后,在fiddler里将Rules->Performance->Simulate Modem Speeds选中即可使设置生效。
2.Network Emulation for Windows Toolkit
fiddler只能设置延迟,无法进行丢包的设置。在windows上有个简单易用的工具Network Emulation for Windows Toolkit可以用来设置网络丢包情况。设置丢包有两个关键步骤,一是设置电脑网络,二是将移动设备接入电脑共享的网络。详细看下每个步骤:
(1)设置电脑网络
工具简单界面如下所示:
最上方是本地应用,最下方的本地网络。中间的两块区域上部分需要建立链路,下部分可以对特定IP进行过滤。因为我们需要进行的是网络丢包设置,所以过滤器这边就可以不做设定。我们点击顶部菜单栏Configuration->New Filter,在弹出的设置框里点击Add,新增一个过滤器,如下图所示:
接着点击Configuration->New Link新增一条链路,此时界面显示如下:
我们没有对网络做任何限制,此时网络是畅通的,ping一下看:
果然没有任何丢失,且无超时发生。
此时我们设置网络丢包,在新建链路点击右键,选择Upstream设置上行网络。这里我们设置了随机丢包率为40%:
同理也可以设置下行网络。设置完成后要点击Action->Start开始使设置生效。生效后我们再来ping一下网络看看:
可以看到此时有丢包和超时发生了。
除了设置随机丢包率,我们也可以设置周期丢包率、引入错误等网络异常情况。甚至也可以设置延时。总之该工具在弱网测试中可用性还是很强。
(2)移动端设备接入电脑网络
设置完PC端网络环境,由于我们是移动端设备,需要移动端设备接入PC的网络,因而需要做网络共享。当PC有无线网卡的情况下,可以首先利用无线网卡共享有线网络的数据,然后利用Connectify或者360wifi等共享wifi工具,让移动端设备共享PC的网络。当PC没有无线网卡的情况下(我们的办公PC就没有网卡--),安卓端手机可以使用usb连接电脑使用PC的网络。这里有个简单易行的办法,就是使用小米手机助手的一键开启共享上网功能(当然了目前只能支持共享给小米手机,且系统安卓版本低于6.0)。在电脑上安装小米手机助手,小米手机通过usb开启usb调试连接电脑,就可以共享电脑的网络了。如下图所示:
点击一键开启后,可以看到小米手机的网络全部关闭,此时设备使用的就是电脑共享出来的网络。
至于非小米手机的其他设备,也可以使用usb线连接电脑共享其网络。可参考网上的设置教程。
总之,弱网测试作为健壮性测试的一种,是测试过程中必不可少的重要环节。考虑到弱网测试的各项要点以及合理使用各项工具模拟出复杂、严苛的网络环境,能极大提高产品的可用性,保证产品上线后应对各种应用场景的使用质量。以上是我在安卓产品弱网测试过程中总结出的一点经验,还有许多未考虑周全的测试点,还需要在后续的测试中继续加强经验和总结,与大家共同探讨。