测试和质量门禁

目的

定义软件团队的测试层级和 CI 门禁。

测试层级

层级 目的 示例
Unit 快速验证核心逻辑 pure function、reducer
Integration 验证 DB/API/service 边界 API + Postgres
Contract 验证协议兼容性 runtime claim payload、webhook schema
E2E smoke 验证关键用户路径 task -> run -> artifact
Release smoke 发布后信心检查 health check、关键 route
Manual exploratory 高风险 UX/产品变化 payment、onboarding、permissions

门禁语义

不要把 pnpm check 这类命令名当成标准本身。真正的标准是它背后的验证语义:代码是否格式正确、类型/编译是否通过、测试是否通过、能否构建、migration 是否可执行、关键路径是否仍然可用。

三角色质量责任

角色 负责判断 最低证据
技术负责人 测试覆盖是否匹配风险,失败是否阻止合并 test / build / migration / smoke 结果
产品负责人 用户可见路径是否符合验收 截图、录屏、staging 链接、产品验收
平台 / 资深工程师 命令是否稳定、CI 是否可复现 CI 配置、命令说明、失败排障方式

| 门禁 | 必须验证什么 | 失败时含义 | | --- | --- | | Format | 代码格式符合仓库规范 | 代码风格不可合并 | | Lint / static analysis | 常见 bug、未使用代码、危险模式被拦截 | 可能存在静态风险 | | Typecheck / compile | 类型系统或编译器能通过 | 代码无法可靠运行或构建 | | Unit test | 核心逻辑仍符合预期 | 行为回归 | | Integration test | DB/API/service 边界仍兼容 | 模块间契约破坏 | | Build | 生产 artifact、镜像或包能生成 | 无法部署或发布 | | Migration check | schema 变化可执行、可审查 | 数据库升级风险 | | Smoke | 关键用户路径或交付闭环仍可用 | 系统主路径不可用 | | Witness / provider smoke | 外部集成最小真实路径仍可用 | 第三方或 provider 集成失效 |

不同技术栈的命令映射

技术栈 Format / lint Typecheck / compile Test Build Migration / smoke
JS/TS pnpm lint pnpm typecheck pnpm test pnpm build pnpm db:migratepnpm smoke:*
Go gofmt -l . && go vet ./... go test ./... 覆盖编译 go test ./... go build ./... 项目 migration CLI、项目 smoke 脚本
Python ruff check .black --check . mypy .pyright pytest python -m build 或 Docker build Alembic/Django migration、项目 smoke 脚本
Rust cargo fmt --checkcargo clippy -- -D warnings cargo check cargo test cargo build --release SQLx/Diesel migration、项目 smoke 脚本
Java/Kotlin ./gradlew checkstyleMain 或同类任务 ./gradlew compileJava / compileKotlin ./gradlew test ./gradlew build Flyway/Liquibase、项目 smoke 脚本
Swift/iOS SwiftLint 或 formatter check xcodebuild build xcodebuild test archive/build action migration/smoke 按 app 后端或本地 fixture 定义

JS/TS 参考命令

如果仓库使用 pnpm workspace,可以把上面的门禁聚合成这些脚本:

参考命令 具体应该做什么
pnpm lint 运行 ESLint、formatter check,必要时包含 import/order、accessibility lint
pnpm typecheck 运行 tsc --noEmit 或框架等价 typecheck
pnpm test 运行 unit/integration tests,例如 Vitest/Jest/Playwright component tests
pnpm build 生成生产 Web/API artifact,验证 bundler、server build、类型生成
pnpm check 聚合 linttypechecktestbuild 中适合合并前必跑的门禁
pnpm runtime:test 测 runtime daemon 的 claim、heartbeat、状态转换、错误回传
pnpm runtime:build 编译 runtime daemon,确保可发布或可打包
pnpm db:migrate 在本地或 CI 数据库执行 migration,验证 schema 可升级
pnpm smoke:m1 跑最小交付闭环,例如 task -> run -> artifact -> approval
pnpm witness:test 跑外部集成 witness fixture,验证 webhook、签名、payload、权限映射
pnpm smoke:codex 使用真实 provider/app-server 跑一次受控 smoke,验证 provider 集成没有漂移

CI 必须门禁

  1. 使用 frozen lockfile 安装。
  2. Lint/typecheck。
  3. Unit/integration tests。
  4. Build。
  5. Runtime daemon tests。
  6. Migration check。
  7. 关键交付闭环 smoke。
  8. 安全和依赖扫描。

参考实现可以在 CI 中启动 Postgres,并执行 pnpm checkpnpm db:migratepnpm smoke:m1。实际项目应替换为自己的等价质量门禁,并在 README 或 CI 文档中说明每个命令覆盖哪些验证语义。

质量标准

变更完成必须有证据:

变更 证据
UI 截图或 E2E/smoke 证明
API request/response test
DB migration migration test 或 rollback note
Runtime daemon test 和 protocol fixture
Provider integration witness 或 smoke
Security permission test 或 review note

后续 Agent 就绪要求

这一节在人类测试和质量门禁稳定后再看。

Agent run 必须产出测试证据作为 artifact。没有证据的 run 应视为未完成。

下一步阅读

读完或填完这份文档后,通常继续看: