Redis 测试用例生成 — 完整调用链路
阶段一:系统上下文自动注入(对话开始前,无 tool call)
系统自动加载 →
├── CLAUDE.md 项目架构、命令、fixture用法、代码规范
├── MEMORY.md 索引 历史记忆指针(踩坑经验、输出规范等)
├── Skill 触发规则 只有一行描述,不含具体内容
└── git status 当前分支、文件状态
此时已知道:项目是什么、怎么跑测试、历史上有什么教训(标题级别)、有哪些 skill 可用。
阶段二:触发 Skill(第一个显式 tool call)
识别到用户要写 Redis 测试
│
▼
Skill(redis-test-generator)
│
返回完整 prompt:
├── 10步 Workflow
├── API 分类表
├── 三层架构规则
├── 测试文件模板
├── 优先级规则(P0-P3)
├── 响应处理最佳实践
├── Service 方法命名规范
└── Lessons Learned 系统要求
阶段三:按 Skill Workflow 执行研究(并行 Read/Grep/Glob)
Skill 的 Workflow 第1步明确要求先读 lessons_learned:
并行读取 →
├── references/lessons_learned.md ← Skill第1步:读踩坑记录
├── redis_apis_summary.md ← Skill第6步:确认API测试状态
├── prompt_template_for_test_cases.md ← 补充模板参考
├── 对应 {domain}_service.py ← Skill第4步:检查service层方法
└── jdcloud_sdk/.../ApiNameRequest.py ← Skill第5步:了解SDK参数
如果需要更多上下文,还会读:
├── 同 domain 下已有测试文件 ← 学习现有模式
├── base_fixtures.py ← 确认可用 fixtures
└── conftest.py ← 确认 markers、命令行参数
阶段四:编写代码(Write/Edit)
判断是否需要新增 service 方法
│
├── 需要 → Edit {domain}_service.py,添加方法 + SDK import
│
▼
Write test_cases/{domain}/test_{ApiName}Request.py
├── 遵循 Skill 模板
├── 遵循 CLAUDE.md 规范(中文注释、Tuple[bool,Any]、fixture注入)
└── 规避 lessons_learned 中的已知坑
阶段五:运行验证(Bash)
Bash: pytest test_cases/redis/test_cases/{domain}/test_{ApiName}Request.py -v -s
│
├── 通过 → 进入阶段六
└── 失败 → 分析原因 → 修复 → 重跑
阶段六:收尾(Edit + Write)
并行执行 →
├── Edit redis_apis_summary.md ← Skill第9步:标记[已测试]
├── 如有新坑 → Edit lessons_learned.md ← Skill第10步:记录新教训
└── 向用户输出:
├── 验证了什么功能点 ← Memory要求
├── 关键断言是什么 ← Memory要求
└── 未覆盖项有哪些 ← Memory要求
完整时序图
时间轴 ──────────────────────────────────────────────────────────────────────►
[系统注入] [显式 tool calls]
CLAUDE.md ─┐
MEMORY.md索引 ─┤ ① Skill ─→ ② Read(多文件并行) ─→ ③ Write/Edit ─→ ④ Bash(pytest) ─→ ⑤ Edit(收尾)
git status ─┤
skill触发规则 ─┘
▲ │
│ ▼
被动加载 输出结果+更新memory
(无tool call) (按memory要求格式)
各信息源的作用分工
| 信息源 | 提供什么 | 加载方式 |
|---|---|---|
| CLAUDE.md | 项目架构、命令、编码规范 | 系统自动注入 |
| MEMORY.md | 历史教训、输出格式要求 | 索引自动注入,详情按需 Read |
| Skill | 完整编写流程、模板、分类表、质量规则 | 显式 tool call |
| lessons_learned.md | 具体踩坑案例和解决方案 | Skill 要求必须 Read |
| redis_apis_summary.md | API 测试覆盖状态 | Skill 要求 Read |
| 已有代码 | 现有模式、可复用方法 | 按需 Read/Grep |
关键结论
Memory 索引最先(被动注入)→ Skill 内容其次(主动调用)→ Memory 详细文件按需读取(Read 工具)
- Memory 和 Skill 不是二选一,而是互补关系
- Skill 提供"怎么写"(流程、模板、规范)
- Memory 提供"别踩什么坑"(历史教训、输出要求)
- CLAUDE.md 提供"项目是什么"(架构、命令、约定)