弱网测试

网络延时

  • 网络延时指一个数据包从用户的计算机发送到网站服务器,然后再立即从网站服务器返回用户计算机的来回时间。通常使用网络管理工具PING(Packet Internet Grope)来测量网络延时。
  • 由于互联网络的复杂性、网络流量的动态变化和网络路由的动态选择,网络延时随时都在不停的变化称为抖动。网络延时和网络延时的抖动越小,那么网络的质量就越好。 
  • 在互联网上,典型的网络延时为几十到几百毫秒。影响网络延时的主要因素是路由的跳数(因为每次路由转发都需要时间,因此路由跳数越多,网络延时越大)和网络的流量(网络流量越大,交换机和路由器排队的时间就越长,网络延时也就越大)。
  •  交换机延时(Latency)是指从交换机接收到数据包到开始向目的端口复制数据包之间的时间间隔。有许多因素会影响延时大小,比如转发技术等等。采用直通转发技术的交换机有固定的延时。因为直通式交换机不管数据包的整体大小,而只根据目的地址来决定转发方向。所以,它的延时是固定的,取决于交换机解读数据包前6个字节中目的地址的解读速率。采用存储转发技术的交换机由于必须要接收完了完整的数据包才开始转发数据包,所以它的延时与数据包大小有关。数据包大,则延时大;数据包小,则延时小。采用直通转发技术的千兆交换机有固定的延时,因为直通式交换机不管数据包的整体大小,而只根据目的地址来决定转发方向。所以,它的延时是固定的。采用存储转发技术的交换机由于必须要接收完了完整的数据包才开始转发数据包,所以它的数据包大,则延时大;数据包小,则延时小。

抖动

抖动是QOS里面常用的一个概念,其意思是指分组延迟的变化程度。网络延时随时都在不停的变化称为抖动(延时的变化成为抖动)。

如果网络发生拥塞,排队延迟将影响端到端的延迟,并导致通过同一连接传输的分组延迟各不相同,而抖动,就是用来描述这样一延迟变化的程度。

因此,抖动对于实时性的传输将会是一个重要参数,比如:VOIP,视频等。

丢包

  • 丢包率,是一个比率,网络中数据的传输是以发送和接收数据包的形式传输的,理想状态下是发送了多少数据包就能接收到多少数据包,但是由于信号衰减、网络质量等等诸多因素的影响下,并不会出现理想状态的结果,就是不会发多少数据包就能接收到多少。
  •  网络丢包率是指测试中所丢失数据包数量占所发送数据包的比率,通常在吞吐量范围内测试。
  • 丢包率主要与网络的流量,准确的说是与从用户计算机到网站服务器之间每段路由的网络拥塞程度有关。由于交换机和路由器的处理能力有限,当网络流量过高来不及处理时就将一部分数据包丢弃造成丢包。由于TCP/IP网络能够自动实现重发,这样发生丢包后不断重发,将造成更大量的丢包。因此,网络拥塞发生后经常会发生丢包率越来越高的现象,和马路上的交通堵塞十分相似。

MTU(最大传输单元)

因为协议数据单元的包头和包尾的长度是固定的,MTU越大,则一个协议数据单元的承载的有效数据就越长,通信效率也越高。MTU越大,传送相同的用户数据所需的数据包个数也越低。

MTU也不是越大越好,因为MTU越大, 传送一个数据包的延迟也越大;并且MTU越大,数据包中 bit位发生错误的概率也越大。

MTU越大,通信效率越高而传输延迟增大,所以要权衡通信效率和传输延迟选择合适的MTU。

以以太网传送IPv4报文为例。MTU表示的长度包含IP包头的长度,如果IP层以上的协议层发送的数据报文的长度超过了MTU,则在发送者的IP层将对数据报文进行分片,在接收者的IP层对接收到的分片进行重组。

