
网速测试这件事,平时要么打开浏览器上 Speedtest.net 手动跑一次,要么压根不测——等到视频会议卡成 PPT 才意识到网络有问题。
用 Python 的 speedtest-cli 库把这件事自动化,其实不难。测完之后你可以存数据、画趋势图、低于阈值发告警,比网页版能做的事多不少。
pip install speedtest-cli下面这个脚本完成了查找最优服务器、测速、格式化输出、网络质量评估、按阈值给出建议这几件事:
importspeedtest
importtime
fromdatetimeimportdatetime
class NetworkSpeedTester:
def __init__(self):
self.st = speedtest.Speedtest()
self.results = None
def find_best_server(self):
print("正在搜索最佳测试服务器...")
servers = self.st.get_servers()
best_server = self.st.get_best_server()
print(f"已选择服务器: {best_server['host']} ({best_server['country']})")
print(f"服务器距离: {best_server['distance']:.2f} km")
returnbest_server
def run_speed_test(self, timeout=30):
print("\n开始网速测试...")
print("正在测试下载速度...")
download_speed = self.st.download(timeout=timeout)
print("正在测试上传速度...")
upload_speed = self.st.upload(timeout=timeout)
self.results = self.st.results.dict()
return {
'download': download_speed,
'upload': upload_speed,
'ping': self.results['ping'],
'server': self.results['server']
}
def format_results(self, test_results):
download_mbps = test_results['download'] /1_000_000
upload_mbps = test_results['upload'] /1_000_000
ping_ms = test_results['ping']
quality = self.assess_network_quality(download_mbps, upload_mbps, ping_ms)
print("\n"+"="*50)
print("网速测试结果")
print("="*50)
print(f"测试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"测试服务器: {test_results['server']['host']}")
print(f"服务器位置: {test_results['server']['country']}")
print("-"*50)
print(f"下载速度: {download_mbps:.2f} Mbps")
print(f"上传速度: {upload_mbps:.2f} Mbps")
print(f"网络延迟: {ping_ms:.2f} ms")
print("-"*50)
print(f"网络质量评估: {quality}")
print("="*50)
return {
'download_mbps': download_mbps,
'upload_mbps': upload_mbps,
'ping_ms': ping_ms,
'quality': quality
}
def assess_network_quality(self, download, upload, ping):
ifping<20:
latency = "极佳"
elifping<50:
latency = "良好"
elifping<100:
latency = "一般"
else:
latency = "较差"
ifdownload>100:
speed = "超高速"
elifdownload>50:
speed = "高速"
elifdownload>20:
speed = "中速"
else:
speed = "低速"
returnf"{speed}网络,延迟{latency}"
def main():
print("Python 网速测试工具 v1.0")
print("="*50)
try:
tester = NetworkSpeedTester()
tester.find_best_server()
raw_results = tester.run_speed_test(timeout=30)
formatted_results = tester.format_results(raw_results)
provide_recommendations(formatted_results)
exceptspeedtest.ConfigRetrievalError:
print("错误:无法连接到 Speedtest 服务器,请检查网络连接")
exceptExceptionase:
print(f"测试过程中发生错误: {str(e)}")
def provide_recommendations(results):
print("\n建议:")
ifresults['download_mbps'] <10:
print(" - 下载速度较低,可能影响视频流媒体和大文件下载")
print(" 建议检查网络连接,或联系运营商")
ifresults['upload_mbps'] <5:
print(" - 上传速度较低,视频会议和文件上传会受影响")
print(" 可以考虑升级套餐,或优化上传设置")
ifresults['ping_ms'] >100:
print(" - 延迟偏高,实时通信和在线游戏体验会变差")
print(" 试试切换有线连接,或选择更近的服务器")
ifresults['quality'].startswith("高速") andresults['ping_ms'] <50:
print(" 当前网络状态良好,适合所有网络应用")
if __name__ == "__main__":
main()运行后输出类似这样:
Python 网速测试工具 v1.0
==================================================
正在搜索最佳测试服务器...
已选择服务器: speedtest.example.com (中国)
服务器距离: 125.43 km
开始网速测试...
正在测试下载速度...
正在测试上传速度...
==================================================
网速测试结果
==================================================
测试时间: 2026-03-26 16:30:15
测试服务器: speedtest.example.com
服务器位置: 中国
--------------------------------------------------
下载速度: 85.67 Mbps
上传速度: 32.45 Mbps
网络延迟: 28.73 ms
--------------------------------------------------
网络质量评估: 高速网络,延迟良好
==================================================
建议:
当前网络状态良好,适合所有网络应用基础功能跑通之后,几个方向可以继续做:
schedule 定时跑,把结果写进 CSV 或数据库,记录全天网络波动matplotlib 把历史数据画成折线图,一眼看出哪个时段网速差测速本身是最简单的那一步,数据积累起来之后能做的事才有意思。
“无他,惟手熟尔”!有需要的用起来!
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!