Files
cnc_wams/web-rtcp-5axis-sim-plan/working1/05-acceptance-test-plan.md
2026-07-02 08:01:34 -04:00

196 lines
4.7 KiB
Markdown
Raw 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.
# 05 修复验收测试计划
生成时间2026-06-22
## 1. 验收目标
修复完成后,必须证明以下目标同时成立:
1. RTCP frame 自动进入 LinuxCNC kinematics WASM 边界。
2. 3D 预览首屏和程序运行后均可见。
3. HOME 后 JOG 坐标连续。
4. 原已通过功能不回归。
## 2. 本地静态和 Node 测试
### 2.1 构建
```bash
npm --prefix web-rtcp-5axis-sim-plan/app run build
```
预期:
```text
exit code 0
无 TypeScript/ES module 打包错误
```
### 2.2 状态和 runtime smoke
按项目已有测试能力执行:
```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_rtcp_store.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_five_axis_session.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_kinematics_runtime.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_full_execution_boundary.mjs
```
如某个测试依赖本地构建产物缺失,应先按项目原有构建流程补齐,不要跳过。
## 3. 浏览器自动化验收
### 3.1 D1 验收:首屏 kinematics 自动 ready
打开本地或部署页面后等待最多 8 秒,断言:
```js
const state = window.webRtcp5AxisSimulation.getState();
state.kinematicsRuntimeReadiness.loaded === true
state.sourceMode === "source-derived-kinematics-wasm"
state.frameSourceMode === "source-derived-kinematics-wasm"
state.rtcpFrame.semanticBoundary === "linuxcnc_kinematics_wasm_c_abi"
```
DOM 断言:
```js
document.querySelector('[data-rtcp-diagnostic="boundary"]').textContent.includes("linuxcnc_kinematics_wasm_c_abi")
document.querySelector('[data-rtcp-diagnostic="kinematics-ready"]').textContent.includes("ready")
```
禁止状态:
```text
fixture_frame_ui_plumbing_not_linuxcnc_kinematics_proof
```
不得作为稳定态出现。
### 3.2 D2 验收:预览非空
断言 canvas dataset
```js
canvas.dataset.threeReady === "true"
Number(canvas.dataset.threeSceneObjects) > 0
canvas.dataset.threeRenderer === "webgl" || canvas.dataset.threeRenderer === "2d-fallback"
```
像素断言:
```js
const stats = readCanvasPixelStats(canvas)
stats.nonBlackRatio > 0.02
stats.averageLuminance > 5
```
截图人工检查:
```text
能看到工作台/坐标轴/刀具或 TCP 点/路径
```
至少覆盖:
```text
首屏
加载 LinuxCNC vendored 程序后
Run 后
Open 本地 G-code 后
Audit 后
```
### 3.3 D3 验收HOME/JOG 坐标连续
自动化步骤:
```js
click POWER
click MANUAL
click HOME
const home = state.axisPose
click X+
assert state.axisPose.x === home.x + state.machine.jogIncrement
assert state.axisPose.y === home.y
assert state.axisPose.z === home.z
click Y-
assert state.axisPose.y === home.y - state.machine.jogIncrement
assert state.axisPose.x === home.x + state.machine.jogIncrement
```
允许浮点误差:
```text
abs(actual - expected) <= 0.001
```
人工检查:
```text
DRO 中 X/Y/Z 数字连续变化,没有跳到 0/1 局部原点。
```
## 4. 全功能回归清单
修复完成后,至少回归以下功能:
| 功能 | 预期 |
| --- | --- |
| 主界面九大区域 | 全部存在 |
| POWER on/off | taskState 正确 |
| E-STOP/RESET | 急停和复位正确 |
| AUTO/MANUAL/JOG/MDI | 模式切换正确 |
| HOME | allHomed=trueDRO 到 HOME pose |
| JOG X+/X-/Y+/Y- | DRO 连续变化 |
| MDI M428 | RTCP ontcp-xyzac |
| MDI M429 | RTCP offidentity |
| MDI M430 | userk |
| TCP/IDENTITY 侧栏按钮 | RTCP 状态正确 |
| Rapid/Feed/Spindle override | 数值可调 |
| Flood/Mist | 状态可切换 |
| View X/Y/Z/Fit/Clear/Full | preview state 正确,画面仍可见 |
| Profile xyzac/xyzbc 切换 | INI 与 runtime 重新 ready |
| Stage LinuxCNC sources | staged files/gcode 数量正常 |
| Load vendored G-code | programSource 正确G-code 行显示 |
| Run/Pause/Resume/Step/Stop/Reload | runState 和 activeLine 正确 |
| Open local G-code | programSource=operator-file |
| Save/Restore Session | OPFS 保存恢复正确 |
| Audit Full Boundary | 审计入口可执行,结果可诊断 |
## 5. QA 报告复跑
修复后建议复用或更新:
```text
/home/mes123456/cnc_wams/qa/web-rtcp-5axis-site-test/run-site-test.mjs
```
重点更新:
1. 首屏等待稳定后,不再把 D1 作为 WARN而是强制 PASS/FAIL。
2. canvas 检查加入像素统计。
3. HOME/JOG 检查使用稳定态并验证连续坐标。
4. 重新生成 Word 报告,文件名建议:
```text
web-rtcp-5axis-site-test-report-2026-06-22-after-working1-fix.docx
```
## 6. 验收通过定义
```text
P0: D1 PASS
P0: D2 PASS
P1: D3 PASS
全功能回归无新增 FAIL
console error = 0
page error = 0
request failure = 0
```
如果 headless WebGL 不稳定,必须证明 2D fallback 可见且自动化 pixel 检查通过。