Files
dbtool-cli-v1/TUI_TEST_STRATEGY.md
Paperclip CTO a28dab4cd9
Some checks failed
release-smoke / macos-13 / x86_64-apple-darwin (push) Has been cancelled
release-smoke / ubuntu-latest / x86_64-unknown-linux-gnu (push) Has been cancelled
release-smoke / windows-latest / x86_64-pc-windows-msvc (push) Has been cancelled
feat(usable): package gui-host validation snapshot
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-31 10:21:36 +00:00

133 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 主实现,当前已接入 `sqlite-local` 与 PostgreSQL / MySQL demo profile 的真实 connect / inspect / query / export 路径
- `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 第二阶段范围与 gating
- `backlog/2026-03-27-dbtool-tui-v1-phase-2-issues.md`owner-backed issue 分解
- `scripts/tui/demo-stack.sh`:无 `docker compose` 子命令时的 demo stack / seed 统一入口
- `scripts/tui/live-network-smoke.sh`PostgreSQL / MySQL 的 TTY live smoke 入口
### 已发现的测试资产
- `apps/tui/src/main.rs` 内当前有 9 个内联测试,覆盖:
- query 草稿切换
- editor `Enter` 触发 running
- empty query 完成态
- results 宽表列分页
- insert mode 录入
- export 成功态映射
- 非 TTY 提示文案
- TTY 检测辅助函数
- connection-qualified query draft 生成
- 当前存在可执行的预构建二进制:`target/debug/dbtool-tui`
- 当前最小可重复 smoke 入口:`scripts/tui/smoke-tty.sh ./target/debug/dbtool-tui`
### 2026-03-27 ~ 2026-03-31 已执行证据
- TTY shell smoke`./target/debug/dbtool-tui``120x40` 下可启动、渲染并以 `q` 退出,退出码 `0`
- 小终端降级:同一二进制在 `90x20` 下显示 `Terminal Too Small``Resize the terminal`,退出码 `0`
- 源码重建:`CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse cargo build -p dbtool-tui` 直接通过
- 源码测试:`CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse cargo test -p dbtool-tui` 直接通过,`9` 个测试全绿
- 非交互限制:源码重建后的 `./target/debug/dbtool-tui --help` 在无 TTY 场景下返回退出码 `1`,并明确提示需要交互式 TTY 以及 `scripts/tui/smoke-tty.sh`
- PostgreSQL live smoke`scripts/tui/live-network-smoke.sh postgres ./target/debug/dbtool-tui` 直接通过
- MySQL live smoke`scripts/tui/live-network-smoke.sh mysql ./target/debug/dbtool-tui` 直接通过
### 当前缺口
- 当前 runner 默认裸 `cargo` 会因为空的 `CARGO_REGISTRIES_CRATES_IO_PROTOCOL` 环境变量直接失败runbook 必须显式写出 override
- `.github/workflows/release-smoke.yml` 当前只覆盖 `dbtool`
- 当前已建立 PostgreSQL / MySQL live happy path但仍缺 failure / empty / restricted / browse-stability 的 runner 直证
- release artifact / packaged binary 仍缺真实 smoke
- 状态恢复与键盘一致性需要单独留痕,避免 QA 按旧文档复核不存在的快捷键
## 测试分层
### 1. 源码层验证
- 目标:确认实现可重建、内联测试可运行
- 当前命令:
- `CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse cargo build -p dbtool-tui`
- `CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse cargo test -p dbtool-tui`
- 当前判断:
- 这是必要层,且 2026-03-28 当前 runner 已给出直接通过结论
- 默认裸 `cargo` 失败仍应记为环境口径风险,不能误写成产品失败
### 2. TTY shell smoke
- 目标:最低成本确认 TUI 可启动、可渲染、可退出、可在小终端降级
- 当前建议:
- 使用 `scripts/tui/smoke-tty.sh` 固化 TTY 启动路径
- 用预构建二进制先取证,再视环境补做源码重建后的同路径复核
- 注意:
- `dbtool-tui` 不是普通 CLI不要用 `--help` 替代交互 smoke
- 共享执行口径收敛到 `TUI_SMOKE_RUNBOOK.md`
### 3. Shell 交互回归(当前可见工作区)
- 目标:验证当前 shell 已实现的交互骨架,但不把当前可见工作区直接误记为完整的 network-live 能力
- 范围:
- 视图切换
- 焦点切换
- 静态连接激活
- 静态 schema / object 浏览
- 查询草稿切换、插入模式、运行占位、结果分页
- 错误 / 空状态 / 恢复路径
- `Esc` / `r` / `Enter` / `[` / `]` 的键位一致性
- 输出要求:
- 明确标记“这是 shell 示例状态验证,不是 shared app live 数据验证”
### 4. 第二阶段 live integration 验收
- 目标:在当前已存在的 runner-side live path 之上对连接、inspect、query、results、export 给出更完整的验收判断
- 当前已具备的 happy-path 入口:
- `scripts/tui/live-network-smoke.sh postgres ./target/debug/dbtool-tui`
- `scripts/tui/live-network-smoke.sh mysql ./target/debug/dbtool-tui`
- 必验路径:
- 真实连接 `loading` / `success` / `failure`
- 真实 inspect ready / empty / restricted
- 真实 query running / success / empty / error
- export 成功 / 失败反馈
- shared app 边界复用,无 CLI 文本解析旁路
### 5. 发布前 / 非交互验证
- 目标:确认非开发者与 CI 都能重复最小验收
- 当前判断:
- 尚未建立
- 若后续仍要求 TTY 启动,应在 runbook 与 workflow 中显式写清,不得假装支持普通非交互 `--help` / `--version` smoke
## 证据规则
- 每个“通过”项都必须附带命令、终端尺寸、输入按键、输出摘要或错误摘要
- 每个“未执行”项都必须标原因:未实现、缺环境、被上游 issue 卡住、或超出当前范围
- 代码阅读、README 声明、和真实执行证据必须分开写
- 不能用 CLI 已通过来替代 TUI 已通过
- 不能把静态示例状态写成真实数据库能力
- 不能把 TTY 程序的 `--help` 失败误写成已支持的 smoke 入口
## 当前优先级
1. 保住 shell baseline 证据,不让第二阶段重构把它冲掉
2. 在已建立的 live happy path 上补 failure / empty / restricted / browse-stability 证据
3. 补 TUI CI / packaged-binary / release smoke
4. 最后再补 TUI 专属 CI / release / runbook
## 当前验收判断
- shell baseline有预构建二进制级别的可重复 smoke属“通过”
- 源码层验证:当前 runner 已通过,但需要在 runbook 中固化 cargo 环境变量 override
- 第二阶段 live integration当前 runner 内 PostgreSQL / MySQL demo happy path 已通过,但 failure / empty / restricted / browse-stability 仍未补齐
- 发布前状态:未就绪,因为 `dbtool-tui` 仍缺 CI 与 release artifact smoke