- Fix trailing whitespace in kex.rs and s3.rs - Add missing KexProposal import in kex_complete.rs - Auto-fix clippy warnings across all crates - All 153 tests pass
10 KiB
10 KiB
SFTP Client 测试建议与分析
测试目标:验证 MarkBaseSSH SFTP 实现(Phase 7)的兼容性和稳定性
测试环境:MarkBaseSSH server (port 2024) + macOS client
测试用户:demo (password: demo123)
推荐测试方案 ⭐⭐⭐⭐⭐
方案 1: OpenSSH sftp client(必须测试)
推荐等级:⭐⭐⭐⭐⭐ 最高优先级
理由:
- ✅ OpenSSH 是标准实现,MarkBaseSSH 必须完全兼容
- ✅ macOS 内置,无需额外安装
- ✅ 命令行工具,适合自动化测试
- ✅ 完整的 SFTP 协议支持(SSH_FXP_* 所有 packet)
- ✅ 错误信息清晰,易于调试
测试命令:
# 基本连接测试
sftp -P 2024 demo@127.0.0.1
# 批量测试脚本
sftp -P 2024 -b /tmp/sftp_test_batch.txt demo@127.0.0.1
# 大文件传输测试
sftp -P 2024 demo@127.0.0.1 <<EOF
put /tmp/test_100mb.bin /data/test_100mb.bin
get /data/test_100mb.bin /tmp/test_download.bin
ls -la /data/
bye
EOF
# MD5 校验
md5 /tmp/test_100mb.bin /tmp/test_download.bin
测试覆盖:
- ✅ SSH_FXP_INIT/VERSION(握手)
- ✅ SSH_FXP_REALPATH(路径解析)
- ✅ SSH_FXP_OPENDIR/READDIR(目录浏览)
- ✅ SSH_FXP_OPEN/READ/WRITE(文件传输)
- ✅ SSH_FXP_CLOSE(句柄管理)
- ✅ SSH_FXP_STAT/LSTAT(文件属性)
- ✅ SSH_FXP_MKDIR/RMDIR(目录操作)
- ✅ SSH_FXP_REMOVE/RENAME(文件操作)
预期结果:
- ✅ 所有操作成功
- ✅ 文件完整性校验一致
- ✅ 错误处理正确(权限、路径不存在等)
方案 2: Cyberduck(macOS 推荐 GUI client)
推荐等级:⭐⭐⭐⭐⭐ 强烈推荐
理由:
- ✅ macOS 原生应用,用户友好
- ✅ 广泛使用,稳定可靠
- ✅ 支持 SFTP、FTP、WebDAV 等多种协议
- ✅ 支持大文件传输(断点续传)
- ✅ 支持同步功能(同步本地和远程目录)
- ✅ 书签管理(保存连接配置)
安装方式:
# Homebrew 安装
brew install --cask cyberduck
# 或从 App Store 下载
# https://apps.apple.com/app/cyberduck/id409222152
测试配置:
协议: SFTP
服务器: 127.0.0.1
端口: 2024
用户名: demo
密码: demo123
路径: /Users/accusys/markbase/data
测试覆盖:
- ✅ GUI 连接测试(用户交互)
- ✅ 文件上传(拖拽上传)
- ✅ 文件下载(拖拽下载)
- ✅ 目录浏览(双击进入)
- ✅ 文件删除(右键菜单)
- ✅ 文件重命名(右键菜单)
- ✅ 新建目录(右键菜单)
- ✅ 大文件传输(100MB+)
- ✅ 断点续传测试(中断后重新连接)
预期结果:
- ✅ 连接成功,显示文件列表
- ✅ 上传/下载正常,进度显示
- ✅ 文件操作正常,错误提示清晰
方案 3: FileZilla(跨平台 GUI client)
推荐等级:⭐⭐⭐⭐ 推荐
理由:
- ✅ 跨平台(Windows, macOS, Linux)
- ✅ 广泛使用,社区活跃
- ✅ 支持多种协议(SFTP, FTP, FTPS)
- ✅ 详细日志显示(packet 级别)
- ✅ 支持并发传输(多文件同时上传/下载)
- ✅ 站点管理器(保存连接配置)
安装方式:
# Homebrew 安装
brew install --cask filezilla
# 或从官网下载
# https://filezilla-project.org/download.php
测试配置:
协议: SFTP - SSH File Transfer Protocol
主机: 127.0.0.1
端口: 2024
用户: demo
密码: demo123
测试覆盖:
- ✅ GUI 连接测试
- ✅ 文件传输(上传/下载)
- ✅ 目录浏览
- ✅ 文件操作(删除、重命名、新建目录)
- ✅ 并发传输测试(多文件同时传输)
- ✅ 日志分析(查看 SFTP packet)
- ✅ 大文件传输(100MB+)
预期结果:
- ✅ 连接成功
- ✅ 日志显示 SSH_FXP_* packet(验证协议实现)
- ✅ 文件传输正常
- ✅ 并发传输正常(Window Control 验证)
方案 4: lftp(高级命令行 client)
推荐等级:⭐⭐⭐⭐ 推荐(高级测试)
理由:
- ✅ 功能丰富(镜像、同步、断点续传)
- ✅ 支持多种协议(SFTP, FTP, HTTP, HTTPS)
- ✅ 支持并行传输(多连接并发)
- ✅ 支持脚本化(批量操作)
- ✅ 详细日志(调试信息)
安装方式:
# Homebrew 安装
brew install lftp
测试命令:
# 基本连接测试
lftp sftp://demo:demo123@127.0.0.1:2024
# 镜像测试(同步目录)
lftp sftp://demo:demo123@127.0.0.1:2024 <<EOF
mirror -R /tmp/test_folder /data/test_folder
mirror /data/test_folder /tmp/download_folder
bye
EOF
# 并行传输测试
lftp sftp://demo:demo123@127.0.0.1:2024 <<EOF
set sftp:parallel 4
mput /tmp/test_*.bin
bye
EOF
# 断点续传测试
lftp sftp://demo:demo123@127.0.0.1:2024 <<EOF
pget -n 4 -c /data/test_100mb.bin
bye
EOF
测试覆盖:
- ✅ 基本操作(ls, get, put, rm)
- ✅ 镜像功能(mirror,同步目录)
- ✅ 并行传输(mput, mget)
- ✅ 断点续传(pget -c)
- ✅ 高级功能验证
预期结果:
- ✅ 连接成功
- ✅ 镜像同步正常
- ✅ 并行传输正常(Window Control 验证)
- ✅ 断点续传正常
测试优先级排序 ⭐⭐⭐⭐⭐
| 优先级 | Client | 类型 | 安装状态 | 测试必要性 |
|---|---|---|---|---|
| 1 | OpenSSH sftp | 命令行 | ✅ 已安装 | ⭐⭐⭐⭐⭐ 必须测试 |
| 2 | Cyberduck | GUI | ❌ 未安装 | ⭐⭐⭐⭐⭐ 强烈推荐 |
| 3 | FileZilla | GUI | ❌ 未安装 | ⭐⭐⭐⭐ 推荐 |
| 4 | lftp | 命令行 | ❌ 未安装 | ⭐⭐⭐⭐ 推荐(高级测试) |
建议测试流程 ⭐⭐⭐⭐⭐
Phase 1: OpenSSH sftp(必须)
时间:30 分钟
步骤:
- 基本连接测试(pwd, ls, cd)
- 文件上传测试(put)
- 文件下载测试(get)
- 文件操作测试(rm, rename, mkdir)
- 大文件传输测试(100MB)
- MD5 校验验证
验证重点:
- ✅ SSH_FXP_* packet 完整实现
- ✅ Window Control 正常工作
- ✅ 文件完整性校验
Phase 2: Cyberduck(强烈推荐)
时间:20 分钟
步骤:
- GUI 连接测试
- 文件拖拽上传
- 文件拖拽下载
- 目录浏览测试
- 文件操作测试(右键菜单)
- 大文件传输测试(100MB)
- 断点续传测试
验证重点:
- ✅ 用户交互友好性
- ✅ 大文件传输稳定性
- ✅ 错误提示清晰性
Phase 3: FileZilla(推荐)
时间:30 分钟
步骤:
- GUI 连接测试
- 文件传输测试
- 并发传输测试(多文件同时)
- 日志分析(SSH_FXP_* packet)
- 大文件传输测试
验证重点:
- ✅ 并发传输(Window Control)
- ✅ 协议实现验证(packet 日志)
- ✅ 错误处理
Phase 4: lftp(高级测试)
时间:40 分钟
步骤:
- 基本连接测试
- 镜像同步测试(mirror)
- 并行传输测试(mput)
- 断点续传测试(pget)
- 性能对比
验证重点:
- ✅ 高级功能兼容性
- ✅ 性能优化验证
- ✅ 稳定性测试
测试脚本建议 ⭐⭐⭐⭐⭐
OpenSSH sftp 批量测试脚本
文件:/tmp/sftp_test_batch.txt
# 基本操作测试
pwd
ls -la
cd data
ls -la
# 文件上传测试
put /tmp/test_5mb.bin test_5mb.bin
put /tmp/test_10mb.bin test_10mb.bin
put /tmp/test_100mb.bin test_100mb.bin
# 文件下载测试
get test_100mb.bin /tmp/test_download.bin
# 文件操作测试
mkdir test_dir
rename test_5mb.bin test_5mb_renamed.bin
rm test_10mb.bin
rmdir test_dir
# 属性查询测试
stat test_100mb.bin
ls -la
# 退出
bye
执行命令:
# 创建测试文件
dd if=/dev/urandom of=/tmp/test_5mb.bin bs=1M count=5
dd if=/dev/urandom of=/tmp/test_10mb.bin bs=1M count=10
dd if=/dev/urandom of=/tmp/test_100mb.bin bs=1M count=100
# 执行批量测试
sftp -P 2024 -b /tmp/sftp_test_batch.txt demo@127.0.0.1
# MD5 校验
md5 /tmp/test_100mb.bin /tmp/test_download.bin
错误处理测试 ⭐⭐⭐⭐⭐
测试场景:
- ✅ 路径不存在(SSH_FXP_NO_SUCH_FILE)
- ✅ 权限不足(SSH_FXP_PERMISSION_DENIED)
- ✅ 文件已存在(SSH_FXP_FILE_ALREADY_EXISTS)
- ✅ 磁盘空间不足(SSH_FXP_FAILURE)
- ✅ 连接中断(断点续传)
测试命令:
# 路径不存在测试
sftp -P 2024 demo@127.0.0.1 <<EOF
get /data/nonexistent_file.bin /tmp/test.bin
EOF
# 预期: "No such file"
# 权限不足测试
sftp -P 2024 demo@127.0.0.1 <<EOF
put /tmp/test.bin /root/test.bin
EOF
# 预期: "Permission denied"
# 文件已存在测试
sftp -P 2024 demo@127.0.0.1 <<EOF
put /tmp/test_100mb.bin /data/test_100mb.bin
EOF
# 预期: 文件已存在,询问是否覆盖
性能测试建议 ⭐⭐⭐⭐⭐
测试指标:
- 传输速率(MB/s)
- 并发传输能力(多文件同时)
- 大文件传输稳定性(100MB+)
- Window Control 效率(window adjust frequency)
测试命令:
# OpenSSH sftp 性能测试
time sftp -P 2024 demo@127.0.0.1 <<EOF
put /tmp/test_100mb.bin /data/test_100mb.bin
bye
EOF
# FileZilla 并发传输测试
# 同时上传 10 个 10MB 文件,测试 Window Control
# lftp 并行传输测试
lftp sftp://demo:demo123@127.0.0.1:2024 <<EOF
set sftp:parallel 4
mput /tmp/test_1*.bin
bye
EOF
总结与建议 ⭐⭐⭐⭐⭐
必须测试:
- ⭐⭐⭐⭐⭐ OpenSSH sftp(标准实现,兼容性验证)
强烈推荐:
- ⭐⭐⭐⭐⭐ Cyberduck(macOS 原生,用户友好)
- ⭐⭐⭐⭐ FileZilla(跨平台,日志详细)
可选测试:
- ⭐⭐⭐⭐ lftp(高级功能,性能优化)
测试时间估算:
- Phase 1(OpenSSH sftp):30 分钟
- Phase 2(Cyberduck):20 分钟
- Phase 3(FileZilla):30 分钟
- Phase 4(lftp):40 分钟
- 总计:约 2 小时
预期结果:
- ✅ 所有 client 连接成功
- ✅ 所有操作正常(上传、下载、浏览、删除等)
- ✅ 文件完整性校验一致
- ✅ 错误处理正确
- ✅ Window Control 正常工作
最后更新:2026-06-17