# Codex 用户测试操作指南:Lead + 专家团覆盖导览/讲解业务闭环 > 日期:2026-06-30 > 项目:深圳自然博物馆 `frontend-miniapp` > 适用对象:Codex / GPT-5.4 类 coding agent > 默认目标:H5 用户测试与业务逻辑闭环验证 > 推荐模式:Lead Agent + 专家团协作 --- ## 1. 目标与边界 本指南用于让 Codex 以专业 agents 团队方式,为本项目执行用户测试设计、测试示例编写、H5 smoke 验证和风险汇总。 测试目标不是“证明系统已经具备真实室内导航”,而是验证当前产品能力是否闭环: ```text 导览 guide:室内 3D 展示 + 楼层切换 + POI/位置预览 讲解 explain:内容/讲解入口 + 音频状态 + 查看位置联动 ``` ### 1.1 必须遵守的产品真相 Codex 执行测试时必须遵守以下边界: 1. 默认只测 H5,不测 `mp-weixin`,除非用户明确要求。 2. 当前导览能力是“室内 3D 展示 + POI/位置预览”。 3. `route_graph` / `nav_data` 未验证前,不能把功能描述为“开始馆内导航”“路线导航”“到达引导”或 turn-by-turn。 4. 路线相关测试应验证 unavailable / disabled / readiness gate,而不是强行证明路线可用。 5. 讲解能力必须依赖真实内容/媒体数据;不能把 `example.com/audio.mp3` 或 placeholder 当作可用音频。 6. 页面、组件和测试应消费 domain / repository / use case 数据,不应绕过数据层直接解析静态包或后端字段。 7. 不引入 legacy nav assets service。 8. 不做无关重构、不删除旧 demo 数据、不清理历史文件,除非用户另行授权。 ### 1.2 推荐测试层级 Codex 应按轻到重执行: ```text 源码审查 -> 纯业务/adapter 单元测试示例 -> repository/usecase 闭环测试示例 -> H5 smoke 用户流测试 -> 风险报告与修复建议 ``` 如果项目暂未引入测试框架,Codex 应先给方案或最小 Vitest 示例,不应直接引入重型 E2E 框架。 --- ## 2. Lead + 专家团角色分工 ### 2.1 Lead Agent:测试总负责人 职责: - 读取任务目标和项目边界。 - 分配专家 Agent 的测试范围。 - 汇总每个专家的发现。 - 去重、排序、判定阻塞级别。 - 形成最终测试矩阵、执行结果和修复建议。 Lead Agent 不应直接跳过专家结论,也不应把假设当事实。 ### 2.2 Guide Agent:导览闭环专家 关注范围: - 首页导览入口。 - 馆外/馆内切换。 - 室内 3D 初始状态。 - 全馆/多层/单层切换。 - 楼层切换。 - POI 展示、点击、选中、聚焦。 - 位置预览卡片。 - route readiness 和不可导航状态。 重点文件: ```text src/pages/index/index.vue src/components/navigation/GuideMapShell.vue src/components/map/ThreeMap.vue src/domain/guideFloor.ts src/domain/guideReadiness.ts src/domain/guideModel.ts src/usecases/guideUseCase.ts ``` ### 2.3 Explain Agent:讲解闭环专家 关注范围: - 讲解 tab 入口。 - 讲解列表加载。 - 展厅/展品/讲解项详情。 - 音频播放、暂停、关闭、错误态。 - 缺失音频 unavailable 状态。 - 讲解项“查看位置”跳回 guide location preview。 - guide/explain tab 状态保持。 重点文件: ```text src/components/explain src/components/audio src/pages/index/index.vue src/pages/exhibit src/pages/hall src/repositories src/usecases ``` ### 2.4 Data Agent:数据契约与 readiness 专家 关注范围: - Provider / Adapter / Repository / UseCase 数据边界。 - static/api/sdk 模式切换。 - SGS 坐标归一化。 - 楼层 ID、label、order、floorCode 一致性。 - POI floorId 绑定。 - 展厅/space/poi/guide stop 关系。 - route graph / nav data readiness gate。 重点文件: ```text src/config/dataSource.ts src/data/providers src/data/adapters src/repositories/GuideRepository.ts src/repositories/GuideModelRepository.ts src/domain/museum.ts src/domain/guideModel.ts ``` ### 2.5 UX Agent:移动端用户流与遮挡专家 关注范围: - 手机 viewport 下顶部/底部/楼层控件是否可点击。 - 3D canvas 是否遮挡 search、floor switcher、POI card、tab、audio player。 - 返回、关闭、取消、重试是否形成闭环。 - 搜索、定位、讲解、查看位置之间是否有死路。 - 加载/错误/空状态是否可理解。 ### 2.6 QA Agent:测试矩阵与执行记录专家 职责: - 把 Guide / Explain / Data / UX 结论转换成测试矩阵。 - 明确每条测试:前置条件、操作步骤、期望结果、证据类型。 - 区分源码审核、单元测试、H5 smoke、人工复核。 - 记录命令输出。 ### 2.7 Risk Agent:风险与反误导专家 职责: - 检查是否误称真实导航。 - 检查是否使用 placeholder 音频。 - 检查是否混用 legacy demo 数据。 - 检查是否绕过数据层。 - 检查是否把 SDK/API/static 数据混在一起。 - 检查是否做了无关重构或破坏 H5 边界。 --- ## 3. 导览 guide 用户测试闭环 ### 3.1 导览入口闭环 测试目标:用户从首页进入馆内导览后,能理解当前状态。 检查点: 1. 首页是否展示 `馆内` 入口。 2. 点击后是否进入 guide 业务而不是 explain。 3. 初始状态是否清楚表达是馆外、全馆、单层还是多层。 4. 如果进入室内 3D,是否有加载状态。 5. 模型加载失败是否有错误和重试。 预期结果: ```text 用户能进入馆内 3D/位置预览体验,且不会看到“已开始导航”等误导文案。 ``` ### 3.2 楼层切换闭环 测试目标:楼层切换后模型、POI 和 UI 楼层状态一致。 检查点: 1. 楼层列表只展示室内可导览楼层。 2. 楼层顺序符合 B2/B1/1F/2F/3F 等语义。 3. 点击某一楼层后,UI 显示 loading 或状态变化。 4. 模型切换到目标楼层。 5. POI 只展示目标楼层点位。 6. 切换失败时保留旧状态或给出明确错误。 7. 父组件 active floor 与 ThreeMap rendered floor 不应长期不一致。 建议测试示例: ```text Given 当前在 1F When 点击 2F Then 楼层按钮高亮 2F And ThreeMap 渲染 2F 模型 And POI 列表只包含 floorId=2F/L2 对应点位 And 不出现 B1/1F POI ``` ### 3.3 POI 展示与位置预览闭环 测试目标:用户点击 POI 后能看懂“这是什么、在哪层、如何查看位置”。 检查点: 1. POI 有稳定 id、name、category、floorId。 2. POI 坐标可用于渲染。 3. SGS 模式下 `position.y` 不应误作单层 marker 高度。 4. 点击 POI 后弹出卡片。 5. 卡片展示名称、楼层、类型或展厅信息。 6. 展厅类 POI 可进入“查看展厅”或“相关讲解”。 7. 位置预览不应宣称真实导航。 建议测试示例: ```text Given 当前楼层有展厅 POI When 点击该 POI Then POI card 展示展厅名和所在楼层 And 相机聚焦到该 POI And 文案使用“查看位置/查看展厅/相关讲解” And 不出现“开始导航/到达引导” ``` ### 3.4 route readiness 闭环 测试目标:没有 route graph/nav data 时,路线能力被正确阻断。 检查点: 1. `NAV_ROUTE_GRAPH_READY` 为 false 时,不应展示已可用导航。 2. route panel 或按钮应显示未开放、位置预览、不可用等状态。 3. 测试中不能断言路线规划成功。 4. 如 SDK/API 返回路线失败,应有错误处理。 --- ## 4. 讲解 explain 用户测试闭环 ### 4.1 讲解入口闭环 测试目标:用户能从首页进入讲解业务,且不会污染导览状态。 检查点: 1. 顶部或首页入口使用 `讲解`。 2. 点击后加载讲解列表。 3. 返回 `馆内` 时,导览基本状态不异常丢失。 4. 讲解列表空状态或加载失败有提示。 ### 4.2 讲解内容与音频状态闭环 测试目标:讲解项的内容、音频和 unavailable 状态可信。 检查点: 1. 讲解项有稳定 id、标题、所属展厅/展品。 2. 音频 URL 来自真实媒体数据。 3. 缺失音频时显示 unavailable,不自动使用 placeholder。 4. 播放、暂停、关闭不泄漏状态。 5. 页面返回后 player 状态符合产品预期。 ### 4.3 讲解查看位置闭环 测试目标:用户从讲解项能回到对应导览位置预览。 检查点: 1. 讲解项具备 `poiId`、`floorId`、`hallId` 或 `exhibitId` 中至少一种可解析关系。 2. 点击“查看位置”后切回 guide。 3. guide 切到目标楼层。 4. 目标 POI 被聚焦或显示 preview card。 5. 如缺少位置关系,应提示无法定位,不应假装成功。 建议测试示例: ```text Given 一个讲解项绑定 poiId 和 floorId When 点击“查看位置” Then 当前 tab 切换到馆内 And active floor 等于讲解项 floorId And target focus 指向对应 poiId And 显示位置预览卡片 ``` --- ## 5. 数据与状态核对规则 ### 5.1 楼层数据 必须核对: - `floorId` 是否稳定。 - `label` 是否仅用于显示。 - `order/ordinal` 是否用于排序。 - 外立面、馆外、建筑外观是否被过滤。 - API / static / SDK 模式下楼层语义是否一致。 ### 5.2 POI 数据 必须核对: - POI 必须有 `id`、`name`、`floorId`、`category`。 - 渲染 POI 必须有可用 display coordinate。 - 缺坐标 POI 不应进入 3D marker 渲染。 - 展厅 space center 不应直接等同 route destination。 - route destination 应未来使用 entrance / route node。 ### 5.3 SGS 坐标归一化 SGS 坐标进入 ThreeMap 前必须明确: ```text source.x -> render x source.z -> render z source.y -> 原始高度/绝对高程,不直接作为单层 marker y ``` 测试断言建议: ```text Given SGS position = { x: 10, y: 99, z: 20 } When 转换成 ThreeMap render POI Then render position 应使用水平坐标 10/20 And marker 高度不应等于 99 ``` ### 5.4 route readiness 必须核对: - route graph/nav data 未 ready 时,route planning 不应被视为通过。 - 所有测试报告中应使用“位置预览”或“路线未开放”。 - 不把 SDK mode 当作真实导航 ready 的证据。 --- ## 6. H5 smoke 用户测试建议 当 Codex 需要执行浏览器级 H5 smoke 时,按以下顺序: 1. 启动 H5 dev server: ```powershell pnpm dev:h5 ``` 2. 在移动 viewport 打开本地 URL。 3. 执行以下用户流: ### 6.1 导览 smoke - 打开首页。 - 点击 `馆内`。 - 等待 3D 加载。 - 切换全馆/单层/多层。 - 点击 1F、2F、B1 等楼层。 - 点击一个 POI。 - 检查卡片是否出现。 - 检查楼层控件、搜索、卡片、底部导航是否仍可点击。 ### 6.2 讲解 smoke - 点击 `讲解`。 - 查看讲解列表。 - 点击讲解项。 - 尝试播放音频。 - 如无音频,检查 unavailable 状态。 - 点击“查看位置”。 - 检查是否回到馆内并显示目标位置预览。 ### 6.3 异常 smoke - 模拟模型加载失败。 - 模拟 POI 空列表。 - 模拟音频缺失。 - 模拟 route unavailable。 - 检查是否有重试、返回、关闭或明确提示。 --- ## 7. 验收标准 ### 7.1 通过标准 一次 Codex 测试任务可判定为通过,必须满足: 1. 明确列出测试范围。 2. 明确说明 guide 只是位置预览,不是认证导航。 3. 至少覆盖 guide 楼层切换和 POI 点击闭环。 4. 至少覆盖 explain 查看位置或音频 unavailable 闭环。 5. 输出测试矩阵。 6. 输出命令结果或说明为何未执行。 7. 标记 source-only、unit、H5 smoke、manual 的证据类型。 8. 不做无关重构。 ### 7.2 阻塞问题 以下问题应标为 P1: - 切换楼层后模型和 POI 楼层不一致。 - 点击 POI 后卡片展示错误楼层或错误对象。 - route 未 ready 但 UI 宣称可导航。 - 讲解项缺真实音频却显示可播放。 - 点击“查看位置”后进入死路或白屏。 - 3D canvas 遮挡关键控件。 ### 7.3 P2 问题 - 楼层 label 不清晰。 - POI 分类图标不一致。 - 搜索结果没有按楼层表达。 - 讲解返回后状态丢失。 - 错误提示不够明确。 ### 7.4 P3 问题 - 视觉 polish。 - 动效不顺。 - 非核心文案优化。 - 后续 E2E 覆盖建议。 --- ## 8. 可直接复制给 Codex 的 XML Prompt > 使用方式:将以下 prompt 复制给 Codex。若希望 Codex 只出方案不改代码,将 `` 改为 `read_only`。若希望 Codex 落地最小测试示例,将 `` 改为 `minimal_test_examples`。 ```xml You are operating in the Shenzhen Natural Museum frontend-miniapp repository: E:\MyWork\深圳国际艺术馆\museum-guide\museum-guide-v4.0\frontend-miniapp Create a professional user-testing operation plan and, if allowed by write_policy, minimal test examples for closing the guide/explain business logic loops. Use a Lead Agent + specialist agents mental model. Do not spawn real external agents unless the runtime supports it; simulate the team by producing separate role findings. read_only - Target platform is H5 only. Do not test mp-weixin unless explicitly requested. - The guide business currently supports indoor 3D display plus POI/location preview. - Do not claim certified indoor navigation, turn-by-turn guidance, arrival guidance, or route planning unless route_graph/nav_data and runtime behavior are verified. - Route-related UI should be tested as route readiness / unavailable / location preview. - The explain business is content/audio explanation only when real media exists. - Missing audio/transcript must show unavailable state. Do not treat example.com or placeholder media as working capability. - Keep data and presentation decoupled: Provider -> Adapter -> Repository -> UseCase -> ViewModel/Component. - Do not reintroduce retired legacy nav assets service. - Do not delete historical demo data or perform broad cleanup. Own scope, sequencing, final synthesis, risk ranking, and the final test matrix. Inspect guide entry, indoor/outdoor switch, full-building/multi-floor/single-floor switching, floor state, POI display, POI click, target focus, location preview card, and route readiness gates. Primary files: - src/pages/index/index.vue - src/components/navigation/GuideMapShell.vue - src/components/map/ThreeMap.vue - src/domain/guideFloor.ts - src/domain/guideReadiness.ts - src/domain/guideModel.ts - src/usecases/guideUseCase.ts Inspect explain tab/list/detail, audio play/unavailable state, guide-location linkage, top-tab preservation, and missing media behavior. Primary files: - src/components/explain - src/components/audio - src/pages/index/index.vue - src/pages/exhibit - src/pages/hall - src/repositories - src/usecases Inspect provider/adapter/repository/usecase contracts, data-source mode handling, SGS coordinate normalization, floorId/label/order consistency, POI floor binding, and route readiness. Primary files: - src/config/dataSource.ts - src/data/providers - src/data/adapters - src/repositories/GuideRepository.ts - src/repositories/GuideModelRepository.ts - src/domain/museum.ts - src/domain/guideModel.ts Inspect mobile H5 user flows, canvas/overlay hit areas, loading/error/empty states, return/close/cancel/retry paths, and dead-end risks. Convert findings into a test matrix with preconditions, steps, expected result, evidence type, and priority. Check for false navigation claims, placeholder audio, legacy demo pollution, direct raw-data coupling, static/api/sdk mixing, and unrelated refactors. - Home -> guide/馆内 entry. - Indoor 3D loading state. - Overview/multi-floor/single-floor switching. - Floor switch: requested floor, rendered model, active UI floor, loaded POIs. - POI click -> focus -> preview card. - Route graph not ready -> location preview/unavailable, not real navigation. - Home -> explain/讲解 entry. - Explain list load/empty/error. - Explain item detail. - Audio play/pause/close or unavailable if missing real media. - Explain item 查看位置 -> guide tab -> target floor -> target POI/location preview. - Back/top-tab state preservation. - Floor filtering and sorting. - POI floor binding. - SGS position normalization: source x/z become horizontal render coordinates; source y must not be misused as single-floor marker height. - Missing position POIs do not enter render marker set. - Route readiness stays false unless graph/nav data are loaded and verified. 1. Inspect package.json and identify available scripts. 2. Inspect the primary files listed by each specialist agent. 3. Build a source-based test matrix first. 4. If write_policy is minimal_test_examples, add the smallest test framework or test scripts needed, preferably Vitest, without breaking H5 build. 5. Prefer domain/adapter/repository/usecase tests before component or E2E tests. 6. If H5 smoke is requested and feasible, run pnpm dev:h5 and browser-test mobile viewport flows. 7. Run the smallest meaningful verification commands available, such as pnpm type-check and pnpm lint. Do not run build:h5 unless explicitly approved because it writes dist. - Keep changes narrow. - Do not perform broad refactors. - Do not delete files. - Do not modify unrelated UI styling. - Do not install dependencies unless the plan explains why and the user allowed write-capable execution. - If a test requires browser automation that is unavailable, mark it manual/H5-smoke-pending rather than inventing results. - Every finding must cite file path and line number when source-based. - Every browser finding must include the tested URL, viewport, steps, and observed result. - Distinguish confirmed behavior from hypothesis. - If data is missing, say data insufficient instead of guessing. Return in this order: 1. Codex setup assumptions and scripts discovered. 2. Agent-by-agent findings. 3. Business-loop test matrix. 4. Recommended minimal automated tests. 5. H5 smoke/manual test script. 6. P1/P2/P3 risks. 7. Commands run and exact results. 8. Files changed, or state "no files changed". 9. Follow-up recommendations. The task is complete only when: - Guide loop and explain loop are both covered. - Route readiness is not misrepresented as real navigation. - Audio placeholder risk is checked. - Floor/POI/SGS coordinate risks are checked. - Output includes an actionable test matrix. ``` --- ## 9. 推荐 Codex 分阶段执行命令 ### 9.1 只做方案,不改代码 ```text Use the XML prompt in docs/QA/codex-user-testing-agents-guide-2026-06-30.md with write_policy=read_only. Produce a professional Lead+specialist-agents user-testing operation plan for the guide/explain H5 business loops. Do not modify files. ``` ### 9.2 落地最小测试示例 ```text Use the XML prompt in docs/QA/codex-user-testing-agents-guide-2026-06-30.md with write_policy=minimal_test_examples. Add the smallest unit-test examples needed to cover guideFloor, route readiness, SGS coordinate normalization, POI floor binding, and explain 查看位置/unavailable audio behavior. Keep changes narrow and run pnpm type-check and pnpm lint. ``` ### 9.3 做 H5 smoke 测试 ```text Use the XML prompt in docs/QA/codex-user-testing-agents-guide-2026-06-30.md with write_policy=read_only. Start or use the H5 dev server if available, test mobile viewport guide/explain loops, and return a browser-observed test report. Do not change code. ```