RTU/mimo/webserver测试工程师/README.md

199 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WebServer 前端测试程序
本目录存放 RTU 项目 WebServer 前端的 Python 自动化测试脚本。
## 📁 目录结构
```
mimo/webserver测试工程师/
├── README.md # 本文件
├── test_ws_raw.py # 最简 WebSocket 连通性测试
├── test_debug_dc.py # datacenter out 命令调试
├── test_verify_push.py # 推送验证(添加后检查 out 推送)
├── test_verify_immediate_push.py # 验证 curd:add 立即推送修复
├── test_ws_dc_out.py # 数据中心→信号管理页 端到端测试 (v1)
├── test_ws_dc_out_v2.py # 数据中心→信号管理页 端到端测试 (v2)
├── test_ws_dc_out_v3.py # 数据中心→信号管理页 端到端测试 (v3)
└── test_regression_final.py # 全面回归测试(多信号+立即推送)
```
## 🔧 前置条件
1. **RTU 已运行**:目标设备上 RTU 进程已启动WebSocket 服务已监听 `8000` 端口
2. **目标 IP**:默认 `198.120.0.100`RK3568可在脚本中修改 `IP` 变量
3. **Python 3**:所有脚本仅依赖 Python 标准库(`socket`, `json`, `struct`, `base64`, `os`, `time`, `sys`, `hashlib`),无需额外安装
4. **网络可达**:测试机与目标 RTU 之间网络互通ping 通)
## 📋 测试程序说明
### 1. test_ws_raw.py — 最简 WebSocket 连通性测试
**功能**:验证与 RTU 的 WebSocket 基本通信是否正常。
**流程**
1. TCP 连接 `198.120.0.100:8000`
2. 执行 WebSocket 握手升级
3. 发送 `get_cmds` 请求
4. 接收并解析所有 WebSocket 帧(区分 text/binary/close/ping/pong
5. 打印响应内容
**使用方法**
```bash
python3 mimo/webserver测试工程师/test_ws_raw.py
```
**适用场景**:首次排查连通性问题,验证 WebSocket 协议握手是否成功。
---
### 2. test_debug_dc.py — datacenter out 命令调试
**功能**:调试 `datacenter out` 命令的行为,排查命令是否正常执行。
**流程**
1. WebSocket 握手后先接收初始数据cmd_list
2. 发送 `get_cmds` 获取可用命令列表
3. 发送 `{"type":"cmd","cmd":"datacenter out"}` 注册数据中心 out 信号
4. 逐帧解析响应,识别 `dc_data` 类型的 JSON 消息
5. 统计各类信号数量out/in/yk/ao/param
**使用方法**
```bash
python3 mimo/webserver测试工程师/test_debug_dc.py
```
**适用场景**:诊断 `datacenter out` 命令无响应问题时使用。
---
### 3. test_verify_push.py — 推送验证测试
**功能**:注册数据中心信号后,精确验证 WebSocket 推送是否包含所有信号。
**流程**
1. 发送 `datacenter out` 注册信号
2. 添加指定信号 `sys.ch.tcp_s0_if` 到 out 配置页
3. 等待 3 秒后收集所有 WebSocket 推送
4. 打印 `out` 推送中的信号列表saddr + val
5. 清理:删除测试信号,关闭连接
**使用方法**
```bash
python3 mimo/webserver测试工程师/test_verify_push.py
```
**适用场景**:验证特定信号的注册和推送是否正常。
---
### 4. test_verify_immediate_push.py — curd:add 立即推送验证
**功能**:验证 `curd:add` 操作后服务端是否立即推送(而非等 ws_task 定时轮询)。
**流程**
1. WebSocket 握手连接
2. 发送 `curd:add` 注册测试信号
3. 立即监听收发,检查服务端是否在 add 后立刻推送 out 数据
4. 对比定时推送和立即推送的延迟差异
5. 清理测试数据
**使用方法**
```bash
python3 mimo/webserver测试工程师/test_verify_immediate_push.py
```
**适用场景**:验证 `ws_method.cpp``curd:add` 的立即推送逻辑修复。
---
### 5. test_ws_dc_out.py — 端到端测试 v1初版
**功能**:完整测试"数据中心注册信号 → 信号管理页添加 → 推送验证 → 清理"全流程。
**流程**
1. 依次执行 `datacenter out/in/yk/ao/param` 注册所有类型信号
2.`dc_data` 中选择 out 信号(优先选 ctrl_type=1/2 的直控/选控信号)
3. 发送 `curd:add` 添加信号2 秒间隔模拟真人操作)
4. 等待 ws_task 定时推送 out 数据(最多 10 秒)
5. 验证添加的信号是否出现在推送列表中
6. 清理:发送 `curd:del` 删除测试信号
**技术特点**
- 使用 `drain_sock` 逐帧接收(区分 text/binary/close/ping 帧)
- 关键发现文档dc_data 通过二进制帧发送curd:add 不会立即推送
- `ws_recv` 函数支持 126/127 长度扩展和掩码处理
**使用方法**
```bash
python3 mimo/webserver测试工程师/test_ws_dc_out.py
```
---
### 6. test_ws_dc_out_v2.py — 端到端测试 v2改进版
**功能**:与 v1 相同,但改进了接收方式,使用 `ws_recv_all` 原始帧集中接收。
**改进点**
- 增加了初始 `get_cmds` 握手,打印可用命令列表
- 信号选择逻辑更宽松(直接从 out_signals 选前 3 个)
- 增加了 fallback当没有 out 信号时尝试添加已知信号
- 等待超时延长到 15 秒
**使用方法**
```bash
python3 mimo/webserver测试工程师/test_ws_dc_out_v2.py
```
---
### 7. test_ws_dc_out_v3.py — 端到端测试 v3修复版
**功能**:与 v1/v2 相同,但**修复了终端命令的 JSON 格式**。
**关键修复**
- v1/v2 使用 `{"type":"cmd","cmd":"datacenter out"}`(错误)
- v3 使用 `{"type":"cmd","data":"datacenter out"}`(正确)
- 终端命令消息体中命令内容放在 `"data"` 字段,而非 `"cmd"` 字段
**使用方法**
```bash
python3 mimo/webserver测试工程师/test_ws_dc_out_v3.py
```
> **推荐使用 v3**,因为命令格式与前端实际发送的格式一致。
---
### 8. test_regression_final.py — 全面回归测试
**功能**:数据中心→信号管理页的全面回归测试,覆盖多信号添加、立即推送验证、删除清理全流程。
**流程**
1. WebSocket 握手连接
2. 注册 datacenter out/in/yk/ao/param 所有信号类型
3. 从 dc_data 中批量选取多个 out 信号
4. 逐个添加信号并验证立即推送的完整性
5. 统计成功/失败比例
6. 批量删除测试信号并清理
**使用方法**
```bash
python3 mimo/webserver测试工程师/test_regression_final.py
```
**适用场景**:代码修改后的完整性回归验证,确保信号 CRUD 全流程无退化。
---
## 🔄 消息协议要点
| 要点 | 说明 |
|------|------|
| dc_data 帧类型 | **二进制帧**opcode=0x02非文本帧 |
| curd:add 行为 | 添加后**不会立即推送**,需等 ws_task 定时轮询检测 has_change |
| ws_task 周期 | 约 1 秒 |
| 终端命令格式 | `{"type":"cmd","data":"<命令>"}` |
| curd 消息格式 | `{"saddr":...,"signal_type":"out","curd":"add","setting_zone":"0","signal_data":""}` |
| 操作间隔 | 添加/删除建议间隔 2 秒,模拟真人操作 |