性能测试 Linux 环境下模拟延时和丢包实现

在性能测试过程中,我们还需要模拟网络异常的情况下,是否会出现一些异常数据。最常见的就是写库操作,比如说我们下单的场景,如果出现网络异常的时候是否会出现数据对不上这种情况。

如我们JMeter发送成功的请求数量和最终数据库表中存入下单的数据对不上,通常在网络异常的情况下会出现这种情况,因为通常很多框架都会存在重试的功能,比如APP在向服务端发送网络请求,那么在这个请求的过程中网络不稳定,一直没有得到响应,那么APP会重试,但是出现这种情况下,我们就需要考虑是否会出现重复下单,生成两笔订单的情况。

通常我们服务端通常会有一定的机制处理这种情况,但是我们需要去测试服务端这种机制是否生效。

tc工具的介绍

通常我们是在应用服务器上使用tc工具模拟网络丢包。tc工具是工作在服务端的,是专门针对网卡来进行一些相关的策略的。比如当我们请求传到网卡的时候,其实这个时候请求还没有到程序里面,那我们可以在网卡出来的时候加长延时时间或者丢包。

Linux中模拟延时和丢包

在模拟丢包之前,我们现在看一下我们机器的网卡,可以看到我们的网卡是eth0

然后我现在在本机上ping我们的应用服务器,确认网络正常。

设置延时

1、此时我们设置延时,其中eth0 是我们的网卡名称,下面的命令实现了给 eth0 口发包时添加 30ms 的延时。

复制代码
tc qdisc add dev eth0 root netem delay 30ms

设置延时之后,此时我们可以看到时间已经在40ms左右了

2、显示延时的设置

3、修改延时

复制代码
tc qdisc change dev eth0 root netem delay 40ms

4、删除延时配置

复制代码
tc qdisc del dev eth0 root netem delay 40ms

可以看到删除延时之后,时间又恢复在10ms左右了

模拟丢包

1、设置丢包

复制代码
tc qdisc add dev eth0 root netem loss 10%

再看可以发现已经出现丢包的情况了

如果你是通过SSH 登陆设备进行配置丢包的话,配置完这条命令就会感觉到机器访问时有点一卡一卡的。这说明,设备已经开始丢包了,可以通过具体抓包查看。

其他诸如修改、查看、删除的命令,都可以参考上面延时的设置。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
Rabitebla3 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
火云代理3 小时前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
威嵌神州4 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
Decay__4 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
java_logo5 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
火云代理7 小时前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
坤坤子吖7 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
AI_Gump7 小时前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
星恒随风9 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
少司府9 小时前
嵌入式入门篇(二):初识STM32F103ZET6
linux·python·stm32·单片机·嵌入式硬件·mcu·嵌入式软件