反骨仔

一个业余的 .NET Core 攻城狮

0%

16 Fiddler 实现弱网测试

在使用 APP 过程中,经常会碰到网速慢 ,甚至网络中断的场景,影响用户体验。这种网速慢和网络中断的情况,我们称之为弱网。要模拟出弱网的环境,就需要用到 Fiddler。使用 Fiddler 能让弱网测试变得非常简单,Fiddler 是通过延迟发送或接收数据的时间来模拟限速的。

16.1 什么是弱网

随着国内移动端的迅速发展,大量的用户会在地铁、隧道、电梯和车库等场景下使用 APP。 这种弱网的场景下,网络会出现延时、中断和超时等情况 。

APP 的开发人员和测试人员 需要针对这些场景,验 i正在弱网的情况下软件的处理机制,从而避免因用户体验不友好造成用户的流失。弱网测试属于健壮性测试。在弱网测试条件下,要测试产品的运行状态、处理机制、提示信息,以及网络恢复后的重连等 。

一般来说,开发人员在 localhost 下调用程序,很难模拟用户真实使用情况,比如正在下载 JS 、css 等静态资源的时候页面的渲染情况。当网速很慢的情况下,我们希望看到的是先渲染出用户界面,而不是让用户看到一片空白。

16.2 弱网环境带来的问题

弱网的环境会带来一系列的问题,具体如下。

  1. 操作时间慢。 用户在地铁里操作手机 APP,由于网络慢,页面加载不出来。原因可能是 API 在网络慢的情况下性能很差。用户在公交车上用手机 APP 看新闻,当公交车进入隧道的时候,网络变得很慢,APP 上的新闻 一直没法加载出来。我们需要测试每个 API 消耗的时间, 这个指标可以衡量 APP 性能的好坏。
  2. 用户体验不好。 一个安卓手机用户使用 一款看小说的 APP 在地铁里看小说,当地铁进入隧道的时候,手机信号中断了。用户单击翻页,想看下一页的时候,因为网络中断,APP 的界面卡死并且闪退。原因是 APP 不稳定,没有处理好网络中断的情况 。
  3. 非正常情况下,出现 Bug 的可能性会增加。 如一个电商的手机 APP 有秒杀优惠券的功能。一些 APP 用户在乘坐电梯的时候,使用 APP 来秒杀优惠券 。 单击秒杀优惠卷的按钮后,APP 响应缓慢。 于是,用户重复单击秒杀优惠券按钮。 这就造成了几乎同一时间,同一个用户有多个 HTTP 请求发送到服务器,形成了并发,结果用户抢到了多张优惠券。

16.3 弱网测试的目的

弱网测试的 目的是让 APP 在任何网络下都能表现自如,让开发人员能够预知 APP 在较差网络环境下的表现,提前发现问题 ,进行有针对性的优化。

16.4 弱网的场景

模拟出以下 3 种弱网场景:

  1. 网络慢或延迟,导致加载时间长
  2. 网络中断,Web 服务器返回 500 等状态码
  3. 网络超时,HTTP 请求发出去后,很久都没有响应

16.5 Fiddler 模拟网络延迟

为了重现这些问题,我们需要用软件来模拟出网络慢的情况。我们可以用 Fiddler 来限速。

image-20210110201716375

已经讲过如何用 Fiddler 捕获手机 APP 的 HTTP 请求,在弱网测试中我们也需要捕获手机 APP 的 HTTP 请求,然后限速。

【实例】当浏览器访问博客园网站的时候,用 Fiddler 来限速

  1. 启动 Fiddler,选择 Rules -> Performances -> Simulate Modem Speeds

image-20210117015755302

  1. 打开浏览器,访问 http://www.cnblogs.com/liqingwen/。你会发现打开网页的速度很慢

16.6 精确控制网速

我们还可以精确控制网速,可以通过修改 Fiddler Script 来实现。

具体的操作步骤如下:

  1. 启动 Fiddler,选择 Rules -> Performances -> Simulate Modem Speeds
  2. 在 FiddlerScript 中找到如下一段代码:

image-20210110202151599

把数值改大 一点,比如修改为 oSession=[“request-trickle- delay”]=“900”,oSession[”response-trickle-delay"]=“600”。修改完之后保存 Script。

  1. 保存完之后,原本己经勾选的 Simulate Modem Speeds 会被取消勾选;再次选中 Rules -> Performances -> Simulate Modem Speeds。

  2. 再次打开浏览器,访问 http://www.cnblogs.com/tankxiao/。你会发现,打开网页变得更慢了。

网络取值的算法就是 1000/下载速度=需要延迟的时间(ms),比如 50kbit/s 需要延迟 200ms 来接收数据 。

16.7 Fiddler 模拟网络中断

用 Fiddler 可以下断点,伪造 HTTP 响应。移动端发出的 HTTP 请求根本没有到达服务器,而是被 Fiddler 直接返回了 一个伪造的 HTTP 响应。

image-20210110202545555

Fiddler 具有下断点的功能,我们可以利用 Fiddler 直接返回 500、503 等各种状态码。

具体做法是用 Fiddler 拦截住移动端发出 来的 HTTP 请求,然后在“ Choose Response "选中需要返回的状态码并返回给移动客户端。

image-20210110202622849

16.8 实例:Fiddler 返回 500 状态码

  1. 在桌面上新建一个 txt 文件,里面的内容如下:
1
2
3
4
5
HTTP/1.1 500 Internal Server Error
Date: Fri, 11 Aug 2017 07 :25:35 GMT
Content-Type: text/html; char set=utf 8
Connection: keep-alive
Vary: Accept -Encoding
1
this is 500 internal Server Error by Fiddler! tank
  1. 在 Fiddler 中设置断点,打开浏览器,访问 http://www.cnblogs.com/tankxiao/p/7087990.html
  2. Fiddler 会拦截住这个请求,选择“ Find a file …“选择桌面上的 txt 文件,然后单击“Run to Comp letion ”

image-20210110202852593

  1. 这样 Fiddler 就把 500 状态码,返回给了浏览器。

16.9 Fiddler 模拟网络超时

利用 Fiddler 下断点的功能拦截住移动客户端发出的 HTTP 请求,这样就相当于网络超时了,然后再检查客户端有没有重发或者超时的机制。

参考

《HTTP 抓包实战》