在接口测试的过程中,通常需要测试一些超时这样的异常场景,以下为在linux环境中使用tc工具构造的超时场景:
一、先来了解一些概念
tc分为三个模块:
qdisc队列:默认配置
class分类:类,比如一类限速10MBps
filte过滤器:将特定端口划分到特定类中
二、如何查看本机网卡
命令:ifconfig
三、shell脚本
1、新建一个shell脚本:touch limit_net
2、添加权限:chmod limit_net 755
3、编辑脚本,vi limit_net(将以下命令复制到脚本中)
#!/bin/sh
tc qdisc del dev ens160 root
tc qdisc add dev ens160 root handle 1: prio bands 4
tc qdisc add dev ens160 parent 1:4 handle 40: netem delay 5s
# sport 32772 针对32772这个服务的回包,会网络延时(以下命令二选一使用)
tc filter add dev ens160 protocol ip parent 1:0 prio 4 u32 match ip sport 32772 0xffff flowid 1:4
# dst 10.128.4.51 针对发送给ip10.128.4.51 ,会网络延时
#tc filter add dev ens160 protocol ip parent 1:0 prio 4 u32 match ip dst 10.128.4.51 flowid 1:4
4、保存脚本,ESC+:wq
5、执行:sudo ./limit_net
6、测试完成后需要单独执行:tc qdisc del dev ens160 root
四、内容讲解(结合第一点概念)
1、tc qdisc del dev ens160 root
删除所有针对网卡ens160的网络限制
2、tc qdisc add dev ens160 root handle 1: prio bands 4
在没有设置filter的情况下,所有请求都会走1-3class,4是没有用的
3、tc qdisc add dev ens160 parent 1:4 handle 40: netem delay 10s
给第4个class添加一个10秒延迟的qdisc,这个qdisc的handle id为40:,类的id为1:4
4、tc filter add dev ens160 protocol ip parent 1:0 prio 4 u32 match ip sport 32772 0xffff flowid 1:4
给root qdisc添加一个filter,将发给32772端口的包都送到第4个class
这个fliter将划分给1:4这个类的数据包
prio是优先级的意思
sport→dport,dport:目的端口,sport:来源端口
5、tc filter add dev ens160 protocol ip parent 1:0 prio 4 u32 match ip dst 10.128.4.51 flowid 1:4
将发给10.128.4.51的包都送到第4个class
dst目的地址,src源地址
备注:
整机延时(非常不推荐使用,如果设置成功每打一个字母都会延迟)
#!/bin/sh
tc qdisc add dev ens192 root handle 1: prio
tc qdisc add dev ens192 parent 1:1 handle 2: netem delay 10s