RTU/mimo/webserver测试工程师
ypc fd34c6815f feat: PLC调试页面 + WebSocket测试套件 + curd:add立即推送修复
新增:
- web_root/js/plc_debug.js: PLC 调试页面(LED/按键绑定out信号、增量刷新)
- requirements.toml: Codex 项目权限预批准配置
- mimo/webserver测试工程师/: WebSocket 前后端测试套件(8脚本+README)
  · test_ws_raw.py — 最简 WebSocket 连通性测试
  · test_debug_dc.py — datacenter 命令调试
  · test_verify_push.py — 推送验证
  · test_verify_immediate_push.py — 验证 curd:add 立即推送修复
  · test_ws_dc_out/v2/v3.py — 数据中心→信号页端到端测试
  · test_regression_final.py — 全面回归测试

修改:
- ws_method.cpp: curd:add 后立即推送信号列表(+30行)
- packed_fs.c: 打包新版 web 资源(PLC调试页+样式更新)
- pages.js: 重构信号管理页渲染逻辑、新增PLC调试页路由
- app.js: 注册PLC调试页路由
- style.css: 新增PLC调试页样式(+106行)
- index.html: 加载 plc_debug.js
- plc.cpp: 微调修复
2026-07-02 15:13:06 +08:00
..
README.md feat: PLC调试页面 + WebSocket测试套件 + curd:add立即推送修复 2026-07-02 15:13:06 +08:00
test_debug_dc.py feat: PLC调试页面 + WebSocket测试套件 + curd:add立即推送修复 2026-07-02 15:13:06 +08:00
test_regression_final.py feat: PLC调试页面 + WebSocket测试套件 + curd:add立即推送修复 2026-07-02 15:13:06 +08:00
test_verify_immediate_push.py feat: PLC调试页面 + WebSocket测试套件 + curd:add立即推送修复 2026-07-02 15:13:06 +08:00
test_verify_push.py feat: PLC调试页面 + WebSocket测试套件 + curd:add立即推送修复 2026-07-02 15:13:06 +08:00
test_ws_dc_out.py feat: PLC调试页面 + WebSocket测试套件 + curd:add立即推送修复 2026-07-02 15:13:06 +08:00
test_ws_dc_out_v2.py feat: PLC调试页面 + WebSocket测试套件 + curd:add立即推送修复 2026-07-02 15:13:06 +08:00
test_ws_dc_out_v3.py feat: PLC调试页面 + WebSocket测试套件 + curd:add立即推送修复 2026-07-02 15:13:06 +08:00
test_ws_raw.py feat: PLC调试页面 + WebSocket测试套件 + curd:add立即推送修复 2026-07-02 15:13:06 +08:00

README.md

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.100RK3568可在脚本中修改 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. 打印响应内容

使用方法

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

使用方法

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. 清理:删除测试信号,关闭连接

使用方法

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. 清理测试数据

使用方法

python3 mimo/webserver测试工程师/test_verify_immediate_push.py

适用场景:验证 ws_method.cppcurd: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 长度扩展和掩码处理

使用方法

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 — 全面回归测试

功能:数据中心→信号管理页的全面回归测试,覆盖多信号添加、立即推送验证、删除清理全流程。

流程

  1. WebSocket 握手连接
  2. 注册 datacenter out/in/yk/ao/param 所有信号类型
  3. 从 dc_data 中批量选取多个 out 信号
  4. 逐个添加信号并验证立即推送的完整性
  5. 统计成功/失败比例
  6. 批量删除测试信号并清理

使用方法

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 秒,模拟真人操作