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

6.6 KiB
Raw Permalink Blame History

dbtool-tui-v1 测试策略(阶段 2 分层版)

目标

  • dbtool-tui-v1 的 shell baseline 验收、第二阶段 live integration 验收、以及非交互 / 发布前验证彻底拆层。
  • 让 QA 对每个关键用户流都能给出“已执行通过 / 未执行 / 被 blocker 卡住”的可审计判断。
  • 让 CTO 和 Product Manager 看到真实优先级:先 shared app 契约,再 live 接线,最后才是 live 验收闭环。

当前资产盘点

已存在的共享资产

  • apps/tui/src/main.rsTUI 主实现,当前已接入 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.mdCTO 第二阶段范围与 gating
  • backlog/2026-03-27-dbtool-tui-v1-phase-2-issues.mdowner-backed issue 分解
  • scripts/tui/demo-stack.sh:无 docker compose 子命令时的 demo stack / seed 统一入口
  • scripts/tui/live-network-smoke.shPostgreSQL / 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-tui120x40 下可启动、渲染并以 q 退出,退出码 0
  • 小终端降级:同一二进制在 90x20 下显示 Terminal Too SmallResize 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 smokescripts/tui/live-network-smoke.sh postgres ./target/debug/dbtool-tui 直接通过
  • MySQL live smokescripts/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