当前位置: 首页 > news >正文

测试工具:Toxiproxy

一.Toxiproxy

1.介绍

Toxiproxy 是一个“故障注入 TCP 代理”。你把应用原本要连的服务,例如 Redis/MySQL/API,改成连 Toxiproxy 的本地监听端口;Toxiproxy 再转发到真实服务。测试时你可以动态给这个代理加延迟、断连、限速、超时、丢包等故障。

官方仓库:https://github.com/Shopify/toxiproxy

 

2.两部分组成

toxiproxy-server:

服务端进程。真正负责监听端口、转发 TCP 流量、注入故障,并提供 HTTP 管理 API。默认管理地址通常是 127.0.0.1:8474。

toxiproxy-cli:
命令行客户端。它本身不代理流量,只是连接 toxiproxy-server 的管理 API,帮你创建 proxy、启停 proxy、添加/删除 toxic。

一句话总结:toxiproxy-server 是实际代理和故障注入器,toxiproxy-cli 是管理它的命令行工具;你通过 create 建代理,通过 toxic add/remove 动态制造和撤销网络故障。

 

二.使用方法

1.启动 server

1)基本用法:

toxiproxy-server

2)指定管理 API 监听地址:

toxiproxy-server -host 127.0.0.1 -port 8474

3)使用配置文件启动:

toxiproxy-server -config toxiproxy.json

配置文件示例:

[
{
"name": "redis",
"listen": "127.0.0.1:8666",
"upstream": "127.0.0.1:6379",
"enabled": true
}
]

4)常见参数作用

-host 管理 API 绑定的 host
-port 管理 API 端口,默认常见为 8474
-config 启动时加载 proxy 配置
-version 查看版本

 

2.创建代理

1)假设真实 Redis 在 127.0.0.1:6379,希望应用改连 127.0.0.1:8666:

toxiproxy-cli create redis --listen 127.0.0.1:8666 --upstream 127.0.0.1:6379

 

3.查看所有 proxy:

toxiproxy-cli list

 

4.查看单个 proxy:

toxiproxy-cli inspect redis

 

5.启用/禁用:

toxiproxy-cli enable redis
toxiproxy-cli disable redis

 

6.删除:

toxiproxy-cli delete redis

如果 toxiproxy-server 不在默认地址,需要指定 host:

toxiproxy-cli --host 127.0.0.1:8474 list

有些版本参数名可能是 --host,有些帮助里会显示全局 API 地址参数,建议本机确认:

toxiproxy-cli --help
toxiproxy-server --help

 

 

7.添加故障 toxic

核心命令格式一般是:

toxiproxy-cli toxic add <proxy-name> \
--type <toxic-type> \
--toxicName <name> \
--toxicity <0.0-1.0> \
--attribute key=value

 

toxicity 表示影响比例:

1.0 100% 流量都受影响
0.5 大约 50% 流量受影响
0.0 不生效

方向通常有:

upstream 客户端 -> 服务端
downstream 服务端 -> 客户端

 

1)示例:给 Redis 增加 2 秒延迟:

toxiproxy-cli toxic add redis \
--type latency \
--toxicName redis_latency \
--toxicity 1.0 \
--attribute latency=2000 \
--attribute jitter=100

删除 toxic:

toxiproxy-cli toxic remove redis --toxicName redis_latency

 

 

8.常见 toxic 类型

1)latency:延迟。

toxiproxy-cli toxic add redis \
--type latency \
--attribute latency=1000 \
--attribute jitter=200

2)timeout:连接/读写超时,常用于模拟服务卡死。

toxiproxy-cli toxic add redis \
--type timeout \
--attribute timeout=5000

3)bandwidth:限速,单位通常是 KB/s。

toxiproxy-cli toxic add redis \
--type bandwidth \
--attribute rate=100

4)slow_close:延迟关闭连接。

toxiproxy-cli toxic add redis \
--type slow_close \
--attribute delay=3000

5)slicer:把数据切成小块发送,模拟分片/慢传输。

toxiproxy-cli toxic add redis \
--type slicer \
--attribute average_size=1024 \
--attribute size_variation=512 \
--attribute delay=100

6)limit_data:限制传输字节数,超过后断开。

toxiproxy-cli toxic add redis \
--type limit_data \
--attribute bytes=1024

 

三.示例(完整使用流程)

