Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

28 KiB

训练编排真实测试报告 · 2026-09-05

状态:通过。证据组:3/3 通过;明确检查:通过 9,失败 0,待验证 0;已校验截图 19 张。

1 · 资料

  • 参考《文档/维修训练内容设计.pdf》(6 页)与已有场景制作成果。按“场景 → 任务步骤 → 学习 / 训练 / 评估”的资料结构检查实现。
  • 本次使用已发布的狐狸场景和牛奶卡车场景验证训练编排,确认真实模型可见、步骤目标来自绑定场景、保存及发布使用服务端版本。

2 · 产品原型

  • 沿用现有三维训练编排工作台:选择场景、选择三维对象、配置任务步骤、保存草稿和发布。
  • 新建时的液压模板仅作为现有界面起点;绑定新场景后不得继续选择该场景中不存在的液压设备。

3 · 设计

  • 两条独立训练分别绑定狐狸与卡车的明确发布版本;每条配置两步、每步 50 分,总计 100 分,并核验重新打开后的状态。
  • 保存时以三维视口截图生成训练封面;模型可见性要通过实际截图及模型显示 / 隐藏的像素差异判断。
  • 将正常流程、独立浏览器只读重开、资源失败、封面失败、版本冲突及并发切换分别留证。独立重开阻断所有业务写请求,核验模型像素可见性、封面哈希与发布依赖;不将其表述为只读角色权限测试。

4 · 开发

  • 场景目录对接已发布内容版本;GLB 通过受控下载读取;训练依赖固定到所选场景版本,恢复项目时保留来源元数据。
  • 修复蒙皮模型缩放后的骨骼矩阵与包围盒刷新;场景恢复、部位覆盖和高亮使用一致的尺寸计算。
  • 绑定场景后移除不存在的内置操作目标,过滤隐藏或已删除对象及其子目标。
  • 保存和发布等待异步操作完成;封面与内容在同一次版本保存中持久化;失败、冲突及并发切换必须保留可恢复状态。最终实现效果以下方真实测试记录为准。
  • 修复旧工程快照回写覆盖最新名称与训练形态;场景绑定进行中禁止保存和发布,避免模型尚未加载成功就写入新的场景依赖。

保留训练数据

训练 ID 名称 状态 当前版本 发布版本 场景 ID 固定场景版本 步骤数 总分
161 实测训练-狐狸野外巡检-已验证-20260905 PUBLISHED 213 213 160 210 2 100
162 实测训练-牛奶卡车进场检查-已验证-20260905 PUBLISHED 214 214 159 209 2 100

保留两条真实训练供后续查看;本报告生成器不创建、修改或删除业务数据。

5 · 测试

过程检查记录执行当时的版本;最终数据以上方保留项目及同版本独立重开记录为准。

真实UI训练编排与发布实测 · 通过

  • 使用真实已发布场景创建、编排并保留两条训练,列表显示截图封面:通过
  • 狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布:通过
  • 狐狸三维点击选目标、调整视角并截图发布、异常恢复:通过
  • 卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布:通过
