用途
Scenario Testing 用于在不使用 mock 的前提下对功能进行端到端验证。它把真实依赖(真实数据库、真实 API、真实服务)作为验证依据,依据资料中给出的「真实层级」:场景(真实依赖、真实行为)> 单元测试(隔离逻辑、合成输入)> mock(对系统如何工作的假设)。资料强调 mock 只是在验证你的假设而非现实:mock 通过而生产失败时,是 mock 撒了谎;场景失败时,是现实在说话。
适用场景包括:端到端功能验证、跨服务的集成测试、演示行为的证明程序(proof programs)、真实工作流测试、API 契约验证、认证流程验证。明确不适用于:单元测试、mock 测试、性能基准测试、负载测试。
主要能力与目录结构
该技能围绕两类产物组织:
.scratch/(需加入 gitignore):一次性测试脚本,用于快速验证。自包含、可运行、可丢弃。首次使用前必须确认.scratch/已写入.gitignore。scenarios.jsonl(提交到仓库):把成功的场景模式记录为 JSONL,每行一个完整 JSON 对象,用于沉淀已验证模式、回归指标与可复用测试用例。
.scratch/ 脚本的命名约定:test-{feature}.ts(功能验证)、debug-{issue}.ts(排查特定缺陷)、prove-{behavior}.ts(演示预期行为)、explore-{api}.ts(了解外部 API 行为)。
场景结构示例(资料原文):
{"name":"auth-login-success","description":"User logs in with valid credentials","setup":"Create test user with known password","steps":["POST /auth/login with credentials","Receive JWT token","GET /auth/me with token"],"expected":"User profile returned with correct data","tags":["auth","jwt","happy-path"]}
{"name":"auth-login-invalid","description":"Login fails with wrong password","setup":"Test user exists","steps":["POST /auth/login with wrong password"],"expected":"401 Unauthorized, no token issued","tags":["auth","error-handling"]}
脚本典型结构(资料原文)包含真实数据库建用户、真实 HTTP 请求、对实际响应做断言、最后清理数据。
使用方式:写 → 执行 → 记录 → 清理
- Setup:准备真实依赖——启动本地数据库(Docker、嵌入式)、配置测试 API 密钥(staging 凭据)、初始化真实测试数据(非 fixtures)、验证服务连通性。
- Script:编写证明程序,导入真实依赖,分为 setup / execute / verify / cleanup 四个阶段。
- Execute:连接到真实数据库运行,调用实际 API 端点,使用真实服务实例,观察真实行为。
- Document:若场景验证了行为,把模式提取到
scenarios.jsonl(含 setup 要求、预期结果、分类标签),随后删除脚本或将其提升为永久测试。
scenarios.jsonl 每行字段:name(kebab-case 唯一标识)、description、setup、steps(有序动作数组)、expected(成功标准)、tags(分类)、可选 env(所需环境如 staging、local、prod-readonly)、可选 duration_ms。
.gitignore 检查命令(资料原文):
[ -f .gitignore ] || touch .gitignore
grep -q '.scratch/' .gitignore || echo '.scratch/' >> .gitignore
约束与限制
必须:首次使用前确认 .scratch/ 已加入 .gitignore;始终针对真实依赖测试;使用单命令可运行的自包含脚本;将成功场景记录到 scenarios.jsonl;执行后清理测试数据;为场景打标签;所有脚本包含清理阶段;使用测试凭据(绝不用生产凭据)。
绝不:使用 mock、stub 或测试替身;提交 .scratch/ 内容;针对生产数据测试;跳过清理阶段;不经验证就假设行为;把假设当作事实;测试被 mock 的行为;在共享环境留下测试数据。
以下情况需上报处理:没有可用的 staging 环境;真实依赖测试成本过高;测试需要破坏性生产操作;无法获取测试凭据。
相关资源
相关资料还提到配套文档 patterns.md(常见场景模式与模板),以及相关技能:debugging-and-diagnosis(调查方法,场景有助于复现缺陷)、test-driven-development(TDD 工作流,场景用于验证功能)、codebase-analysis(证据收集,场景提供经验数据)。外部资源包括《Growing Object-Oriented Software, Guided by Tests》与 James Shore 的 Testing Without Mocks 模式库。
暂未提供的信息
资料未说明该技能的收费模式、价格、支持平台、安装命令及具体实现语言绑定等信息。