示例一:

1. 启动管理服务
toxiproxy-server

2. 创建代理
toxiproxy-cli create redis --listen 127.0.0.1:8666 --upstream 127.0.0.1:6379

3. 模拟网络延迟
toxiproxy-cli toxic add redis --type latency --toxicName latency_2s --toxicity 1.0 --attribute latency=2000

4. 恢复正常
toxiproxy-cli toxic remove redis --toxicName latency_2s

5. 模拟服务不可用
toxiproxy-cli disable redis

6. 恢复
toxiproxy-cli enable redis

 

示例二:模拟延迟

1. 启动管理服务
nohup ./toxiproxy-server &

2. 创建代理
./toxiproxy-cli create --listen 192.168.206.26:8099 --upstream 192.168.206.26:80 proxy-service-name1

3. 模拟网络延迟

添加1s延迟
./toxiproxy-cli toxic add -t latency -a latency=1000 proxy-service-name1

修改延迟为5s

./toxiproxy-cli toxic update -n  latency_downstream -a latency=5000 proxy-service-name1

4. 查看当前延迟情况
./toxiproxy-cli inspect proxy-service-name1

6. 删除模拟
./toxiproxy-cli delete proxy-service-name1

 

http://www.jsqmd.com/news/1014309/

相关文章:

  • 2026年6月最新版许昌正规房屋漏水防水补漏维修口碑名单:创维修缮机构等5家深度测评 - 一休咨询
  • 终极AutoHotkey V2脚本转换器:一键升级旧版代码的完整方案
  • LeetDown iOS降级工具:让旧款iPhone/iPad重获流畅体验的完整教程
  • 保姆级教程:手把手将EfficientDet的BiFPN移植到YOLOv5,附完整可运行代码
  • Linux rm-rf 执行后,硬盘空间变化
  • 3步掌握专业歌词制作:LRC Maker让音乐与文字完美同步
  • 2026年6月最新版铜川正规房屋漏水防水补漏维修口碑名单:创维修缮机构等5家深度测评 - 一休咨询
  • 2026年抖音水印彻底去除实用指南 - 科技热点发布
  • 有关Java中集合的知识
  • 2026年6月最新版永州正规房屋漏水防水补漏维修口碑名单:创维修缮机构等5家深度测评 - 一休咨询
  • Windows平台AirPlay 2高效实现:专业级跨设备投屏解决方案深度解析
  • 别再死磕EKF了!用ESKF搞定IMU+激光雷达融合,误差状态建模实战避坑
  • 悬架信号处理实战:一阶vs二阶巴特沃斯滤波器,到底怎么选?看完这篇就懂了
  • 托福、雅思、多邻国...12种英语考试怎么选?一张表帮你搞定留学、考研、进外企
  • Python 高手编程系列三千四百三十四:抽象语法树
  • FactoryBluePrints:终极开源工厂蓝图库,3分钟打造高效太空生产线
  • 2026年6月最新版阳泉正规房屋漏水防水补漏维修口碑名单:创维修缮机构等5家深度测评 - 一休咨询
  • CANN数学算子库ops-math深度解读:昇腾NPU上矩阵运算、傅里叶变换与统计算子的硬件加速原理与调用优化
  • 戴森球计划蓝图宝典:3000+工厂设计方案让你效率翻倍
  • Python 高手编程系列四百三十四:抽象语法树
  • 别再被厂商的MTBF数字忽悠了!聊聊硬盘、服务器真实寿命与选购避坑
  • AsrTools:智能语音转文字工具,三步完成音频字幕转换
  • 2026年6月最新版邢台正规房屋漏水防水补漏维修口碑名单:创维修缮机构等5家深度测评 - 一休咨询
  • Minecraft基岩版多版本管理终极指南:解锁无限游戏体验的5个关键技巧
  • 深度解析trackerslist:BitTorrent跟踪服务器架构与技术实现
  • 采购工业测温液位仪表去哪找靠谱厂家看这篇就够了(2026年) - 品牌推荐大师1
  • BongoCat互动桌面宠物:3步掌握Live2D模型自定义开发终极指南
  • 如何3步永久掌控你的微信数据管理:免费开源工具终极指南
  • LeetDown终极指南:3步让老旧iPhone/iPad重获新生
  • 终极防撤回解决方案:PC版微信QQ消息永久保存完全指南