final-evidence.json · 脱敏完整记录
{
  "title": "真实UI训练编排与发布实测",
  "status": "PASS",
  "finishedAt": "2026-09-05T15:23:29.909Z",
  "projects": [
    {
      "id": "161",
      "name": "实测训练-狐狸野外巡检-已验证-20260905",
      "status": "PUBLISHED",
      "currentVersionId": "213",
      "publishedVersionId": "213",
      "sceneProjectId": "160",
      "sceneVersionId": "210",
      "stepCount": 2,
      "totalScore": 100,
      "cover": {
        "assetId": "2098",
        "sha256": "7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267",
        "sizeBytes": 52518,
        "image": "screenshots/fox-final-cover.jpg"
      }
    },
    {
      "id": "162",
      "name": "实测训练-牛奶卡车进场检查-已验证-20260905",
      "status": "PUBLISHED",
      "currentVersionId": "214",
      "publishedVersionId": "214",
      "sceneProjectId": "159",
      "sceneVersionId": "209",
      "stepCount": 2,
      "totalScore": 100,
      "cover": {
        "assetId": "2100",
        "sha256": "efb7060464f840bde78744d89567c609dc7b7922216d1c948fe22c1eed3d41a4",
        "sizeBytes": 42163,
        "image": "screenshots/truck-final-cover.jpg"
      }
    }
  ],
  "checks": [
    {
      "title": "使用真实已发布场景创建、编排并保留两条训练,列表显示截图封面",
      "status": "PASS",
      "screenshots": [
        "screenshots/02-published-scenes.png",
        "screenshots/20-training-list-final.png"
      ],
      "details": {
        "projects": [
          {
            "id": "161",
            "status": "PUBLISHED",
            "sceneProjectId": "160",
            "sceneVersionId": "210",
            "stepCount": 2,
            "totalScore": 100
          },
          {
            "id": "162",
            "status": "PUBLISHED",
            "sceneProjectId": "159",
            "sceneVersionId": "209",
            "stepCount": 2,
            "totalScore": 100
          }
        ]
      }
    },
    {
      "status": "PASS",
      "title": "狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布",
      "id": "161",
      "name": "实测训练-狐狸野外巡检-已验证-20260905",
      "publishedVersionId": "211",
      "coverId": "2095",
      "steps": [
        {
          "title": "识别狐狸巡检目标",
          "target": "scene:OBJ-1788605916565-6",
          "stepCode": "VIRTUAL-S01",
          "actionCode": "VIRTUAL-A01",
          "score": 50
        },
        {
          "title": "检查狐狸外观并确认状态",
          "target": "scene:OBJ-1788605916565-6",
          "stepCode": "VIRTUAL-S02",
          "actionCode": "VIRTUAL-A02",
          "score": 50
        }
      ],
      "errors": [],
      "failed": [],
      "screenshots": [
        "screenshots/09-fox-advanced-timeline.png",
        "screenshots/10-fox-preflight.png"
      ]
    },
    {
      "status": "PASS",
      "title": "狐狸三维点击选目标、调整视角并截图发布、异常恢复",
      "id": "161",
      "publishedVersionId": "213",
      "pick": {
        "x": 1065.015625,
        "y": 750.5,
        "targetId": "scene:OBJ-1788605916565-6/part/interaction-a3d35c26"
      },
      "cameraBefore": [
        -0.04179225073787585,
        6.099634646023559,
        17.355036987378313
      ],
      "cameraAfter": [
        -0.9408733025235376,
        5.534741198620379,
        15.26632686671827
      ],
      "cover": {
        "id": "2098",
        "sizeBytes": 52518,
        "sha256": "7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267",
        "equalsCurrentViewport": true
      },
      "errors": [],
      "screenshots": [
        "screenshots/16-fox-mesh-picking.png",
        "screenshots/17-fox-final-published.png"
      ]
    },
    {
      "status": "PASS",
      "title": "卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布",
      "id": "162",
      "name": "实测训练-牛奶卡车进场检查-已验证-20260905",
      "publishedVersionId": "214",
      "coverId": "2100",
      "pick": {
        "x": 1065.015625,
        "y": 750.5,
        "targetId": "scene:OBJ-1788605199171-2/part/interaction-5f7e4bee"
      },
      "stepCount": 2,
      "totalScore": 100,
      "errors": [],
      "screenshots": [
        "screenshots/18-truck-mesh-picking.png",
        "screenshots/19-truck-final-published.png"
      ]
    }
  ],
  "commands": [
    {
      "command": "pnpm run build",
      "status": "PASS",
      "details": "vue-tsc、Vite构建、iframe产物一致性验证通过;有既有chunk体积和DRACO路径构建提示。"
    },
    {
      "command": "pnpm run test:training-legacy",
      "status": "PASS",
      "details": "训练原型迁移和野外场景共享定义两个合同均通过。"
    },
    {
      "command": "node --test tools/training-cover.test.mjs tools/training-scene-api.test.mjs tools/training-model-placement.test.mjs tools/training-scene-targets.test.mjs tools/training-project-metadata.test.mjs",
      "status": "PASS",
      "details": "48/48通过。首次合跑1个测试夹具缺renderSaveState回调,修复夹具后全量复跑通过。"
    },
    {
      "command": "node tools/training-scene-visibility.e2e.mjs",
      "status": "PASS",
      "details": "独立浏览器只读重开验证,最终版本变更后再次运行;细项以readonly-evidence.json为准。"
    }
  ],
  "limitations": [
    "本次未创建教学下发任务,也未验证学员端完成训练;现有“预览训练”入口仍提示先发布再从虚实训练下发任务。",
    "未配置讲解音频和必选安全前置条件,编辑器校验给出非阻断提醒;两条为轻量素材功能测试,不作为正式维修教学内容。",
    "狐狸源场景实际已更新至V3(版本210),使用目录当时的真实发布版;未修改两个源场景或源模型。",
    "训练封面截取保存时的当前视角;卡车封面通过现有“隐藏外壳”按钮隐藏围护结构,立柱仍遮挡部分车身。这是继承的源场景及视角,不是模型未加载;重新打开时仍按固定场景还原相机。",
    "本轮没有新增需确认的功能变更,截图封面按本次明确授权实现;未改变数据库结构,无DDL变更。"
  ],
  "pageErrors": []
}

