最近在搞一个智能穿戴项目。
手环手表等智能穿戴项目中最核心的功能是运动计步功能。
计步功能的业务逻辑是主要流程是通过手环设备采集运动数据,通过app提交采集的数据并发送到服务端,在服务端的算法库解析以后,回传给app显示出来。
由此可见,在整个业务逻辑过程中,数据的传输是很重要的一环。
因此有必要针对app开展网络测试。
[TOC]
当前app的网络环境比较复杂,在网络制式上就存在2G
、3G
、4G
网络,以及越来越多的公共wifi
。不同的网络环境以及网络制式的差异,都会对用户使用app造成一定的影响。如果app没有针对各种异常的网络状况进行兼容处理,那么用户就很有可能在日常使用中碰到app闪退、ANR
、数据丢失等严重的问题。
测试维度
1、功能测试
对于功能测试,要考虑在各种网络制式下app的功能体验。虽然现在4G网络越来越普及了,但是作为测试,依然要考虑到所有可能发生的场景。虽然不可能把所有网络制式都覆盖到,但是我认为还是有必要在弱网环境下,针对app开展基本的功能测试,保证app在弱网环境下能够把整个业务流程跑一遍。弱网环境下,有时候会对app的功能造成严重的影响,例如:在弱网环境下,同步跑步数据,如果app没有针对这个方面做处理,那么很可能导致app把设备的数据同步过来,但是却无法上传,如果开发人员没有针对这种情况做处理,那么这段数据就可能丢失。
2、响应时间
响应时间这个指标在性能测试中出现比较多,对于用户体验以及app的市场占用率都有很重要的影响。安卓手机一般超过5秒钟无响应就会报ANR的错误,ios手机响应时间过长也会报错。
据调查显示,用户能够忍受的最佳响应时间是2秒以内,超过5秒无响应的话,一般性子比较急躁的用户很可能就会直接退出页面了,如果超过10秒无响应,很多人都会选择杀掉app。app经常处于无响应或者响应时间过长的状态,会导致大批的用户转移到竞争对手的产品上。
3、异常测试
异常测试是指验证app针对各种网络异常情况是否做出了容错处理,这里面包括异常提示信息、出错容错机制、超时判断处理机制、出错以后自动重连等。
从一个app的异常测试结果,就可以看出开发人员对这款app投入的精力以及负责程度。
4、无网测试
无网测试测试主要针对断网的情况下,app各个功能是否受到影响。例如:公司的手环app在开始某个版本出现断网以后,进入周数据统计页面,从服务器请求数据时出现闪退问题。
5、弱网UI测试
弱网的情况下,app很可能出现UI刷新不及时或者不刷新的情况,这时候就可能会导致呈现在用户面前的是一个残缺的页面。偶会也会导致出现页面UI元素错乱的情况。
6、网络切换测试
现在的公共wifi越来越多,用户使用app中很可能发生这种情况:用着4G网络时, 走上十几米突然连上一个咖啡厅的公共wifi,再走一段距离又断开了连接重新切换到4G模式。针对这种情况,我们在测试过程中也要考虑到不同的网络切换是否会引发一些问题。
手环app和其他常规的app存在很大的不同。像淘宝微信等app,其中嵌入了大量的H5页面,和服务端交互很频繁,而手表的app在网络交互这一块,并不是那么频繁,只有在几个模块上需要和服务端进行交互。因此,结合以上在网络测试中的测试方向,针对公司app的情况,可以设计出app的网络测试方案的测试点。
1、网络测试中,首先要考虑无网络的情况。
- app各个功能在无网络情况下是否可用
- app各个页面之间切换是否正常
- 发送网络请求时是否会导致闪退、卡死等异常情况
- app各个页面是否显示完整美观,未刷新的页面是否做了相应的提示和处理
- 在无网络情况下数据是否会丢失
- 无网络提示信息是否友好
2、然后应该考虑弱网情景
- 弱网情况下app是否针对请求做了超时处理
- 网络延迟的情况下,操作app进行数据同步、OTA升级是否会发生Crash、ANR等严重错误
- 弱网情况下,app请求回调未完成时,执行其他动作以及交互时,是否会出现app闪退等异常。
- 弱网情况下,原始数据是否出现丢失的情况
- 弱网环境下,是否会出现请求堆积的情况
- 弱网环境下,app各个页面是否显示完整
- 系统超时,提示信息是否清晰明确
- 弱网情况下app的响应时间是否在一个合理的时间范围内
3、最后考虑网络状态之间的转变
- 断开网络连接以后,操作app各个功能是否正常
- 同步数据过程中,断开网络连接,app是否出现异常情况
- 传输数据过程中,网络由wifi切换到gprs,app是否出现异常情况
- 弱网环境下发送的请求是否在恢复网络以后出现重复提交的情况
以上的测试类型里面,弱网测试是值得关注的重点。
很多时候,app在正常网络环境中运行良好,但是在弱网情景下则频繁出问题。
弱网又称为网络环境不良、网络传输延迟,我们俗称网络卡的现象。
通常我们在咖啡厅或者车站的时候,连接公共wifi都有一种体会:网页打不开、微信无法发送、qq消息延迟等,这些现象大多是网络环境不良造成的。
当我们使用公司手环app时,下拉同步一次数据,app有时会在同步界面停顿超过10秒以上,如果app在同步数据时,未做超时处理机制的话,很可能会一直卡在数据同步界面,给用户造成不良的使用体验。
弱网测试就是通过各种工具和手段来模拟网络延迟,来验证软件产品在弱网环境下的工作情况是否符合产品预期定义。
搭建测试环境
如果要做弱网测试,那么首先必须先搭建一个弱网的环境。
搭建弱网环境有几种方法:
- 采用天然的弱网场所。
- 购买网络损伤仪等硬件设备。
- 使用软件模拟产生弱网环境。
天然的弱网环境有电梯
、GPRS盲点
、可控隔离箱
等,这些环境不太适合我们日常的测试工作,购买网络损伤仪价格又比较贵,还有另一种方式就是通过各种工具模拟来模拟弱网环境。其中比较简单的方法是使用笔记本电脑创建一个假热点,但是不是每个人都随身带着一个笔记本电脑,所以我们可以采用软件模拟的方式来搭建弱网环境。
可以模拟弱网环境的软件比较多,在window环境下使用比较多是使用抓包工具Charles和Fiddle或者微软的工具Network Emulator for Windows Toolkit以及Facebook的开源工具ATC。
由于ATC配置较为麻烦且需要linux环境,因此本文只介绍如何用Fiddler和NEWT来搭建弱网环境。
Fiddle模拟
首先我们可以采用Fiddle这个工具简单模拟弱网环境。Fiddler模拟弱网环境的原理是通过设置代理来延迟发送或接收数据的时间来模拟限速。
首先需要注意的是,模拟弱网环境手机连接的wifi的ip地址必须和我们PC机的ip地址或者网关处于同一个网段。
手机wifi的ip地址是:
192.168.2.1
,那么我们的PC的ip地址也必须在192.168.2.xxx
,否者Fiddle无法通过代理的方式来监听到通过这个网关的请求。
如何才能保证我们的手机IP地址和PC的IP地址在同一个网段?
- 方法一、手机和电脑同时连接同一台wifi,在代理设置里面使用DHCP的方式自动获取ip地址,这样二者都是处于同一个网段内。
- 方法二、使用拥有无限网卡的PC机或者笔记本,创建一个wifi热点,通过手机连接热点,也可以在同一个网段内。创建Wifi热点的步骤这里就不再详述了。
因此我们最好在测试之前准备好一块无线网卡或者随身Wifi。
操作步骤
以上准备工作完成以后,打开Fiddle工具。
点击菜单栏内的Rules
—Custom Rules
,或者开发Fiddle后直接按Ctrl + R
可以直接打开一份JS文本文件。在文本文件内查找类似下面的内容。
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["request-trickle-delay"] = "300" #代表上行速率,发送1KB需要300ms
oSession["response-trickle-delay"] = "150" #代表下行速率,接受1KB需要150ms
Fiddle默认的上传/下载1KB的数据需要300ms和150ms,要达到模拟弱网的情况,只需要把后面的数值改大即可。
Fiddler的算法: 1000/下载速度 = 需要等待的时间(毫秒)
我们设置1000ms,那么可以大致计算出网速为1Kbps。这里我们分别设置上行和下行参数为1000和800。
设置好参数以后保存退出custom.js
文件,这时不要忘记查看菜单内Rules
—Performance
内Simulate Modem Speeds
选项有没有被勾选,一般设置完custom.js
文件以后,此选项被默认为未勾选状态。
勾选Simulate Modem Speeds
选项,你会发现,打开一个网页需要的时间已经慢了许多。
以上设置完毕以后,打开Fiddle菜单栏Tools
—Telerik Fiddle Options
默认设置监听端口为8888
,勾选Allow remote computers to connect
。
在手机wifi内修改网络(ios手机和andriod手机修改方式类似),选择高级选项,在代理服务器一栏填写你的电脑主机的ip地址,下方端口内填写Fiddle里设置的8888
.
这时候,你在手机上执行的网络请求操作在Fiddle界面已经显示出来了,手机发出的网络请求和接收的返回数据都已经处于延迟状态。
NEWT模拟弱网
虽然Fiddle可以通过模拟延迟的方式达到弱网环境,但是真实的网络环境是很复杂的,Fiddle无法模拟网络错误、丢包、数据包乱序、网络断断续续的情况。
这时候就需要使用另一个更强的工具Network Emulator for Windows Toolkit
准备
使用这个工具之前,我们需要提前准备有AP功能的无线网卡,可以使用360wifi或者小米wifi等产品均可。连接无线网卡以后在电脑上创建一个热点Testwifi,并启动热点。手机连接Testwifi这个热点以后,我们开始配置NEWT
。
安装好NEWT
以后,打开界面是这样的:
首先我们创建一个过滤器:点击菜单栏configuration
选择new filter
,或者点击上图工具栏内的沙漏图标。
选择为所有网络设置过滤All Network
,也可以选择下方的IPv4
为某个特定ip设置过滤器。这里勾选ALL Network
,其他选择默认。
点击Add按钮后,下方表格内会出现一个新建的过滤器,点击close
完成设置。
下一步设置一个新的连接,点击configuration——New Link,新建一个连接。
上图中新建的连接未配置时显示为灰色,在连接上右键点击,选择Set Upstream,弹出如下窗口。
上图菜单栏依次为Loss
、Error
、Latency
、BW&Queue
、bg Traffic
、Reorder
、Disconnected
,依次代表可以设置丢包、网络错误、延迟、带宽和队列、背景传输、乱序数据、模拟断续网络。
这里最常用的就是前三个。依次可以设置丢包、错误、延迟的网络状态。由于选项比较多,下面只介绍最常用的功能。
丢包设置
No Loss 不丢包
Periodic Loss 设置每多少个包丢失一个packets
Random Loss 设置随机丢包比率
当数据包经过网络传输时,包中的数据可能发生错误。
Error设置
No Error:不模拟传输错误。
Random error:根据比率模拟随机发生传输错误。
延迟发送和接受数据的时间
No Latency 不模拟延迟状态
Fixed 延迟固定时间(单位:毫秒)
Uniform 按统一分布,延迟一定量的时间(时间控制在最大最小值之间)
Normal 按正态分布.延迟一定量的时间(average:平均值,Devation:偏差)
Bandwith 设置网络带宽
Queue 设置队列,下方为丢包规则,分为丢包头、丢包尾、随机丢包等
其他选项使用的不多,不在这里详述。以上四个选项设置完成以后,点击确定按钮完成上传的设置。以同样的步骤,在Local Application
下方的连接上右键点击,选择Set Downstream
,设置下行连接的状态。
设置完成以后如下图
点击菜单栏Action-Start
,或者点击三角符号![](file:///C:\Users\XUEDON~1\AppData\Local\Temp\ksohtml\wps97AC.tmp.jpg),这时我们设置好的过滤器和连接已经启动,可以在cmd
命令行ping
一下百度的地址查看一下效果。
如图显示出现请求超时、延迟发送、丢包等现象,说明我们配置已经生效了。
最后,按照上文提到的方法,连接wifi热点以后,就可以按照之前规划好的网络测试方案和测试点进行测试了。