对于移动端的 App,除了 App 本身的功能外,用户还会非常关心 App 流量的消耗情况如何,因此,流量测试作为保障 App 整体质量的重要一环,需要我们进行重视。伴随 Android 系统的升级,Android 权限也进一步收紧,Android6.0 及以上的操作系统,传统的性能检测工具 App 都已无法再收集应用的流量信息,因此我们需要新的测试工具,来帮助我们进行流量测试
Fiddler 是一个 http/https 协议调试代理工具,它能够记录并检查所有你的设备与互联网之间的http/https 通讯,设置断点,查看所有的 “进出” Fiddler 的数据(包括cookie,html,js,css,image等文件)。 Fiddler 要比其他的抓包工具体量更小(最新版本v4.6.20172.31233,文件大小4.12MB)、操作更为简单,是普遍使用的抓包工具。使用 Fiddler 进行流量测试,一方面适用于所有的 Android 机型,另一方面可以抓取详细的请求信息,满足我们对测试工具的需要,因此,新的流量测试方案中,我们将选取 Fiddler(版本号v4.6.20172.31233,下文提到的 Fiddler 均是该版本),作为我们的测试工具。
使用 Fiddler 对手机抓包前,需要对 Fiddler 及手机进行配置。首先配置 Fiddler,安装完成 Fiddler后,打开软件,点击 Fiddler 的配置项 ”Options…”,如下图所示:
在 Fiddler 的 Connections 配置项中,勾选 ”Allow remote computers to connect” ,如下图所示:
接下来,是配置手机。如果想使用 Fiddler 对手机进行抓包,必须保证电脑与手机在同一局域网下。这里需要配置的是无线热点的代理服务器,把代理服务器的 ip 配置为电脑的 ip,端口号为上文中默认的 8888,如下图所示:
重启 Fiddler,关手机关闭 wifi 热点,然后再次打开。此时,Fiddler 可抓取手机的 http 请求
如果想抓取手机的 https 请求,还需安装证书,进一步配置。
第一步,关闭 Fiddler,在pc端下载并安装Fiddler的证书管理器,下载地址:
http://www.telerik.com/docs/default-source/fiddler/addons/fiddlercertmaker.exe?sfvrsn=2。
第二步,傻瓜式安装完成 fiddlercertmaker.exe后,重新打开 Fiddler,配置 Fiddler 的 https 选项(Tools----Options…----HTTPS),如下图所示:
备注:次点击会弹出是否信任 Fiddler 证书和安全提示,直接点击 yes 就行
第三步:打开手机浏览器,输入http://192.168.18.64:8888(即上文中配置的代理服务器地址),会出现如下界面:
点击链接 ”FiddlerRoot certificate”,下载手机端的数字证书,给数字证书命名,例如 ”Fiddler”,点击确认,安装证书。如下图所示:
备注:如果下载完成数字证书后,没有弹出上图中的证书安装界面,可在手机的设置菜单中,手动安装。以三星 S6 为例,打开设置----锁定屏幕与安全----其他安全设置----从设备存储安装,选择下载的数字证书,填写证书名称,即可完成安装,如下图所示:
为了确认手机是否成功安装数字证书,可在设置菜单中查看。以三星 S6 为例,点击设置----锁定屏幕与安全----其他安全设置----查看安全证书----用户,即可查看 Fiddler 数字证书是否成功安装,如下图所示:
以上的 https 配置项,配置完成后,重启 pc 端的 Fiddler 软件,手机端关闭并重新连接网络热点,即可抓取 http 和 https 请求。如下图所示:
对于流量测试,由于我们主要关注某次场景操作,产生了那些网络请求,这些网络请求消耗了多少流量,因此我们这里重点关注 Fiddler 的 Statistics 标签页,如下图所示:
Statistics 标签页,对于某次网络请求过程中产生的流量有非常详细描述的信息。首先看左侧的请求列表界面,如下图所示:
这条网络请求的服务器 Host 为:61.191.24.229:5028,访问的服务地址为:/mserver/rest/ms,访问返回的响应码为 200(意味着请求正常返回,其他请求失败响应码为非200,例如404),网络请求协议为 http( Fiddler 也可以捕获 https 的网络请求),返回的数据 Body 长度为 31104 个字节,网络请求的 Content-Type 类型为 application/json; charset=UTF-8。再看这条网络请求的Statistics 标签页,如下图所示:
Request Count 表示请求次数,Bytes Sent 表示本次网络请求发送数据消耗的流量 1572 字节(其中 headers 422 字节,body 1150 字节),Bytes Received 表示接收服务器返回的数据 31303 字节(其中 headers 199 字节,body 31104 字节)。接下来的信息主要描述本次网络请求各种动作的时间,例如:ClientConnerted 表示客户端与服务器建立链接的时间、ClientBeginRequest 表示客户端开始请求服务的时间…..等等,由于流量测试主要流量消耗信息,网络请求动作信息暂不是我们的关注重点。
对于 App 的某个场景进行抓包,可能会存在这些情况:第一次有很多次请求,包括一部分图片请求,请求完毕后对图片进行缓存;第二次请求,请求总数减少,图片从缓存中读取(不用再次进行图片请求);第三次请求情况和第二次一致。因此,做流量测试,至少应该进行三次抓包并统计结果,次数更多,结果更为准确。另外还需要考虑 App 是否会根据机型、用户账号等标识信息返回不同的数据,如果返回数据的差异性较大,同样会影响测试结果准确性。
另一方面 Fiddler 也存在一定的局限性。Fiddler 目前只能捕捉到使用 http/https 应用层传输协议的网络请求,对于使用其他应用层传输协议(例如ftp、smtp、ssh等)的网络请求,无法捕获,这意味着:如果 App 使用了这些协议(非 http/https)进行数据传输,将无法正常抓取到流量消耗