独立浏览器重开、真实模型可见性及封面验证 · 通过

  • 狐狸野外巡检:发布重开、模型实际可见、截图封面:通过
  • 牛奶卡车进场检查:发布重开、模型实际可见、截图封面:通过
readonly-evidence.json · 脱敏完整记录
{
  "title": "独立浏览器重开、真实模型可见性及封面验证",
  "status": "PASS",
  "startedAt": "2026-09-05T15:23:16.479Z",
  "checks": [
    {
      "title": "狐狸野外巡检:发布重开、模型实际可见、截图封面",
      "status": "PASS",
      "screenshots": [
        "screenshots/fox-independent-reopen.png",
        "screenshots/fox-final-cover.jpg"
      ],
      "details": {
        "state": "ready",
        "meshes": 1,
        "visibleMeshes": 1,
        "skinnedMeshes": 1,
        "position": [
          -7.5,
          0.10930174852949677,
          0.3440109341705351
        ],
        "scale": [
          0.03616375932570189,
          0.03616375932570189,
          0.03616375932570189
        ],
        "finiteBounds": true,
        "size": [
          0.9658796100519353,
          2.811899945787403,
          6
        ],
        "camera": {
          "position": [
            -0.04179225073787585,
            6.099634646023559,
            17.355036987378313
          ],
          "target": [
            -7.512232860974557,
            1.4059499759307126,
            -2.2204460492503126e-16
          ]
        },
        "sample": {
          "width": 320,
          "height": 180,
          "changedPixels": 827
        },
        "scene": {
          "projectId": "160",
          "versionId": "210"
        },
        "targets": [
          {
            "id": "scene:OBJ-1788605873329-2",
            "name": "维修装备主体 02",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605916565-6",
            "name": "狐狸野外巡检目标",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605916565-6/part/interaction-a3d35c26",
            "name": "fox",
            "source": "scene"
          }
        ],
        "steps": [
          {
            "title": "识别狐狸巡检目标",
            "targetId": "scene:OBJ-1788605916565-6",
            "weight": 50
          },
          {
            "title": "检查狐狸外观并确认状态",
            "targetId": "scene:OBJ-1788605916565-6",
            "weight": 50
          }
        ],
        "cover": {
          "assetId": "2098",
          "bytes": 52518,
          "sha256": "7b7c41e441e525e151ad4bd46fe3b01c249282368331f04cebe6a0eac0141267",
          "width": 628,
          "height": 640
        },
        "pageErrors": [],
        "blockedWrites": []
      }
    },
    {
      "title": "牛奶卡车进场检查:发布重开、模型实际可见、截图封面",
      "status": "PASS",
      "screenshots": [
        "screenshots/truck-independent-reopen.png",
        "screenshots/truck-final-cover.jpg"
      ],
      "details": {
        "state": "ready",
        "meshes": 5,
        "visibleMeshes": 5,
        "skinnedMeshes": 0,
        "position": [
          4.2,
          0.20617168998977797,
          -0.4356763541543951
        ],
        "scale": [
          1.2323086149245381,
          1.2323086149245381,
          1.2323086149245381
        ],
        "finiteBounds": true,
        "size": [
          3.4406057210321332,
          3.390913184034896,
          6.000000000000001
        ],
        "camera": {
          "position": [
            10.565439077211714,
            5.0456876852867705,
            7.37050840519251
          ],
          "target": [
            4.2,
            1.695456592017448,
            0
          ]
        },
        "sample": {
          "width": 320,
          "height": 180,
          "changedPixels": 11669
        },
        "scene": {
          "projectId": "159",
          "versionId": "209"
        },
        "targets": [
          {
            "id": "scene:OBJ-1788605199171-2",
            "name": "牛奶卡车检验主装备",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605199171-2/part/interaction-1ba581e6",
            "name": "Yup2Zup",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605199171-2/part/interaction-004dec41",
            "name": "Cesium_Milk_Truck",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605199171-2/part/interaction-5f7e4bee",
            "name": "Cesium_Milk_Truck_1",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605199171-2/part/interaction-607e4d81",
            "name": "Cesium_Milk_Truck_2",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605199171-2/part/interaction-5d7e48c8",
            "name": "Cesium_Milk_Truck_3",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605199171-2/part/interaction-5e7e4a5b",
            "name": "Node",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605199171-2/part/interaction-ce2feac4",
            "name": "Wheels",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605199171-2/part/interaction-637e523a",
            "name": "Node001",
            "source": "scene"
          },
          {
            "id": "scene:OBJ-1788605199171-2/part/interaction-f417f82d",
            "name": "Wheels001",
            "source": "scene"
          }
        ],
        "steps": [
          {
            "title": "识别牛奶卡车检验目标",
            "targetId": "scene:OBJ-1788605199171-2",
            "weight": 50
          },
          {
            "title": "检查卡车外观并确认状态",
            "targetId": "scene:OBJ-1788605199171-2",
            "weight": 50
          }
        ],
        "cover": {
          "assetId": "2100",
          "bytes": 42163,
          "sha256": "efb7060464f840bde78744d89567c609dc7b7922216d1c948fe22c1eed3d41a4",
          "width": 628,
          "height": 640
        },
        "pageErrors": [],
        "blockedWrites": []
      }
    }
  ],
  "projects": [
    {
      "id": "161",
      "name": "实测训练-狐狸野外巡检-已验证-20260905",
      "status": "PUBLISHED",
      "currentVersionId": "213",
      "publishedVersionId": "213",
      "sceneProjectId": "160",
      "sceneVersionId": "210",
      "stepCount": 2,
      "totalScore": 100,
      "cover": {
        "assetId": "2098",
        "image": "screenshots/fox-final-cover.jpg"
      }
    },
    {
      "id": "162",
      "name": "实测训练-牛奶卡车进场检查-已验证-20260905",
      "status": "PUBLISHED",
      "currentVersionId": "214",
      "publishedVersionId": "214",
      "sceneProjectId": "159",
      "sceneVersionId": "209",
      "stepCount": 2,
      "totalScore": 100,
      "cover": {
        "assetId": "2100",
        "image": "screenshots/truck-final-cover.jpg"
      }
    }
  ],
  "finishedAt": "2026-09-05T15:24:01.659Z"
}

