流量测试
一些不好的APP设计或缺陷,比如频繁,重复地在后台连网去服务端获取信息,或非Wifi下自动下载资源,下载时没有流量提示弹框等问题,可能带来意料之外的流量消耗。
流量测试的策略可以从用户使用的相关性角度来大致分为两类:
1.用户操作直接导致的流量消耗,可以选择经典的用户场景;
2.用户在没有使用情况下的流量消耗,即待机时或者在后台运行时的流量消耗(Android系统更容易出现,目前Android的消息推送机制不是借助统一的管道,而是各个APP定时启动后台进程到自己的服务端去询问是否有新的消息。而这个询问的过程本身就会到来流量和电量的消耗)
下面分别从Android和iOS平台进行流量测试方法的讨论。
1.Android系统
基于系统自带的统计功能
一、列出手机中所有的包名:
adb shell
ls -l /data/app
二、通过adb读系统文件获取uid:
adb shell dumpsys package | grep userId
如: dumpsys package com.dtdream.hzgovernment | grep userId
三、在adb shell内读取文件
cat /proc/net/xt_qtaguid/stats | grep tcp和udp总流量
cat /proc/uid_stat//tcp_snd 及tcp_rcv tcp总流量
不过这个方法有一些比较显而易见的局限,就是只能统计总数据,没有其他维度的细分,不能提供更详细的参考。
2.iOS系统
一、通过Instruments自带的Network来查看网络流量
正常情况下能查看到APP的网络吞吐情况和包数据
3.基于Wifi代理的方式获取流量数据
在Android或iOS设备上设置代理,在PC端开启Fiddler或者Charles工具,就可以查看到手机上发出的请求和接收到的响应。
通过这个方法就能或得每个接口的数据流量(这种方式会少算一些底层协议层header的流量)。
常见的流量节省方法
1.数据的压缩:
包括接口文本数据的压缩,js文件以及图片的压缩。
2.不同数据格式的采用:
在传输相同信息的的情况下,采用更精简的文件格式。比如采用JSON格式作为接口数据返回格式通常比XML格式要小;
WebP格式相较于JPG,PNG格式,具有更优的图像数据压缩算法,在同等尺寸和和画质的情况下,WebP格式的图片体积更小。
3.控制访问的频次
主要针对后台数据上报,push消息检查等定时机制。
4.只获取必要的数据
有时APP一页会展示非常多的内容,而用户可能只会查看一部分,过多的从后台拉取数据就是一种浪费,所以可以采用分屏加载或者懒加载的方式来减少流量消耗。
5.缓存
将一些图片,js等之前访问过的数据暂时缓存起来,等以后使用到相关功能时,就不用再去拉取相关数据。但需要注意控制缓存的有效期和更新策略。
另外由于手机存储空间有限,通常也需要控制整个缓存的大小,并给用户提供清除缓存的选项。
6.针对不同网络类型设计不同的访问策略
通过判断当前的网络类型(移动网络还是WiFi),控制数据访问的频率,预加载策略和图片的质量。比如在WiFi场景下,可以以更好的用户体验为导向。在2G/3G/4G网络情况下默认不加载图片等大的图,而需要用户手动点击后按需下载等。
弱网测试
基于代理的弱网络的模拟
弱网测试的思路是手机和PC/Mac都连接同一个wifi,在电脑上开启代理软件,然后修改手机上的网络设置,将代理指向电脑上对应的IP和端口,这种情况下,由于手机流量经过电脑,电脑上的网络状况就会影响到实际的手机网络。
下面介绍的两个公交分别适用于Windows和Mac平台。将网络模拟工具跑在PC/Mac上,并打开代理软件(Fiddler或Charles),然后手机连接同一个WiFi热点,并在WiFi的设置里,把歹意指向对应的PC/Mac.
1.Windows下的Network Delay Simulator+Fiddler/wireshark
Flow Match Condition可以设定选择对哪些网络连接进行控制,包括本地和远程IP,协议类型和端口。
Flow Simulated Conditions 可以模拟网络状况,包括双向带宽,网络延迟,丢包率等维度。
点击Save Flow和确定就能生效。
要验证弱网络是否生效,一方面可以从APP的响应情况看到差别,另一方面,也可以在PC上抓包来看看具体的网络层情况,比如因为丢包产出大量的TCP重传,延迟等等。
确定弱网生效后,就可以操作APP,观察APP各功能的情况,也可以观察日志中有没有什么异常发生。
2.Mac下的Network Link Conditioner+Charles
启用后,Network Link Conditioner 可以根据内置的某个预设来改变 手机的的网络环境,可以选择:
Edge
3G
DSL
WiFi
High Latency DNS
Very Bad Network
100% Loss
WiFi
每个预置可以设置上行或下行的带宽极限,延迟,和丢包概率(当任何值被设置为 0 时,该值将会同你的计算机的网络环境保持一致)。
若想模拟多种因素的特定组合,也可以创建自己的预设。
3.iOS系统自带的网络状况模拟:
将iPhone和Mac笔记本向量,然后在Mac上打开Xcode,此时手机的设置中就会出现“开发者”这个选项。
选择 Network Link Conditioner
选择需要设置的网络场景:
除了自带的几种网络场景,还可以选择“Add a profile...”自定义合适的网络。
不过严格来说以上几种对弱网络场景只是一些简单的模拟,实际生活中可能会有更加复杂和多变的情况。上面的模拟中,参数是固定的,二十几种肯定是多变的,而且也没有包括网络类型,有网/无网的切换。
如果要模拟更真实的情况,需进行实际场地实测。