随着人们生活水平的日益提高,手机已经成为了我们生活中的一部分,无论是在家里、工作中、地铁上或是在聚会中等等,都会有手机的身影。所以手机软件也便一步步崛起,购物、外卖、新闻、娱乐、视频等,我们已经离不开APP。
但APP在带给我们便利的同时也会带来一些不必要的问题,比如:一些不好的app设计或缺陷,有些App会频繁在后台联网去服务端获取信息,可能带来意外的流量,导致用户卸载app或引起投诉,直接影响用户体验,造成不必要的麻烦,因此在移动产品测试中,很有必要对app使用的流量进行度量! 用户没有直接使用的情况在android系统更易出现,因为目前android的消息推送机制不是借助统一的管道,而是各个app定时启动后台进程到自己的服务端去询问是否有新消息,有就拉去到客户端,而这个询问本身就会带来流量的消耗。 对于android的app有一些特有的流量测试的方法。 Android系统自带了统计功能。通过直接读取android系统上的两个文件的内容: Proc/uid_stat/{UID}/tcp_snd和tcp_rcv,其中UID是每个app安装时分配的唯一编号用于识别该app,tcp_snd中的数据表示法术的数据累计大小,单位是字节,tcp_rcv表示接收到的数据累计大小。 通过adb命令进入shell可以获取到这些数据。 首先通过包名获取app的PID: 再访问/proc/{PID}/status文件查找app对应的UID,再查看上述的2个文件: 这个做法也是很多手机安全软件的做能比较简单的给出各个app的流量消耗情况,不过这个方法没有其他维度的区分,只有统计总数据。 还能通过系统API来获取基本的流量数据。TrafficStats类提供了多个方法获取不同角度的流量数据: 还可以在app内部往来访问的接口代码加上相关的统计功能来获取流量的数据。 以上代码中getContentLength获取了本次响应的数据量并在日志打印了出来。 实际应用中很多app会将借口访问的功能做一些封装,上层应用可以复用,针对这些情况可以在借口访问的代码封装中插入流浪统计的功能,可以详细区分每个接口的访问次数和数据量。 但是这种方法统计不到一些系统的DNS等流量,还有不使用接口封装的模块产生的流量会被遗漏。 |