12 KiB
12 KiB
系统参数读写功能测试指南
测试环境准备
1. 设备要求
- Modbus TCP 设备(IP: 192.168.1.10, Port: 502)
- 支持保持寄存器读写
- 地址范围:D404-D424, D1280, D1330, D1380
2. 网络配置
- 确保控制端与设备在同一网络
- 测试网络连通性:
ping 192.168.1.10 - 确认端口 502 可访问
3. 软件准备
- 已编译的 PetWashControl 应用程序
- Modbus 测试工具(可选,用于验证)
测试场景
场景1:正常初始化流程
测试步骤
- 启动应用程序
- 观察日志输出
- 检查界面显示
预期结果
日志输出:
[INFO] 开始初始化系统...
[INFO] 正在连接 Modbus TCP 设备: 192.168.1.10:502
[INFO] Modbus TCP 连接成功: 192.168.1.10:502
[INFO] 正在从设备读取系统参数...
[INFO] 时间参数读取成功 - 首次喷水:2min, 沐浴1后:2min, ...
[INFO] 液位读取成功 - 1号:80%, 2号:75%, 3号:70%
[INFO] 系统初始化完成
界面显示:
- 状态消息:"系统就绪,设备已连接"
- 系统参数显示设备读取的值
- 液位显示实际百分比
验证点
- ✅ Modbus 连接成功
- ✅ 参数读取成功
- ✅ 界面显示正确
- ✅ 无错误日志
场景2:设备未连接
测试步骤
- 断开设备网络或关闭设备
- 启动应用程序
- 观察系统行为
预期结果
日志输出:
[INFO] 正在连接 Modbus TCP 设备: 192.168.1.10:502
[ERROR] Modbus TCP 连接失败
[WARNING] Modbus TCP 设备连接失败,使用默认配置
[INFO] 已加载默认参数配置
界面显示:
- 状态消息:"系统就绪,设备未连接"
- 系统参数显示默认值
- 液位显示默认值
验证点
- ✅ 连接失败被正确处理
- ✅ 使用默认配置
- ✅ 应用程序正常运行
- ✅ 用户收到明确提示
场景3:修改并保存参数(设备已连接)
测试步骤
- 确保设备已连接
- 点击 "系统设置" 按钮
- 修改参数:
- 首次喷水时间:2 → 3
- 热风时间:5 → 6
- 点击 "保存设置" 按钮
- 观察结果
预期结果
日志输出:
[INFO] 本地参数已更新 - 首次喷水:3min, ..., 热风:6min, ...
[INFO] 正在将参数写入设备...
[INFO] 参数已成功写入设备
界面显示:
- 弹出消息框:"系统参数已保存到设备!"
- 状态消息:"参数保存成功"
验证点
- ✅ 参数修改成功
- ✅ 写入设备成功
- ✅ 本地配置已更新
- ✅ 用户收到成功提示
验证方法
使用 Modbus 测试工具读取 D404 和 D420:
D404 = 3 (首次喷水时间)
D420 = 6 (热风时间)
场景4:修改并保存参数(设备未连接)
测试步骤
- 断开设备连接
- 点击 "系统设置" 按钮
- 修改参数
- 点击 "保存设置" 按钮
- 观察结果
预期结果
日志输出:
[INFO] 本地参数已更新 - ...
界面显示:
- 弹出警告消息框:
"系统参数已保存到本地配置!
注意:设备未连接,参数未写入设备。"
- 状态消息:"参数已保存(仅本地)"
验证点
- ✅ 本地配置已更新
- ✅ 未尝试写入设备
- ✅ 用户收到明确警告
- ✅ 应用程序正常运行
场景5:液位定时更新
测试步骤
- 确保设备已连接
- 观察液位显示
- 等待30秒
- 检查液位是否更新
- 查看日志
预期结果
日志输出(每30秒):
[INFO] 液位读取成功 - 1号:80%, 2号:75%, 3号:70%
[INFO] 液位读取成功 - 1号:79%, 2号:74%, 3号:69%
...
界面显示:
- 液位数值每30秒自动更新
- 无需用户操作
验证点
- ✅ 定时器正常工作
- ✅ 液位数据自动更新
- ✅ 无错误日志
- ✅ 界面实时刷新
场景6:参数范围验证
测试步骤
- 进入系统设置
- 尝试将参数增加到超过60
- 尝试将参数减少到小于0
- 观察结果
预期结果
操作:
- 点击 + 按钮多次
- 参数值增加到 60 后不再增加
- 点击 - 按钮多次
- 参数值减少到 0 后不再减少
界面显示:
- 参数值始终在 0-60 范围内
- 按钮仍可点击但值不变
验证点
- ✅ 参数最大值限制为 60
- ✅ 参数最小值限制为 0
- ✅ 边界值处理正确
- ✅ 界面响应正常
场景7:写入失败处理
测试步骤
- 设备已连接
- 修改参数
- 在保存过程中断开设备网络
- 观察结果
预期结果
日志输出:
[INFO] 正在将参数写入设备...
[ERROR] 写入设备参数失败: 连接超时
界面显示:
- 弹出错误消息框:"保存失败: 写入设备失败: 连接超时"
- 状态消息:"参数保存失败"
验证点
- ✅ 错误被正确捕获
- ✅ 用户收到错误提示
- ✅ 应用程序不崩溃
- ✅ 可以重试操作
场景8:断线重连
测试步骤
- 应用程序运行中,设备已连接
- 断开设备网络
- 等待10秒(心跳检测周期)
- 恢复设备网络
- 观察重连过程
预期结果
日志输出:
[WARNING] 心跳检测: 连接已断开,尝试重连...
[INFO] 正在连接 Modbus TCP 设备: 192.168.1.10:502
[ERROR] Modbus TCP 连接失败
[WARNING] 检测到连接错误,尝试重新连接...
...
[INFO] Modbus TCP 连接成功: 192.168.1.10:502
[INFO] Modbus TCP 设备已连接
界面显示:
- 状态消息:"警告:设备连接断开"
- 自动重连后:"系统就绪,设备已连接"
验证点
- ✅ 断线被检测到
- ✅ 自动尝试重连
- ✅ 重连成功后恢复功能
- ✅ 界面状态正确更新
场景9:批量参数修改
测试步骤
- 进入系统设置
- 修改所有时间参数:
- 首次喷水:2 → 3
- 沐浴1后喷水:2 → 4
- 沐浴2后喷水:2 → 5
- 沐浴3后喷水:2 → 6
- 喷沐浴露1:1 → 2
- 喷沐浴露2:1 → 3
- 喷沐浴露3:1 → 4
- 热风:5 → 7
- 冷风:2 → 3
- 紫外线:3 → 5
- 点击保存
- 验证所有参数
预期结果
日志输出:
[INFO] 本地参数已更新 - 首次喷水:3min, 沐浴1后:4min, 沐浴2后:5min,
沐浴3后:6min, 喷沐浴露1:2min, 喷沐浴露2:3min, 喷沐浴露3:4min,
冷风:3min, 热风:7min, 紫外线:5min
[INFO] 正在将参数写入设备...
[INFO] 参数已成功写入设备
界面显示:
- 所有参数显示新值
- 保存成功提示
验证点
- ✅ 所有参数正确保存
- ✅ 批量写入成功
- ✅ 数据一致性
- ✅ 无数据丢失
场景10:重启后参数持久化
测试步骤
- 修改参数并保存到设备
- 关闭应用程序
- 重新启动应用程序
- 检查参数值
预期结果
界面显示:
- 参数值与修改后的值一致
- 从设备读取的值正确显示
验证点
- ✅ 设备参数持久化
- ✅ 重启后正确读取
- ✅ 数据一致性
- ✅ 无数据丢失
性能测试
测试1:读取性能
测试方法
var stopwatch = Stopwatch.StartNew();
await LoadDeviceParametersAsync();
stopwatch.Stop();
Console.WriteLine($"读取耗时: {stopwatch.ElapsedMilliseconds}ms");
预期结果
- 读取时间参数:< 100ms
- 读取液位数据:< 300ms(3次读取)
- 总耗时:< 500ms
测试2:写入性能
测试方法
var stopwatch = Stopwatch.StartNew();
await SaveParametersToDeviceAsync();
stopwatch.Stop();
Console.WriteLine($"写入耗时: {stopwatch.ElapsedMilliseconds}ms");
预期结果
- 写入11个寄存器:< 200ms
测试3:定时更新性能
测试方法
- 运行应用程序1小时
- 监控 CPU 和内存使用
- 检查日志文件大小
预期结果
- CPU 使用率:< 5%
- 内存使用:稳定,无泄漏
- 日志文件:合理大小
压力测试
测试1:频繁读写
测试方法
for (int i = 0; i < 100; i++)
{
await LoadDeviceParametersAsync();
await SaveParametersToDeviceAsync();
}
预期结果
- 所有操作成功
- 无错误或超时
- 数据一致性
测试2:长时间运行
测试方法
- 运行应用程序24小时
- 定期检查状态
- 记录所有异常
预期结果
- 应用程序稳定运行
- 液位定时更新正常
- 无内存泄漏
- 无连接问题
故障注入测试
测试1:网络延迟
测试方法
- 使用网络模拟工具增加延迟(100ms, 500ms, 1000ms)
- 执行读写操作
- 观察超时处理
预期结果
- 延迟 < 3000ms:操作成功
- 延迟 > 3000ms:超时错误,正确处理
测试2:网络丢包
测试方法
- 模拟 10%, 20%, 50% 丢包率
- 执行读写操作
- 观察重试机制
预期结果
- 低丢包率:操作成功(可能需要重试)
- 高丢包率:超时错误,正确处理
测试3:设备无响应
测试方法
- 设备连接但不响应请求
- 执行读写操作
- 观察超时处理
预期结果
- 操作超时(3秒)
- 错误被正确捕获
- 用户收到提示
测试检查清单
功能测试
- 初始化读取参数
- 初始化读取液位
- 修改参数
- 保存参数到设备
- 保存参数到本地
- 定时更新液位
- 参数范围验证
- 连接状态监控
错误处理
- 连接失败处理
- 读取失败处理
- 写入失败处理
- 超时处理
- 断线重连
性能测试
- 读取性能
- 写入性能
- 定时更新性能
- 长时间运行稳定性
用户体验
- 界面响应速度
- 错误提示清晰
- 状态显示准确
- 操作流程顺畅
测试报告模板
测试日期:____________________
测试人员:____________________
设备信息:____________________
测试结果:
场景1:正常初始化流程 [ ] 通过 [ ] 失败
场景2:设备未连接 [ ] 通过 [ ] 失败
场景3:修改并保存参数(已连接)[ ] 通过 [ ] 失败
场景4:修改并保存参数(未连接)[ ] 通过 [ ] 失败
场景5:液位定时更新 [ ] 通过 [ ] 失败
场景6:参数范围验证 [ ] 通过 [ ] 失败
场景7:写入失败处理 [ ] 通过 [ ] 失败
场景8:断线重连 [ ] 通过 [ ] 失败
场景9:批量参数修改 [ ] 通过 [ ] 失败
场景10:重启后参数持久化 [ ] 通过 [ ] 失败
问题记录:
1. ___________________________________________
2. ___________________________________________
3. ___________________________________________
建议:
1. ___________________________________________
2. ___________________________________________
3. ___________________________________________
总体评价:[ ] 优秀 [ ] 良好 [ ] 合格 [ ] 不合格
常见问题排查
问题1:无法连接设备
排查步骤:
- ping 192.168.1.10
- telnet 192.168.1.10 502
- 检查防火墙设置
- 检查设备 Modbus TCP 服务
问题2:读取参数失败
排查步骤:
- 使用 Modbus 测试工具验证地址
- 检查从站 ID 是否正确
- 查看详细错误日志
- 确认寄存器地址范围
问题3:写入参数失败
排查步骤:
- 检查寄存器是否可写
- 验证数据格式
- 检查权限设置
- 查看设备日志
问题4:液位不更新
排查步骤:
- 检查定时器是否启动
- 查看错误日志
- 验证液位寄存器地址
- 检查设备连接状态
总结
完成所有测试场景后,系统应该:
- ✅ 稳定可靠
- ✅ 错误处理完善
- ✅ 性能满足要求
- ✅ 用户体验良好
- ✅ 适合生产环境部署