# 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=true,DRO 到 HOME pose | | JOG X+/X-/Y+/Y- | DRO 连续变化 | | MDI M428 | RTCP on,tcp-xyzac | | MDI M429 | RTCP off,identity | | 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 检查通过。