这里举一个具体的例子说明IP包分片的原理。以太网的MTU值是1500 bytes,假设发送者的协议高层向IP层发送了长度为3008 bytes的数据报文,则该报文在添加20 bytes的IP包头后IP包的总长度是 3028 bytes,因为3028 > 1500,所以该数据报文将被分片,分片过程如下:

  1. 首先计算最大的IP包中IP净荷的长度 =MTU-IP包头长度=1500-20= 1480 bytes
  2. 然后把3028 bytes按照1480 bytes的长度分片,将要分为3片,3028= 1480+1480+68。
  3. 最后发送者将为3个分片分别添加IP包头,组成3个IP包后再发送,3个IP包的长度分别为1500 bytes、1500 bytes和 88 bytes。

从以上分片例子可以看出第一、二个分片包组成的IP包的长度都等于MTU即1500 bytes。

在网络通讯中,需要尽量避免发生分片和重组,因为分片重组对网络性能影响较大。数据包发送时选择合适的MTU大小对提高通讯性能很有必要。MTU大小的选择有协议协商方式,通过全路径的MTU发现机制,找到整条路径的最小MTU(也就是路径MTU),然后报文发送式小于等于路径MTU,这就避免了数据传输过程中产生分片,从而提高数据转发性能。MTU的协议发现机制由于安全等方面的原因,并不能总是生效,这时候就需要根据网络的特性选择合理的MTU。如果在报文传送过程中分片是不可避免的,那么要想办法让重组尽量在终端进行,避免在转发路径中进行。

弱网测试要点

利用抓包工具charles进行弱网设置,适用PC端和移动端(IOS/Android)

1.以charles 4.0版本为例,打开Proxy->Throttle Settings

 

2.打开Throttle Settings界面如下

 

3.charles的预设已经有常用的网速模拟设置,根据需要设置即可,当然也可以自己添加预设,自己去研究吧。

charles-Throttle Settings(选项含义讲解)

Bandwidth(带宽)【吞吐量】

带宽定义数据可以传送超过时间上限,这是千比特每秒指定。可以指定上载和下载链接的不同带宽限制。

Utilisation(利用)

利用率是总带宽的百分比,可以在任何一个时间使用。它只是作为可用带宽的缩放因子。对于大多数现代互联网连接利用率始终是100%。

Round-trip Latency(请求往返延迟)【延时】

往返延迟测量客户端和远程服务器之间的第一次往返通信的毫秒延迟。它用于客户端向服务器和服务器向客户端的每次请求。

MTU(最大传输单元)

在任何传输的TCP数据包的最大尺寸。指定MTU不改变的可用带宽,但允许Charles在MTU分配带宽大小的块,导致在每个传输包分割的现实水平。

Reliability(可靠性)【丢包】

可靠性是衡量连接完全失败的可能性。这是非常有用的模拟不可靠的网络条件。可靠性是指定为成功发射10kib消息的可能性,所以,值为50%意味着所有10kib传输一半会成功。较大的邮件或更小的消息或多或少都有可能失败,所以20kib传输将只有25%的成功率和5kib传输成功率约70%。

Stability(稳定性)【抖动】

稳定性是衡量一个连接的可能性是不稳定的,因此降低了质量。这是非常有用的模拟网络,如移动网络,定期连接质量差。如果连接不稳定,则连接的质量会在不稳定的质量范围内随机下降。此质量值,然后应用作为另一个缩放因子的可用带宽。

unstable quality range(不稳定质量范围)

此处设置主要针对于Stability中设置中的范围

 

以下配置用于模拟不太好的2G蜂窝网络 

  • 带宽256 kbps(上传和下载)
  • 利用100%
  • 延迟300 ms
  • MTU为1500字节
  • 可靠性75%
  • 稳定75%
  • 不稳定的质量范围为20%至25%

 

弱网测试的现象及原因

1、 现象:用户登录应用时下载初始化数据,下载过程中因网速太慢点击取消并重新登录,数据初始化完成后出现重复,造成数据不一致。

  原因:数据下载过程中、下载失败后,未进行数据回滚,中止后重新下载,出现数据重复

  解决方案:通过事务处理数据下载逻辑,下载失败后,应用本地数据库进行数据回滚。

 