真实浏览器异常分支验证(定向注入HTTP失败) · 通过

  • 封面上传503:训练内容仍保存并保留原封面:通过
  • 保存409:不覆盖服务端内容和封面,并保持未保存提示:通过
  • 切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入:通过
error-evidence.json · 脱敏完整记录
{
  "title": "真实浏览器异常分支验证(定向注入HTTP失败)",
  "status": "PASS",
  "checks": [
    {
      "title": "封面上传503:训练内容仍保存并保留原封面",
      "status": "PASS",
      "details": {
        "beforeVersion": 6,
        "afterVersion": 7,
        "sameCover": true,
        "stepCount": 2
      },
      "screenshot": "screenshots/12-cover-failure-preserves-old.png"
    },
    {
      "title": "保存409:不覆盖服务端内容和封面,并保持未保存提示",
      "status": "PASS",
      "details": {
        "version": 7,
        "putAttempts": 1,
        "sameCover": true
      },
      "screenshot": "screenshots/13-save-conflict.png"
    },
    {
      "title": "切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入",
      "status": "PASS",
      "details": {
        "retainedSceneProjectId": "160",
        "blockedDownloads": 1,
        "putCount": 0
      },
      "screenshots": [
        "screenshots/14-binding-disables-save.png",
        "screenshots/15-binding-failure-retains-scene.png"
      ]
    }
  ]
}

