弱网测试从零到一:SSH连接、环境搭建与自动化测试完整指南


前言

在移动互联网时代,用户所处的网络环境千差万别。地铁里的信号衰减、电梯里的网络中断、偏远地区的窄带连接、高峰期网络拥塞——当产品在这些场景下出现卡顿、超时甚至崩溃时,用户很可能直接选择卸载。

弱网测试,就是为了提前发现这些问题,确保产品在任何网络条件下都能提供可用的体验。

本文将从零开始,完整记录一次弱网测试的全过程:从工具安装、环境配置、SSH连接、脚本编写到测试执行与结果分析。无论你是测试工程师、开发人员还是运维工程师,这份指南都能帮你快速上手。


第一章:什么是弱网测试?

1.1 弱网测试的定义

弱网测试是指模拟真实世界中不稳定的网络环境(如高延迟、丢包、带宽限制、数据损坏等),验证应用或系统在这种极端条件下的表现。

1.2 为什么要做弱网测试?

场景 网络特征 可能的问题
地铁/地下车库 信号弱,丢包率高达5-10% 连接超时、数据加载失败
电梯/隧道 网络频繁中断、重连 会话丢失、请求卡死
偏远地区 带宽极低(<1Mbps),延迟高 视频无法播放、大图加载失败
演唱会/体育场 网络拥塞,抖动剧烈 接口超时、页面白屏
跨国访问 延迟高达300-500ms 操作响应慢、体验差

核心理念:不是保证产品在弱网下"完美运行",而是确保它能"优雅降级"——要么给出友好提示,要么提供简化功能,而不是直接崩溃或无限等待。


第二章:核心技术选型

2.1 工具全景图

工具 类型 用途
SSH 连接工具 远程登录Linux服务器
tc (Traffic Control) 网络控制工具 Linux内核级流量控制,弱网模拟的核心
netem (Network Emulator) tc的模块 模拟延迟、丢包、损坏、乱序等
htb (Hierarchical Token Bucket) tc的模块 模拟带宽限制
screen 会话管理器 防止SSH断开导致测试中断
ping 网络诊断工具 测量延迟和丢包率

2.2 tc + netem 核心命令详解

bash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# ===== 延迟模拟 =====
# 固定延迟 200ms
tc qdisc replace dev enp5s0 root netem delay 200ms

# 延迟 200ms,抖动(变化范围)±50ms,相关性 25%
# 含义:大部分包延迟在 150~250ms 之间波动
tc qdisc replace dev enp5s0 root netem delay 200ms 50ms 25%

# ===== 丢包模拟 =====
# 固定丢包率 3%
tc qdisc replace dev enp5s0 root netem loss 3%

# 丢包率 3%,相关性 25%(模拟突发丢包)
tc qdisc replace dev enp5s0 root netem loss 3% 25%

# ===== 数据损坏模拟 =====
# 2% 的数据包被损坏(模拟信号干扰)
tc qdisc replace dev enp5s0 root netem corrupt 2%

# ===== 带宽限制(使用 htb)=====
# 限制带宽为 1Mbps
tc qdisc add dev enp5s0 root handle 1: htb
tc class add dev enp5s0 parent 1: classid 1:1 htb rate 1mbit

# ===== 组合规则 =====
# 延迟 200ms + 抖动 50ms + 丢包 3% + 带宽 1Mbps
tc qdisc del dev enp5s0 root
tc qdisc add dev enp5s0 root handle 1: htb
tc class add dev enp5s0 parent 1: classid 1:1 htb rate 1mbit
tc qdisc add dev enp5s0 parent 1:1 handle 10: netem delay 200ms 50ms loss 3%

# ===== 清除所有规则(恢复网络)=====
tc qdisc del dev enp5s0 root

2.3 测试用例设计

用例编号 弱网参数 测试目的 预期关注点
Case-01 延迟 200ms,抖动 50ms 模拟高延迟场景(如跨国访问) 响应时间、超时设置
Case-02 延迟 200ms,抖动 50ms,丢包 3% 模拟高延迟+不稳定连接 重传机制、连接稳定性
Case-03 带宽 1Mbps + 延迟 200ms + 丢包 3% 模拟窄带+高延迟(如2G/3G网络) 图片加载、视频播放
Case-04 延迟 400ms,抖动 100ms,丢包 8%,损坏 2% 模拟极端恶劣网络 崩溃、降级策略

第三章:环境搭建(从零开始)

3.1 被测试机器环境准备

如果你面对的是一台全新的Linux服务器,需要先完成以下安装:

Step 1: 安装 tc (iproute2)

bash

1
2
3
4
5
6
7
8
9
10
# Ubuntu/Debian
sudo apt update
sudo apt install -y iproute2

# CentOS/RHEL
sudo yum install -y iproute

# 验证安装
tc -V
# 输出示例:tc utility, iproute2-6.1.0
Step 2: 确认 netem 内核模块

bash

1
2
3
4
5
6
7
8
# 检查 netem 模块是否加载
modinfo sch_netem

# 如果未加载,手动加载
sudo modprobe sch_netem

# 设置为开机自动加载
echo "sch_netem" | sudo tee -a /etc/modules-load.d/netem.conf
Step 3: 安装 screen(会话保护)

bash

1
2
3
4
5
6
7
8
9
# Ubuntu/Debian
sudo apt install -y screen

# CentOS/RHEL
sudo yum install -y screen

# 验证安装
screen --version
# 输出示例:Screen version 4.09.00
Step 4: 确认 ping 工具

bash

1
2
3
# ping 通常已预装,如果没有:
sudo apt install -y iputils-ping # Ubuntu
sudo yum install -y iputils # CentOS

3.2 本地电脑环境准备

Windows 10/11 用户:SSH 客户端已内置,无需安装。

powershell

1
2
3
# 确认 SSH 可用
ssh -V
# 输出示例:OpenSSH_for_Windows_8.1p1

macOS/Linux 用户:SSH 默认已安装。

3.3 环境验证清单

检查项 命令 预期结果
tc 已安装 tc -V 显示版本号
netem 可用 modinfo sch_netem 显示模块信息
screen 已安装 screen --version 显示版本号
网卡名称 ip addr 看到 UP 状态的网卡

第四章:SSH远程连接(踩坑实录)

4.1 连接流程全景图

text

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌─────────────────────────────────────────────────────────────────┐
│ SSH 连接流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 你的电脑 ──── SSH 请求 ────► 远程服务器 (10.10.103.193) │
│ │ │
│ 1. 检查用户名是否存在 │
│ 2. 验证密码/密钥是否正确 │
│ 3. 检查端口是否开放 │
│ 4. 分配 Shell 会话 │
│ │ │
│ 你的电脑 ◄──── 连接成功 ────── 远程服务器 │
│ │
└─────────────────────────────────────────────────────────────────┘