2、 现象:用户点击数据上传,数据上传过程中网络弱且不稳定,基于联网状态自动触发数据上传,导致出现数据重复写入,形成脏数据

  原因:数据上传过程中,由于失败重传机制,会出现连续两次写操作,并且未做唯一识别处理

  解决方案:根据数据特性,对可能造成脏数据的地方,通过关键字段,例如创建时间,key-value值等生成hash键,标记记录唯一性,即数据写入时,检查hash键是否存在,如果已经存在,当前重复数据丢弃。

 

3、 现象:在弱网环境下,用户输入用户名和密码点击登录,应用链接超时返回用户名和密码错误提示。

  原因:在弱网环境下的连接超时后,按照强网业务逻辑处理,导致返回超时异常。

  解决方案: 弱网连接超时后,检查应用本地数据库是否有用户登录信息,若存在,获取应用本地用户信息进行登录。

 

4、 现象:在弱网环境下,用户输入用户名和密码后点击登录,登录过程中应用崩溃并且闪退。

  原因:弱网环境下数据下载超时,加载数据严重依赖于后来的异步加载。数据还没来得及返回,应用跳转到下个activity,导致崩溃。

  解决方案:健壮数据加载流程,通过标记后台数据下载状态加载界面,依赖数据下载完成后,再进行页面跳转。

 

5、 现象:弱网络环境下,用户请求页面响应时间较长,等待的过程中,页面上的部分控件仍然可以操作,当用户点击控件时,出现应用闪退现象;

  原因:没有对数据加载流程进行判断,直接暴露控件可控,当出现依赖数据的控件操作时,没有在数据返回前做兼容处理。

  解决方案:在数据加载过程中,设置页面对外暴露的控件为“不可操作”,当数据加载完再释放。

 

6、 现象:在弱网环境下,用户第一次输入搜索关键字没有得到响应后,再次输入全新关键字并发送请求,等待搜索结果返回后,当前结果页被之前的关键字搜索结果刷新覆盖

  原因:中间的请求返回较慢,显示最终的结果后,之前请求返回的数据应不做处理。

  解决方案:对异步请求未完成的任务进行cancel.

 

所以综上所述,对于移动APP测试,从功能、性能、稳定、异常处理等几个维度来归纳场景特性,弱网测试主要集中在如下场景:2G/3G/4G wifi-移动网络切换等

 此外还有一些测试工具向大家介绍

1.iphone 真机模拟网络测试(iOS开发者工具-- Developer)

其实Apple在 iOS 系统中预置了网络调试工具,但是只有添加过测试设备,并使用XCode连接下设备才能激活. 这时只要去设置中就可以看到多出来一项:开发者

 

点击开发者进去,然后看到中间的那行NETWORK LINK CONDITIONER

 

其中Status是表示网络限制是否开启,点击进去就可看到详细设置.

 
注意: 这项开启后影响的是整个系统(macOS / iOS),所以调试完毕后不要忘记关掉,免得会闹出笑话,骂什么破网络

 2.Network Link Conditioner(ap热点方式,andriod&iOS通用)

具体操作步骤如下 :

1.点击下载地址获取苹果开发者网站提供的下载页面,这个工具被包含在Hardware IO Tools for Xcode的工具包中:

 
 

2.双击下载后的安装包,找到对应的工具双击安装:

 
 
 
 

3.你可以通过系统偏好设置面板来打开你的工具:

 
 

4.打开工具后设置你的网络配置:

 
 

5.你可以通过自定义设置来定制自己的网络需求:

 
 

设置完成后,此时的网络设置会应用到全局,你可以使用浏览器来测试网络的访问速度,已经足够慢了。(友情提示:调试完成后不要忘记关闭你的网络设置)

3.itest (Android测试工具app,需要root权限,公司的测试机我已经把河北的红米pro 给root了,有需求就去借)

这个工具简单的不能再简单了,直接打开app 点击进入 工具箱--->弱网工具

选择自己想要的弱网环境就行了,里面包含 上传网速、下载网速、模拟丢包率

 

posted @ 2018-05-31 16:55  小_飞_侠  阅读(553)  评论(0)    收藏  举报