执行命令与验证结果

  • pnpm run build:通过。vue-tsc、Vite构建、iframe产物一致性验证通过;有既有chunk体积和DRACO路径构建提示。
  • pnpm run test:training-legacy:通过。训练原型迁移和野外场景共享定义两个合同均通过。
  • node --test tools/training-cover.test.mjs tools/training-scene-api.test.mjs tools/training-model-placement.test.mjs tools/training-scene-targets.test.mjs tools/training-project-metadata.test.mjs:通过。48/48通过。首次合跑1个测试夹具缺renderSaveState回调,修复夹具后全量复跑通过。
  • node tools/training-scene-visibility.e2e.mjs:通过。独立浏览器只读重开验证,最终版本变更后再次运行;细项以readonly-evidence.json为准。

最终及异常验证截图

实测训练-狐狸野外巡检-已验证-20260905

实测训练-牛奶卡车进场检查-已验证-20260905

使用真实已发布场景创建、编排并保留两条训练,列表显示截图封面

狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布

狐狸两步编排、复制删除、排序撤销、高级时间轴、项目名称保存及发布

狐狸三维点击选目标、调整视角并截图发布、异常恢复

狐狸三维点击选目标、调整视角并截图发布、异常恢复

卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布

卡车三维拾取、项目名称及任务说明保存、隐藏外壳视角截图发布

狐狸野外巡检:发布重开、模型实际可见、截图封面

牛奶卡车进场检查:发布重开、模型实际可见、截图封面

封面上传503:训练内容仍保存并保留原封面

保存409:不覆盖服务端内容和封面,并保持未保存提示

切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入

切换场景下载失败:保持原场景、绑定期间禁止保存发布、零项目写入

过程截图 · 不计入最终通过结论

过程记录:初建训练仍显示默认液压模板,仅记录起点,不作为故障对照或最终通过证据。

过程记录:打开已发布场景目录。最终版本和固定依赖以最终证据为准。

过程记录:首次绑定卡车时仍有 8 个旧模板步骤;不代表最终两步编排通过。

过程记录:卡车训练阶段性保存;最终步骤、状态、版本和封面以最终证据为准。

范围、限制与功能确认结论

  • 本次范围为训练编排、草稿保存、发布与重新打开,不包含创建教学任务、下发学员或完成学员训练。
  • “预览训练”仍提示需发布后在教学实施中下发;本报告不将该提示视作学员训练已运行。
  • 本轮仅修复已实现功能的问题,无新增需要用户确认的功能改动。

实测限制与后续项

  • 本次未创建教学下发任务,也未验证学员端完成训练;现有“预览训练”入口仍提示先发布再从虚实训练下发任务。
  • 未配置讲解音频和必选安全前置条件,编辑器校验给出非阻断提醒;两条为轻量素材功能测试,不作为正式维修教学内容。
  • 狐狸源场景实际已更新至V3(版本210),使用目录当时的真实发布版;未修改两个源场景或源模型。
  • 训练封面截取保存时的当前视角;卡车封面通过现有“隐藏外壳”按钮隐藏围护结构,立柱仍遮挡部分车身。这是继承的源场景及视角,不是模型未加载;重新打开时仍按固定场景还原相机。
  • 本轮没有新增需确认的功能变更,截图封面按本次明确授权实现;未改变数据库结构,无DDL变更。

报告生成:2026/9/5 23:26:58(Asia/Shanghai)。