测试工具: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

 

posted @ 2026-06-14 21:31  铿锵有力自信且坚定  阅读(9)  评论(0)    收藏  举报