如何模拟测试中的网络异常问题?

开发或者测试互联网产品的过程中,同学们一定遇到过connection timed out和socket read timed out两种和网络相关的异常。

如何模拟测试中的网络异常问题?

今天我们并不分析引起这些异常的原因,也不谈发生异常以后的解决办法,我们来说说如何制造这类异常,从而模拟对应的异常场景。

了解tcp协议就知道connection即建立连接的过程,其实和socket read即传输数据的过程并没有太大的差别,两者都是请求应答模式,而只是前者的请求数据量很小而已。

要使两者超时,我们可以采用相同的方法即限制网络传输的带宽来达到目的。

Tc即traffic control就是这样一款能够限制网络流量的工具。Tc中主要的概念包括类class和过滤器filter。

我们可以用class把网络设备的带宽划分成不同的区间

tc class add dev $DEV parent 1: classid 1:11 htb rate 90mbps ceil 100mbps

tc class add dev $DEV parent 1: classid 1:12 htb rate 90bps ceil 100bps

如上,11这个class对应的带宽为90到100mbps,12这个class对应的带宽只有90到100bps。划分好了class,我们就可以用filter把符合特定条件的数据包归入不同的class中

tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip sport $PORT 0xffff match ip dst $IP flowid 1:12

如上就把源端口是$PORT,目的地址是$IP的数据包归入12这个class中了,这样就把符合该条件的数据流量限制到了90到100bps。

在正在运行的系统中开启上述tc限制,即把特定数据流限制到一个极小值,我们就能模拟出connection timed out异常了。

那么socket read timed out异常又该如何模拟呢,我们怎么才能区分建立连接和数据传输这两个过程,tc工具还能满足我们的需求吗?在寻找问题答案的过程中,另一个linux内核组件iptables进入了我们的视野。

Iptables是linux系统中常用的防火墙组件,功能十分强大,网上有十分丰富的资料。由于其能够识别数据包中的syn、ack等标志位,故能把建立连接和后续的数据传输过程区分开来。

iptables -A INPUT -p tcp --src $IP --dport $PORT ! --syn -j DROP

如上,在目的机器上加入该条iptables规则,可以实现将未设置syn标志位的数据包丢弃的功能,这样连接能够建立完成但后续的数据传输将无响应。

另外,Iptables具有一种连接跟踪机制,即能够记录连接的状态。这些状态分别是NEW、ESTABLISHED、RELATED和INVALID。我们可以利用该特性实现相同的效果。

iptables -A INPUT -p tcp -m state --state ESTABLISHED -s $IP --dport $PORT -j DROP

如上,在目的机器上加入该条iptables规则,当匹配了ip和端口,并且数据包所对应的连接状态是ESTABLISHED时将其丢弃。

至此read timed out异常也能轻松模拟了。Tc和Iptables是linux网络模块中强有力的工具,除了能够利用它们开发功能,也能够在网络异常测试中发挥关键的作用。


更多精彩内容:

James Whittaker:一个成功的测试者应该具备怎样的品质 

推荐!测试工程师升职到测试主管的进阶过程 

精心整理:移动应用常见的Bug汇总及预防方法

年度盘点:安全测试者偏爱的安全测试工具

为什么程序员找不出自己的BUG? 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在进行App异常测试时,可以考虑以下项目进行测试: 1. 异常输入:测试应用程序对于无效、非预期或边界情况的输入是否能够正确处理。例如,输入空值、特殊字符、过长或过短的字符串等。 2. 网络异常测试应用程序在网络连接不稳定或不可用的情况下的行为。例如,断开网络连接、切换网络类型(如从Wi-Fi切换到移动数据网络)等。 3. 内存管理:测试应用程序在内存不足或处理大量数据时的表现。例如,模拟内存泄漏、大量数据加载等情况。 4. 并发访问:测试应用程序在多个用户同时使用时的并发访问情况。例如,多个用户同时登录、同时进行操作等。 5. 设备状态变化:测试应用程序在设备状态发生变化时的反应。例如,测试应用程序在设备旋转、接收电话、锁屏等情况下的表现。 6. 异常退出和崩溃:测试应用程序在出现异常情况时是否能够正常退出,而不是直接崩溃。例如,模拟未捕获的异常、内存溢出等情况。 7. 后台运行和恢复:测试应用程序在被切换到后台或从后台恢复时的表现。例如,测试应用程序在后台运行时的资源占用情况、从后台恢复时的启动速度等。 以上是一些常见的项目,具体的异常测试项目可以根据应用程序的特点和需求进行调整和扩展。异常测试旨在发现应用程序在异常情况下的行为和稳定性,帮助开发人员修复潜在的问题并提高应用程序的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值