# KSP 管理后台测试报告 执行日期:2026-05-31 ## 1. 执行结论 本轮完成了项目重构梳理、现有测试计划评估,并生成新的 `docs/test_plan_v2.md`。 实际执行测试采用非破坏性 HTTP/API/模板级回归检查,目标是避免污染当前 `.env` 指向的真实 PostgreSQL 数据库。共执行 24 项,24 通过,0 失败。 浏览器自动化和现有 Python Playwright 脚本未能执行:本机 `.venv\Scripts\python.exe` 指向不存在的 Python 安装,`py -3` 不可用;Codex in-app Browser 的 Node 会话在本机 sandbox 中连续启动失败。因此,本报告不把 JS 点击、canvas 像素、CRUD 写入类场景算作已通过。 ## 2. 测试环境 - 运行服务:`http://127.0.0.1:9000` - 应用端口:`.env` 中 `APP_PORT=9000` - 数据库:`.env` 指向 PostgreSQL `PGHOST=192.168.195.241`、`PGDATABASE=KSP` - 测试方式:PowerShell `Invoke-WebRequest` / `Invoke-RestMethod` - 数据安全策略:不执行新增、编辑、删除、导入、对接保存等持久写入动作 ## 3. 已执行测试 | # | 检查项 | 结果 | 详情 | |---:|---|---|---| | 1 | API health returns ok | PASS | `{"service":"ksp-data-hangar","status":"ok"}` | | 2 | Dashboard reachable | PASS | HTTP 200 | | 3 | Base shell/sidebar present | PASS | sidebar、任务运营、数据中心、燃料换算存在 | | 4 | Global sim time control present | PASS | `sim-time-display`、`+1d`、Today 存在 | | 5 | Dashboard data panels present | PASS | Tracked Assets / Active Missions / Upcoming / Status Board 存在 | | 6 | Asset list reachable with rows | PASS | rows=15 | | 7 | Asset list filters/actions present | PASS | `q`、`asset_type`、`sort`、New Asset 存在 | | 8 | Asset search route returns filtered page | PASS | `/assets?q=ST-01` 返回匹配页面 | | 9 | Asset detail reachable from list link | PASS | `/assets/fba95050-ca89-4e67-b796-66b7e1c40764?...` | | 10 | Asset detail dock/log modals present | PASS | `dock-modal`、`log-modal`、`saveDock`、`saveLog` 存在 | | 11 | Mission status board reachable | PASS | HTTP 200 | | 12 | Mission status board filters present | PASS | `asset_type`、`location`、`record_scope` 存在 | | 13 | Location board reachable | PASS | HTTP 200,`map-cv` 与 `LOC_ASSETS` 存在 | | 14 | Location board embeds orbital data | PASS | Keplerian/ORB/BODIES 数据存在 | | 15 | Timeline reachable | PASS | HTTP 200,`tlr` 存在 | | 16 | Timeline filters present | PASS | `tl-q`、`tls`、`tl-type`、`tl-loc`、`tl-state` 存在 | | 17 | Data center: Engines | PASS | rows=31 | | 18 | Data center: Communications | PASS | rows=31 | | 19 | Data center: Tanks | PASS | rows=27 | | 20 | Data center: Vehicles | PASS | rows=11 | | 21 | Fuel converter page reachable | PASS | HTTP 200 | | 22 | Fuel factors API returns list | PASS | count=8 | | 23 | Fuel convert API volume mode | PASS | mode=volume,count=8 | | 24 | Fuel convert invalid input rejected | PASS | HTTP 400 | ## 4. 未执行/跳过项 | 项目 | 状态 | 原因 | |---|---|---| | `tests/test_e2e.py` | SKIPPED | 本地 Python 不可用:`.venv` 入口坏,`py -3` 未安装 | | Playwright 浏览器点击测试 | SKIPPED | 浏览器自动化运行时启动失败 | | 主题切换、时间 modal、ESC、点击导航 | SKIPPED | 需要浏览器 JS 执行环境 | | 地点板 canvas 像素/点击 Jupiter/Io/Back/缩放拖拽 | SKIPPED | 需要浏览器和截图/像素采样 | | 时间线筛选实际生效 | SKIPPED | 需要浏览器 JS 执行环境 | | 日志 CRUD、对接保存、删除、导入 | SKIPPED | 当前连接真实 PostgreSQL,执行会污染数据 | ## 5. 发现的问题 1. 现有 `docs/test_plan.md` 与实际不一致:文档写“12 个模块”,实际只有 10 个模块。 2. 现有 `tests/test_e2e.py` 的断言过浅,且报告名称编码损坏;它更像 smoke test,不能证明重构验收通过。 3. `draft_board.md` 要求的 `docking_events` 表尚未落地;当前对接接口只是给当前资产新增 state 日志,没有双向关系、分离或时间敏感查询。 4. 时间线模板存在 `onclick="tlPreset(...)"`,但代码库中未找到 `tlPreset` 实现;搜索/类型/地点/状态筛选控件也未找到绑定逻辑。 5. 资产详情日志搜索 `ad-lq` 和类型筛选 `ad-lf` 存在 DOM,但未找到前端过滤脚本。 6. 地点板当前用 Canvas 渐变绘制天体;尚未实现 draft 中“真实纹理 + 渲染模式切换”的目标。 7. 燃料换算页面是前端本地计算,API 另有 `/api/v1/fuel-converter/convert`;两者的模式命名不同,后续测试需同时覆盖页面行为和 API 合约。 ## 6. 建议 - 先修复本地 Python/Playwright 环境,恢复自动化测试可执行性。 - 将当前 `tests/test_e2e.py` 拆成 `smoke`、`browser`、`business` 三类,避免把 DOM 存在误当成功能通过。 - 为写入测试准备隔离数据库或事务回滚 fixture,再验证日志 CRUD、对接和分离。 - 对时间线和资产详情筛选先补前端逻辑,再纳入 P1 浏览器回归。 - 对 `docking_events` 明确是“本期必须实现”还是“后续 backlog”;否则测试计划应将其标为未实现验收项。