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