本文目录导读:

- 方案一:使用 Speedtest CLI + 系统任务计划程序(推荐,跨平台)
- 方案二:使用 iPerf3(测内网/局域网速度)
- 方案三:使用图形化工具(适合不想写代码的用户)
- 如何将测速结果自动汇总成图表?
针对“自动化工具定时测网速”的需求,最常用的方法是用命令行工具(如 speedtest-cli)配合系统定时任务(Windows 的“任务计划程序”或 Linux/Mac 的 crontab)来实现,同时将结果保存为日志供后续分析。
以下是几种具体的实现方案:
使用 Speedtest CLI + 系统任务计划程序(推荐,跨平台)
这是最稳定、且不依赖第三方图形界面的方法。Speedtest CLI 是由 Ookla(Speedtest.net 官方)提供的命令行工具,结果准确。
安装 Speedtest CLI
- Windows/macOS/Linux:访问 Speedtest CLI 官网 下载对应版本,或使用包管理器安装。
- macOS:
brew install speedtest-cli - Linux (Debian/Ubuntu):
sudo apt-get install speedtest-cli - Linux (CentOS/RHEL):
sudo yum install speedtest-cli
- macOS:
编写测速脚本
Windows(批处理脚本 speedtest_log.bat):
@echo off set LOGFILE=C:\speedtest_logs\speedtest_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log REM 创建日志目录(如果不存在) if not exist C:\speedtest_logs mkdir C:\speedtest_logs REM 执行测速并追加到日志文件(使用 -f json-pretty 可以让输出更清晰) echo === Speedtest Log: %date% %time% === >> "%LOGFILE%" speedtest --accept-license --accept-gdpr -f json-pretty >> "%LOGFILE%" 2>&1 REM 也可以使用更简化的输出格式: speedtest -s 12345 (-s 后面指定服务器ID) echo. >> "%LOGFILE%" echo ================================ >> "%LOGFILE%" echo 测速完成,日志已保存至 %LOGFILE%
macOS/Linux(Shell 脚本 speedtest_log.sh):
#!/bin/bash LOGFILE=~/speedtest_logs/speedtest_$(date +%Y%m%d_%H%M%S).log mkdir -p ~/speedtest_logs echo "=== Speedtest Log: $(date) ===" >> $LOGFILE speedtest --accept-license --accept-gdpr -f json-pretty >> $LOGFILE 2>&1 echo "" >> $LOGFILE echo "测速完成,日志已保存至 $LOGFILE"
- 关键参数说明:
--accept-license --accept-gdpr:首次运行时跳过协议确认。-f json-pretty:输出格式化为易读的JSON,包含下载、上传、延迟等详细数据。- 如果脚本需要直接调用,记得赋予执行权限:
chmod +x speedtest_log.sh
设置定时任务
-
Windows(任务计划程序):
- 搜索并打开“任务计划程序”。
- 右侧点击“创建基本任务”。
- 名称:定时测网速。
- 触发器:选择“每天”,设置开始时间(如 08:00),并勾选“每隔 1 小时发生一次,持续一天”(或者按需设置间隔,比如每2小时)。
- 操作:启动程序 -> 程序或脚本选择
C:\speedtest_logs\speedtest_log.bat。 - 完成。
-
macOS/Linux(crontab):
- 在终端输入
crontab -e。 - 添加一行(例如每小时执行一次):
# 每小时的第0分钟执行测速脚本 0 * * * * /home/your_user/speedtest_log.sh # 或者每30分钟执行一次 (每小时的0分和30分) */30 * * * * /home/your_user/speedtest_log.sh
- 在终端输入
查看日志
脚本运行后,你可以在指定的文件夹(如 C:\speedtest_logs)中看到类似 speedtest_20231027_143000.log 的文件,里面包含完整的测速数据,如:
{
"type": "result",
"timestamp": "2023-10-27T14:30:00Z",
"download": {
"bandwidth": 12500000,
"bytes": 25000000,
"elapsed": 2000,
"latency": {
"iqm": 10,
"low": 5,
"high": 20,
"jitter": 2
}
},
"upload": {
"bandwidth": 2500000,
"bytes": 5000000,
"elapsed": 2000
},
"packetLoss": 0,
"isp": "Your ISP",
"interface": {
"internalIp": "192.168.1.x",
"name": "eth0",
"macAddr": "..."
},
"server": {
"id": 12345,
"host": "speedtest.example.com",
"port": 8080,
"name": "Your City",
"location": "Your Country"
},
"result": {
"id": "...",
"url": "..."
}
}
- 带宽转换:
bandwidth单位是 bit/s(比特每秒),要换算成常见的 Mbps,除以 1,000,000。1250000012.5 Mbps。
使用 iPerf3(测内网/局域网速度)
如果你主要关心局域网内(比如路由到NAS)的网速,而不是外网,用 iPerf3 更合适。
- 在需要测试的一端(通常是一台服务器或电脑)运行:
iperf3 -s(作为服务端)。 - 在需要测试的另一端(你的电脑)运行:
iperf3 -c <服务端IP>。 - 将上述命令写入脚本,配合
at或cron定时执行。
使用图形化工具(适合不想写代码的用户)
如果你不习惯命令行,可以使用一些现成的图形化工具:
- NetWorx(Windows):它自带“网速监控”和“流量统计”功能,可以设置定时自动记录网速,并导出为CSV/HTML报告。
- TrafficMonitor(Windows):开源免费,可以监控网速并记录日志。
- Home Assistant(智能家居平台):配合 HACS 或集成配置,可以定时运行 speedtest 并在仪表盘显示历史图表。
如何将测速结果自动汇总成图表?
如果不想手动翻看日志,可以用 Python 脚本解析 JSON 日志并绘图:
import json
import os
import pandas as pd
import matplotlib.pyplot as plt
log_dir = "~/speedtest_logs/"
data = []
for filename in os.listdir(os.path.expanduser(log_dir)):
if filename.endswith(".log"):
with open(os.path.join(os.path.expanduser(log_dir), filename)) as f:
try:
content = f.read()
# 提取JSON部分(假设每行一个结果,或从===标记之间解析)
# 这里简化处理,实际需根据你的日志格式调整
for line in content.split('\n'):
if line.startswith('{'):
record = json.loads(line)
data.append({
'time': record['timestamp'],
'download_mbps': record['download']['bandwidth'] / 1e6,
'upload_mbps': record['upload']['bandwidth'] / 1e6,
'latency_ms': record['ping']['latency'] # 注意字段名可能略有不同
})
except:
pass
df = pd.DataFrame(data)
df['time'] = pd.to_datetime(df['time'])
df = df.sort_values('time')
plt.figure(figsize=(20, 8))
plt.plot(df['time'], df['download_mbps'], label='Download (Mbps)')
plt.plot(df['time'], df['upload_mbps'], label='Upload (Mbps)')
plt.xlabel('Time')
plt.ylabel('Speed (Mbps)')'Network Speed Over Time')
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Speedtest CLI + 定时任务 | 准确、官方数据、跨平台、可定制强 | 需要写脚本,对新手稍复杂 | 最推荐,长期监控外网速度 |
| 图形化工具(如 NetWorx) | 无需代码,界面直观 | 功能固定,数据导出可能不够灵活 | 不想折腾代码、快速使用 |
| iPerf3 | 测量局域网内真实吞吐量 | 需要两端都运行,配置稍复杂 | 测试路由器/NAS到电脑的内网速度 |
| 路由器自带功能 | 简单直接,无需额外设备 | 功能定制性差,数据不可导出 | 只是偶尔看一眼当前速度 |
建议选择方案一的“Speedtest CLI + 计划任务”,它最通用、最可靠,而且完全自动化,数据可导出。
如果你需要详细的脚本示例或针对某种特定情况的配置(比如只测上传下载的数值并发送邮件通知),可以告诉我,我可以为你进一步优化。
标签: 一键测速