- add shared db-app layer for connect/inspect/query/export events - add dbtool-tui workspace with sqlite-local live flow and QA docs - include host-validated acceptance updates for CMP-36 Co-Authored-By: Paperclip <noreply@paperclip.ing>
5.4 KiB
5.4 KiB
dbtool-tui-v1 测试策略(阶段 2 分层版)
目标
- 把
dbtool-tui-v1的 shell baseline 验收、第二阶段 live integration 验收、以及非交互 / 发布前验证彻底拆层。 - 让 QA 对每个关键用户流都能给出“已执行通过 / 未执行 / 被 blocker 卡住”的可审计判断。
- 让 CTO 和 Product Manager 看到真实优先级:先 shared app 契约,再 live 接线,最后才是 live 验收闭环。
当前资产盘点
已存在的共享资产
apps/tui/src/main.rs:TUI 主实现,当前包含静态连接、schema、query、results 示例状态apps/tui/README.md:当前交互范围与产品/体验说明TUI_ACCEPTANCE_CHECKLIST.md:阶段 2 分层验收矩阵TUI_REGRESSION_CHECKLIST.md:阶段 2 分层回归清单plans/2026-03-27-dbtool-tui-v1-phase-2-scope.md:CTO 第二阶段范围与 gatingbacklog/2026-03-27-dbtool-tui-v1-phase-2-issues.md:owner-backed issue 分解
已发现的测试资产
apps/tui/src/main.rs内已有 5 个内联测试,覆盖:- query 草稿切换
- editor
Enter触发 running - empty query 完成态
- results 宽表列分页
- insert mode 录入
- 当前存在可执行的预构建二进制:
target/debug/dbtool-tui
2026-03-27 已执行证据
- TTY shell smoke:
./target/debug/dbtool-tui在120x40下可启动、渲染并以q退出,退出码0 - 小终端降级:同一二进制在
90x20下显示Terminal Too Small与Resize the terminal,退出码0 - 非交互限制:
./target/debug/dbtool-tui --help在当前无 TTY 场景下返回No such device or address
当前缺口
- 当前 runner 默认无
cargo/rustc在 PATH - 虽存在离线 Rust toolchain,但源码重建 / 测试仍被系统缺少
cc/zig cc阻塞 - 仓库暂无 TUI 专属 smoke runbook
.github/workflows/release-smoke.yml当前只覆盖dbtool- 当前无 TUI 专属 demo / seed / Docker 路径
- 第二阶段 live integration 仍未整体完成:
[CMP-34](/CMP/issues/CMP-34)仍在in_progress,[CMP-35](/CMP/issues/CMP-35)仍待宿主机回填,而[CMP-36](/CMP/issues/CMP-36)已完成宿主机侧验收
测试分层
1. 源码层验证
- 目标:确认实现可重建、内联测试可运行
- 当前命令:
cargo build -p dbtool-tuicargo test -p dbtool-tui
- 当前判断:
- 这是必要层,但当前 runner 不能给出通过结论
- 缺
cc/zig cc时,应记录为环境 blocker,不能伪造成产品失败,也不能反向伪造成已通过
2. TTY shell smoke
- 目标:最低成本确认 TUI 可启动、可渲染、可退出、可在小终端降级
- 当前建议:
- 使用
script+stty固化 TTY 启动路径 - 用预构建二进制先取证,再视环境补做源码重建后的同路径复核
- 使用
- 注意:
dbtool-tui不是普通 CLI;不要用--help替代交互 smoke
3. Shell 交互回归(静态 / 示例数据)
- 目标:验证当前 shell 已实现的交互骨架,但不把示例状态误记为 live 能力
- 范围:
- 视图切换
- 焦点切换
- 静态连接激活
- 静态 schema / object 浏览
- 查询草稿切换、插入模式、运行占位、结果分页
- 错误 / 空状态 / 恢复路径
- 输出要求:
- 明确标记“这是 shell 示例状态验证,不是 shared app live 数据验证”
4. 第二阶段 live integration 验收
- 目标:在真实 shared app 接线落地后,对连接、inspect、query、results、export 给出验收判断
- 前置条件:
[CMP-34](/CMP/issues/CMP-34)完成并冻结契约[CMP-35](/CMP/issues/CMP-35)完成真实连接与 schema browser 接线[CMP-36](/CMP/issues/CMP-36)完成真实 query / results / export 接线
- 必验路径:
- 真实连接
loading/success/failure - 真实 inspect ready / empty / restricted
- 真实 query running / success / empty / error
- export 成功 / 失败反馈
- shared app 边界复用,无 CLI 文本解析旁路
- 真实连接
5. 发布前 / 非交互验证
- 目标:确认非开发者与 CI 都能重复最小验收
- 当前判断:
- 尚未建立
- 若后续仍要求 TTY 启动,应在 runbook 与 workflow 中显式写清,不得假装支持普通非交互
--help/--versionsmoke
证据规则
- 每个“通过”项都必须附带命令、终端尺寸、输入按键、输出摘要或错误摘要
- 每个“未执行”项都必须标原因:未实现、缺环境、被上游 issue 卡住、或超出当前范围
- 代码阅读、README 声明、和真实执行证据必须分开写
- 不能用 CLI 已通过来替代 TUI 已通过
- 不能把静态示例状态写成真实数据库能力
- 不能把 TTY 程序的
--help失败误写成已支持的 smoke 入口
当前优先级
- 保住 shell baseline 证据,不让第二阶段重构把它冲掉
- 等待
[CMP-34](/CMP/issues/CMP-34)冻结 shared app 契约 - 在
[CMP-35](/CMP/issues/CMP-35)/[CMP-36](/CMP/issues/CMP-36)完成后补 live integration 验收 - 最后再补 TUI 专属 CI / release / runbook
当前验收判断
- shell baseline:有预构建二进制级别的可重复 smoke,属“有条件通过”
- 源码层验证:当前 runner blocked,不能给通过结论
- 第二阶段 live integration:当前 blocked,不能给通过结论
- 发布前状态:未就绪,因为
dbtool-tui仍缺 CI、release artifact smoke 和 live demo 路径