在使用 APP 过程中,经常会碰到网速慢 ,甚至网络中断的场景,影响用户体验。这种网速慢和网络中断的情况,我们称之为弱网。要模拟出弱网的环境,就需要用到 Fiddler。使用 Fiddler 能让弱网测试变得非常简单,Fiddler 是通过延迟发送或接收数据的时间来模拟限速的。
16.1 什么是弱网
随着国内移动端的迅速发展,大量的用户会在地铁、隧道、电梯和车库等场景下使用 APP。 这种弱网的场景下,网络会出现延时、中断和超时等情况 。
APP 的开发人员和测试人员 需要针对这些场景,验 i正在弱网的情况下软件的处理机制,从而避免因用户体验不友好造成用户的流失。弱网测试属于健壮性测试。在弱网测试条件下,要测试产品的运行状态、处理机制、提示信息,以及网络恢复后的重连等 。
一般来说,开发人员在 localhost 下调用程序,很难模拟用户真实使用情况,比如正在下载 JS 、css 等静态资源的时候页面的渲染情况。当网速很慢的情况下,我们希望看到的是先渲染出用户界面,而不是让用户看到一片空白。
16.2 弱网环境带来的问题
弱网的环境会带来一系列的问题,具体如下。
- 操作时间慢。 用户在地铁里操作手机 APP,由于网络慢,页面加载不出来。原因可能是 API 在网络慢的情况下性能很差。用户在公交车上用手机 APP 看新闻,当公交车进入隧道的时候,网络变得很慢,APP 上的新闻 一直没法加载出来。我们需要测试每个 API 消耗的时间, 这个指标可以衡量 APP 性能的好坏。
- 用户体验不好。 一个安卓手机用户使用 一款看小说的 APP 在地铁里看小说,当地铁进入隧道的时候,手机信号中断了。用户单击翻页,想看下一页的时候,因为网络中断,APP 的界面卡死并且闪退。原因是 APP 不稳定,没有处理好网络中断的情况 。
- 非正常情况下,出现 Bug 的可能性会增加。 如一个电商的手机 APP 有秒杀优惠券的功能。一些 APP 用户在乘坐电梯的时候,使用 APP 来秒杀优惠券 。 单击秒杀优惠卷的按钮后,APP 响应缓慢。 于是,用户重复单击秒杀优惠券按钮。 这就造成了几乎同一时间,同一个用户有多个 HTTP 请求发送到服务器,形成了并发,结果用户抢到了多张优惠券。
16.3 弱网测试的目的
弱网测试的 目的是让 APP 在任何网络下都能表现自如,让开发人员能够预知 APP 在较差网络环境下的表现,提前发现问题 ,进行有针对性的优化。
16.4 弱网的场景
模拟出以下 3 种弱网场景:
- 网络慢或延迟,导致加载时间长
- 网络中断,Web 服务器返回 500 等状态码
- 网络超时,HTTP 请求发出去后,很久都没有响应
16.5 Fiddler 模拟网络延迟
为了重现这些问题,我们需要用软件来模拟出网络慢的情况。我们可以用 Fiddler 来限速。
已经讲过如何用 Fiddler 捕获手机 APP 的 HTTP 请求,在弱网测试中我们也需要捕获手机 APP 的 HTTP 请求,然后限速。
【实例】当浏览器访问博客园网站的时候,用 Fiddler 来限速
- 启动 Fiddler,选择 Rules -> Performances -> Simulate Modem Speeds
16.6 精确控制网速
我们还可以精确控制网速,可以通过修改 Fiddler Script 来实现。
具体的操作步骤如下:
- 启动 Fiddler,选择 Rules -> Performances -> Simulate Modem Speeds
- 在 FiddlerScript 中找到如下一段代码:
把数值改大 一点,比如修改为 oSession=[“request-trickle- delay”]=“900”,oSession[”response-trickle-delay"]=“600”。修改完之后保存 Script。
-
保存完之后,原本己经勾选的 Simulate Modem Speeds 会被取消勾选;再次选中 Rules -> Performances -> Simulate Modem Speeds。
网络取值的算法就是 1000/下载速度=需要延迟的时间(ms),比如 50kbit/s 需要延迟 200ms 来接收数据 。
16.7 Fiddler 模拟网络中断
用 Fiddler 可以下断点,伪造 HTTP 响应。移动端发出的 HTTP 请求根本没有到达服务器,而是被 Fiddler 直接返回了 一个伪造的 HTTP 响应。
Fiddler 具有下断点的功能,我们可以利用 Fiddler 直接返回 500、503 等各种状态码。
具体做法是用 Fiddler 拦截住移动端发出 来的 HTTP 请求,然后在“ Choose Response "选中需要返回的状态码并返回给移动客户端。
16.8 实例:Fiddler 返回 500 状态码
- 在桌面上新建一个 txt 文件,里面的内容如下:
1 | HTTP/1.1 500 Internal Server Error |
1 | this is 500 internal Server Error by Fiddler! tank |
- 在 Fiddler 中设置断点,打开浏览器,访问 http://www.cnblogs.com/tankxiao/p/7087990.html
- Fiddler 会拦截住这个请求,选择“ Find a file …“选择桌面上的 txt 文件,然后单击“Run to Comp letion ”
- 这样 Fiddler 就把 500 状态码,返回给了浏览器。
16.9 Fiddler 模拟网络超时
利用 Fiddler 下断点的功能拦截住移动客户端发出的 HTTP 请求,这样就相当于网络超时了,然后再检查客户端有没有重发或者超时的机制。
参考
《HTTP 抓包实战》