Files
petwash/系统参数读写测试指南.md

553 lines
12 KiB
Markdown
Raw Normal View History

2026-03-03 16:55:02 +08:00
# 系统参数读写功能测试指南
## 测试环境准备
### 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正常初始化流程
#### 测试步骤
1. 启动应用程序
2. 观察日志输出
3. 检查界面显示
#### 预期结果
```
日志输出:
[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设备未连接
#### 测试步骤
1. 断开设备网络或关闭设备
2. 启动应用程序
3. 观察系统行为
#### 预期结果
```
日志输出:
[INFO] 正在连接 Modbus TCP 设备: 192.168.1.10:502
[ERROR] Modbus TCP 连接失败
[WARNING] Modbus TCP 设备连接失败,使用默认配置
[INFO] 已加载默认参数配置
界面显示:
- 状态消息:"系统就绪,设备未连接"
- 系统参数显示默认值
- 液位显示默认值
```
#### 验证点
- ✅ 连接失败被正确处理
- ✅ 使用默认配置
- ✅ 应用程序正常运行
- ✅ 用户收到明确提示
---
### 场景3修改并保存参数设备已连接
#### 测试步骤
1. 确保设备已连接
2. 点击 "系统设置" 按钮
3. 修改参数:
- 首次喷水时间2 → 3
- 热风时间5 → 6
4. 点击 "保存设置" 按钮
5. 观察结果
#### 预期结果
```
日志输出:
[INFO] 本地参数已更新 - 首次喷水:3min, ..., 热风:6min, ...
[INFO] 正在将参数写入设备...
[INFO] 参数已成功写入设备
界面显示:
- 弹出消息框:"系统参数已保存到设备!"
- 状态消息:"参数保存成功"
```
#### 验证点
- ✅ 参数修改成功
- ✅ 写入设备成功
- ✅ 本地配置已更新
- ✅ 用户收到成功提示
#### 验证方法
使用 Modbus 测试工具读取 D404 和 D420
```
D404 = 3 (首次喷水时间)
D420 = 6 (热风时间)
```
---
### 场景4修改并保存参数设备未连接
#### 测试步骤
1. 断开设备连接
2. 点击 "系统设置" 按钮
3. 修改参数
4. 点击 "保存设置" 按钮
5. 观察结果
#### 预期结果
```
日志输出:
[INFO] 本地参数已更新 - ...
界面显示:
- 弹出警告消息框:
"系统参数已保存到本地配置!
注意:设备未连接,参数未写入设备。"
- 状态消息:"参数已保存(仅本地)"
```
#### 验证点
- ✅ 本地配置已更新
- ✅ 未尝试写入设备
- ✅ 用户收到明确警告
- ✅ 应用程序正常运行
---
### 场景5液位定时更新
#### 测试步骤
1. 确保设备已连接
2. 观察液位显示
3. 等待30秒
4. 检查液位是否更新
5. 查看日志
#### 预期结果
```
日志输出每30秒
[INFO] 液位读取成功 - 1号:80%, 2号:75%, 3号:70%
[INFO] 液位读取成功 - 1号:79%, 2号:74%, 3号:69%
...
界面显示:
- 液位数值每30秒自动更新
- 无需用户操作
```
#### 验证点
- ✅ 定时器正常工作
- ✅ 液位数据自动更新
- ✅ 无错误日志
- ✅ 界面实时刷新
---
### 场景6参数范围验证
#### 测试步骤
1. 进入系统设置
2. 尝试将参数增加到超过60
3. 尝试将参数减少到小于0
4. 观察结果
#### 预期结果
```
操作:
- 点击 + 按钮多次
- 参数值增加到 60 后不再增加
- 点击 - 按钮多次
- 参数值减少到 0 后不再减少
界面显示:
- 参数值始终在 0-60 范围内
- 按钮仍可点击但值不变
```
#### 验证点
- ✅ 参数最大值限制为 60
- ✅ 参数最小值限制为 0
- ✅ 边界值处理正确
- ✅ 界面响应正常
---
### 场景7写入失败处理
#### 测试步骤
1. 设备已连接
2. 修改参数
3. 在保存过程中断开设备网络
4. 观察结果
#### 预期结果
```
日志输出:
[INFO] 正在将参数写入设备...
[ERROR] 写入设备参数失败: 连接超时
界面显示:
- 弹出错误消息框:"保存失败: 写入设备失败: 连接超时"
- 状态消息:"参数保存失败"
```
#### 验证点
- ✅ 错误被正确捕获
- ✅ 用户收到错误提示
- ✅ 应用程序不崩溃
- ✅ 可以重试操作
---
### 场景8断线重连
#### 测试步骤
1. 应用程序运行中,设备已连接
2. 断开设备网络
3. 等待10秒心跳检测周期
4. 恢复设备网络
5. 观察重连过程
#### 预期结果
```
日志输出:
[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批量参数修改
#### 测试步骤
1. 进入系统设置
2. 修改所有时间参数:
- 首次喷水2 → 3
- 沐浴1后喷水2 → 4
- 沐浴2后喷水2 → 5
- 沐浴3后喷水2 → 6
- 喷沐浴露11 → 2
- 喷沐浴露21 → 3
- 喷沐浴露31 → 4
- 热风5 → 7
- 冷风2 → 3
- 紫外线3 → 5
3. 点击保存
4. 验证所有参数
#### 预期结果
```
日志输出:
[INFO] 本地参数已更新 - 首次喷水:3min, 沐浴1后:4min, 沐浴2后:5min,
沐浴3后:6min, 喷沐浴露1:2min, 喷沐浴露2:3min, 喷沐浴露3:4min,
冷风:3min, 热风:7min, 紫外线:5min
[INFO] 正在将参数写入设备...
[INFO] 参数已成功写入设备
界面显示:
- 所有参数显示新值
- 保存成功提示
```
#### 验证点
- ✅ 所有参数正确保存
- ✅ 批量写入成功
- ✅ 数据一致性
- ✅ 无数据丢失
---
### 场景10重启后参数持久化
#### 测试步骤
1. 修改参数并保存到设备
2. 关闭应用程序
3. 重新启动应用程序
4. 检查参数值
#### 预期结果
```
界面显示:
- 参数值与修改后的值一致
- 从设备读取的值正确显示
```
#### 验证点
- ✅ 设备参数持久化
- ✅ 重启后正确读取
- ✅ 数据一致性
- ✅ 无数据丢失
---
## 性能测试
### 测试1读取性能
#### 测试方法
```csharp
var stopwatch = Stopwatch.StartNew();
await LoadDeviceParametersAsync();
stopwatch.Stop();
Console.WriteLine($"读取耗时: {stopwatch.ElapsedMilliseconds}ms");
```
#### 预期结果
- 读取时间参数:< 100ms
- 读取液位数据:< 300ms3次读取
- 总耗时:< 500ms
### 测试2写入性能
#### 测试方法
```csharp
var stopwatch = Stopwatch.StartNew();
await SaveParametersToDeviceAsync();
stopwatch.Stop();
Console.WriteLine($"写入耗时: {stopwatch.ElapsedMilliseconds}ms");
```
#### 预期结果
- 写入11个寄存器< 200ms
### 测试3定时更新性能
#### 测试方法
- 运行应用程序1小时
- 监控 CPU 和内存使用
- 检查日志文件大小
#### 预期结果
- CPU 使用率:< 5%
- 内存使用:稳定,无泄漏
- 日志文件:合理大小
---
## 压力测试
### 测试1频繁读写
#### 测试方法
```csharp
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无法连接设备
**排查步骤:**
1. ping 192.168.1.10
2. telnet 192.168.1.10 502
3. 检查防火墙设置
4. 检查设备 Modbus TCP 服务
### 问题2读取参数失败
**排查步骤:**
1. 使用 Modbus 测试工具验证地址
2. 检查从站 ID 是否正确
3. 查看详细错误日志
4. 确认寄存器地址范围
### 问题3写入参数失败
**排查步骤:**
1. 检查寄存器是否可写
2. 验证数据格式
3. 检查权限设置
4. 查看设备日志
### 问题4液位不更新
**排查步骤:**
1. 检查定时器是否启动
2. 查看错误日志
3. 验证液位寄存器地址
4. 检查设备连接状态
---
## 总结
完成所有测试场景后,系统应该:
- ✅ 稳定可靠
- ✅ 错误处理完善
- ✅ 性能满足要求
- ✅ 用户体验良好
- ✅ 适合生产环境部署