@miniidealab/openlogos 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/init.d.ts +9 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +126 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +9 -41
- package/dist/commands/sync.js.map +1 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +14 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +5 -2
- package/skills/api-designer/SKILL.md +209 -0
- package/skills/architecture-designer/SKILL.md +181 -0
- package/skills/change-writer/SKILL.md +146 -0
- package/skills/code-reviewer/SKILL.md +204 -0
- package/skills/db-designer/SKILL.md +212 -0
- package/skills/merge-executor/SKILL.md +84 -0
- package/skills/prd-writer/SKILL.md +171 -0
- package/skills/product-designer/SKILL.md +228 -0
- package/skills/project-init/SKILL.md +163 -0
- package/skills/scenario-architect/SKILL.md +214 -0
- package/skills/test-orchestrator/SKILL.md +142 -0
- package/skills/test-writer/SKILL.md +247 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Skill: Test Orchestrator
|
|
2
|
+
|
|
3
|
+
> 基于业务场景和时序图设计 **API 编排测试**用例(Phase 3 Step 3b),覆盖正常/异常/边界场景,自动识别外部依赖并应用测试策略,作为端到端 API 验收标准。**仅适用于涉及 API 的项目。**
|
|
4
|
+
|
|
5
|
+
## 与 test-writer 的关系
|
|
6
|
+
|
|
7
|
+
本 Skill 负责测试金字塔的**顶层**——API 编排测试(HTTP 请求级别),执行于 Phase 3 Step 3b。
|
|
8
|
+
|
|
9
|
+
底层的单元测试和场景测试(函数调用级别)由 `test-writer` Skill 在 Step 3a 完成。Step 3a 是所有项目的必选步骤,Step 3b(本 Skill)仅在项目涉及 API 时执行。
|
|
10
|
+
|
|
11
|
+
## 触发条件
|
|
12
|
+
|
|
13
|
+
- 用户要求设计 API 编排测试
|
|
14
|
+
- 用户提到 "Phase 3 Step 3b"、"API 编排"、"编排测试"
|
|
15
|
+
- Step 3a(test-writer)完成后,AI 引导用户继续进入 Step 3b
|
|
16
|
+
- 用户需要验收已部署的 API 代码
|
|
17
|
+
|
|
18
|
+
## 前置依赖
|
|
19
|
+
|
|
20
|
+
- `logos/resources/test/` 中包含测试用例规格文档(Step 3a 已完成)
|
|
21
|
+
- `logos/resources/prd/3-technical-plan/2-scenario-implementation/` 中包含场景时序图
|
|
22
|
+
- `logos/resources/api/` 中包含 API 规格(OpenAPI YAML)
|
|
23
|
+
- `logos-project.yaml` 中包含 `external_dependencies`(如有)
|
|
24
|
+
|
|
25
|
+
如果项目不涉及 API(纯 CLI 工具、纯前端等),跳过此 Skill。
|
|
26
|
+
|
|
27
|
+
## 核心能力
|
|
28
|
+
|
|
29
|
+
1. 从时序图和 API YAML 设计正常流程编排
|
|
30
|
+
2. 基于异常用例(EX-N.M)设计异常流程编排
|
|
31
|
+
3. 设计边界用例(合法但非主路径的变体)
|
|
32
|
+
4. 定义变量提取和传递机制
|
|
33
|
+
5. **识别外部依赖并应用测试策略**:读取 `logos-project.yaml` 的 `external_dependencies`,在涉及外部服务的步骤中自动插入 `mock` 字段
|
|
34
|
+
6. 执行编排并验证结果
|
|
35
|
+
|
|
36
|
+
## 执行步骤
|
|
37
|
+
|
|
38
|
+
### Step 1: 读取场景上下文
|
|
39
|
+
|
|
40
|
+
读取以下文件建立完整上下文:
|
|
41
|
+
|
|
42
|
+
- 场景时序图(`logos/resources/prd/3-technical-plan/2-scenario-implementation/`)
|
|
43
|
+
- API YAML(`logos/resources/api/`)
|
|
44
|
+
- `logos-project.yaml` —— 重点读取 `external_dependencies` 字段
|
|
45
|
+
|
|
46
|
+
### Step 2: 识别外部依赖
|
|
47
|
+
|
|
48
|
+
将 `external_dependencies` 中的 `used_in` 与当前场景编号匹配。如果当前场景涉及外部依赖:
|
|
49
|
+
|
|
50
|
+
- 记录该依赖的 `test_strategy` 和 `test_config`
|
|
51
|
+
- 如果某个依赖声明了 `used_in` 但缺少 `test_strategy`,**主动询问用户**测试策略
|
|
52
|
+
|
|
53
|
+
如果 `logos-project.yaml` 中没有 `external_dependencies` 字段,但时序图中存在对外部服务的调用(如发送邮件、请求支付等),也应主动提醒用户补充。
|
|
54
|
+
|
|
55
|
+
### Step 3: 设计正常流程编排
|
|
56
|
+
|
|
57
|
+
按时序图的 Step 编号,逐步设计 API 调用链:
|
|
58
|
+
|
|
59
|
+
- 每步包含 method、url、headers、body、expected_status
|
|
60
|
+
- 涉及外部依赖的步骤,插入 `mock` 字段(见输出规范)
|
|
61
|
+
- 上一步响应中需要传递的变量,使用 `extract` 定义提取规则
|
|
62
|
+
|
|
63
|
+
### Step 4: 设计异常流程编排
|
|
64
|
+
|
|
65
|
+
为每个 EX 异常用例设计独立的编排,确保:
|
|
66
|
+
|
|
67
|
+
- 异常场景也能覆盖外部依赖的失败情况
|
|
68
|
+
- 使用 `mock` 字段模拟外部服务异常(如超时、返回错误等)
|
|
69
|
+
|
|
70
|
+
### Step 5: 设计边界用例编排
|
|
71
|
+
|
|
72
|
+
识别合法但非主路径的变体(如密码长度刚好在边界值、空字段等),补充编排。
|
|
73
|
+
|
|
74
|
+
### Step 6: 输出编排 JSON
|
|
75
|
+
|
|
76
|
+
按场景输出可执行的编排 JSON 文件。
|
|
77
|
+
|
|
78
|
+
## 输出规范
|
|
79
|
+
|
|
80
|
+
- 文件格式:JSON
|
|
81
|
+
- 存放位置:`logos/resources/scenario/`
|
|
82
|
+
- 按场景分文件:`user-auth.json`、`payment-flow.json`
|
|
83
|
+
- 编排中的每一步对应时序图的 Step 编号
|
|
84
|
+
|
|
85
|
+
### mock 字段结构
|
|
86
|
+
|
|
87
|
+
当某一步涉及外部依赖时,在该 step 中添加 `mock` 字段:
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"step": "Step 2: 获取邮件验证码",
|
|
92
|
+
"mock": {
|
|
93
|
+
"dependency": "邮件服务",
|
|
94
|
+
"strategy": "test-api",
|
|
95
|
+
"config": "GET /api/test/latest-email?to={email}",
|
|
96
|
+
"extract": { "code": "response.body.code" }
|
|
97
|
+
},
|
|
98
|
+
"method": "GET",
|
|
99
|
+
"url": "/api/test/latest-email?to={{email}}",
|
|
100
|
+
"expected_status": 200,
|
|
101
|
+
"extract": {
|
|
102
|
+
"verification_code": "body.code"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
`mock` 字段说明:
|
|
108
|
+
|
|
109
|
+
| 字段 | 类型 | 说明 |
|
|
110
|
+
|------|------|------|
|
|
111
|
+
| `dependency` | string | 对应 `external_dependencies` 中的 `name` |
|
|
112
|
+
| `strategy` | string | 测试策略(`test-api` / `fixed-value` / `env-disable` / `mock-callback` / `mock-service`) |
|
|
113
|
+
| `config` | string | 测试策略的具体配置,来自 `test_config` |
|
|
114
|
+
| `extract` | object | 从 mock 响应中提取变量(可选) |
|
|
115
|
+
|
|
116
|
+
不同策略的编排表现:
|
|
117
|
+
|
|
118
|
+
- **`test-api`**:该步骤的 url 替换为后门 API 地址
|
|
119
|
+
- **`fixed-value`**:该步骤不发起实际请求,直接在 `extract` 中注入固定值
|
|
120
|
+
- **`env-disable`**:该步骤标记为跳过,附带注释说明前提条件
|
|
121
|
+
- **`mock-callback`**:在前一步完成后插入一个额外的 mock 回调请求
|
|
122
|
+
- **`mock-service`**:该步骤的 url 替换为本地 mock 服务地址
|
|
123
|
+
|
|
124
|
+
## 实践经验
|
|
125
|
+
|
|
126
|
+
- **正常编排是骨架**:先完成正常流程编排,确保主路径可以跑通
|
|
127
|
+
- **异常编排是保障**:每个外部调用至少 1 个异常编排
|
|
128
|
+
- **变量传递**:前一步的响应中提取变量(如 token、user_id),传给后续步骤
|
|
129
|
+
- **测试数据**:编排开始前准备测试数据,结束后清理,保证幂等性
|
|
130
|
+
- **并发测试**:关键场景需要考虑并发情况(如:两人同时注册同一邮箱)
|
|
131
|
+
- **外部依赖先查清单**:开始设计编排前先读 `logos-project.yaml` 的 `external_dependencies`,没有声明的外部调用要主动提醒用户补充
|
|
132
|
+
- **mock 策略不要自行决定**:测试策略由 S12 技术架构设计(Phase 3 Step 0, architecture-designer)确定,编排测试阶段只负责消费,不要擅自更改
|
|
133
|
+
- **与 `openlogos verify` 的关系**:API 编排测试也可产出与 `spec/test-results.md` 相同格式的 JSONL 结果。编排测试运行后,结果同样写入 `logos/resources/verify/test-results.jsonl`,`openlogos verify` 统一读取并判定验收
|
|
134
|
+
|
|
135
|
+
## 推荐提示词
|
|
136
|
+
|
|
137
|
+
以下提示词可以直接复制给 AI 使用:
|
|
138
|
+
|
|
139
|
+
- `帮我设计编排测试`
|
|
140
|
+
- `基于 API 规格帮我生成 S01 的编排测试`
|
|
141
|
+
- `帮我把所有场景的正常路径编排出来`
|
|
142
|
+
- `帮我给 S02 补充异常路径的编排测试`
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# Skill: Test Writer
|
|
2
|
+
|
|
3
|
+
> 基于时序图、API 规格和 DB 约束,为每个业务场景设计单元测试用例和场景测试用例。适用于所有项目类型(API 服务、CLI 工具、前端应用、库等),是代码生成前的必要前置步骤。
|
|
4
|
+
|
|
5
|
+
## 触发条件
|
|
6
|
+
|
|
7
|
+
- 用户要求设计测试用例或测试方案
|
|
8
|
+
- 用户提到 "Phase 3 Step 3"、"Step 3a"、"测试先行"、"测试设计"
|
|
9
|
+
- 已有场景时序图,需要在写代码前设计测试
|
|
10
|
+
- 用户指定某个场景编号(如 S01)需要设计测试
|
|
11
|
+
|
|
12
|
+
## 前置依赖
|
|
13
|
+
|
|
14
|
+
- `logos/resources/prd/3-technical-plan/2-scenario-implementation/` 中包含场景时序图(**必需**)
|
|
15
|
+
- `logos/resources/api/` 中包含 API 规格(有则读取,无则跳过——非 API 项目可能没有)
|
|
16
|
+
- `logos/resources/database/` 中包含 DB DDL(有则读取,无则跳过)
|
|
17
|
+
- `logos/resources/prd/1-product-requirements/` 中包含需求文档(用于追溯验收条件)
|
|
18
|
+
|
|
19
|
+
**不可跳过**:无论项目类型如何,Step 3a(本 Skill)都必须执行。
|
|
20
|
+
|
|
21
|
+
## 核心能力
|
|
22
|
+
|
|
23
|
+
1. 从 API 字段约束(类型、格式、长度、枚举)中提取单元测试用例
|
|
24
|
+
2. 从 DB 约束(UNIQUE、CHECK、NOT NULL、FK)中提取单元测试用例
|
|
25
|
+
3. 从业务规则和 EX 异常用例中的单点错误处理提取单元测试用例
|
|
26
|
+
4. 从时序图 Step 序列提取场景测试用例(主路径)
|
|
27
|
+
5. 从 EX 异常用例提取场景测试用例(异常路径)
|
|
28
|
+
6. 从 Phase 1/2 验收条件反向校验测试覆盖完整性
|
|
29
|
+
|
|
30
|
+
## 执行步骤
|
|
31
|
+
|
|
32
|
+
### Step 1: 加载场景上下文
|
|
33
|
+
|
|
34
|
+
读取以下文件建立完整上下文:
|
|
35
|
+
|
|
36
|
+
- 场景时序图(`logos/resources/prd/3-technical-plan/2-scenario-implementation/`)
|
|
37
|
+
- API YAML(`logos/resources/api/`)—— 如果存在
|
|
38
|
+
- DB DDL(`logos/resources/database/`)—— 如果存在
|
|
39
|
+
- Phase 1 需求文档(验收条件)
|
|
40
|
+
- Phase 2 产品设计文档(交互级验收条件)
|
|
41
|
+
|
|
42
|
+
确认当前场景的:
|
|
43
|
+
- **Step 数量**:时序图中有多少个 Step
|
|
44
|
+
- **EX 数量**:有多少个异常用例
|
|
45
|
+
- **API 端点**:涉及哪些端点及其字段约束
|
|
46
|
+
- **DB 表**:涉及哪些表及其约束
|
|
47
|
+
|
|
48
|
+
### Step 2: 设计单元测试用例
|
|
49
|
+
|
|
50
|
+
从三类来源提取单元测试用例:
|
|
51
|
+
|
|
52
|
+
#### 2a: API 字段约束
|
|
53
|
+
|
|
54
|
+
逐个检查 API 端点的 `requestBody` 和 `parameters`:
|
|
55
|
+
|
|
56
|
+
- `type` → 类型错误用例(传入错误类型)
|
|
57
|
+
- `format`(email、uuid、date-time)→ 格式校验用例
|
|
58
|
+
- `minLength` / `maxLength` → 边界值用例(刚好达到、超出 1 位)
|
|
59
|
+
- `required` → 必填缺失用例
|
|
60
|
+
- `enum` → 枚举值用例(合法值 + 非法值)
|
|
61
|
+
- `minimum` / `maximum` → 数值范围用例
|
|
62
|
+
|
|
63
|
+
#### 2b: DB 约束
|
|
64
|
+
|
|
65
|
+
逐个检查相关表的约束:
|
|
66
|
+
|
|
67
|
+
- `UNIQUE` → 重复插入用例
|
|
68
|
+
- `NOT NULL` → 空值插入用例
|
|
69
|
+
- `CHECK` → 违反检查条件的用例
|
|
70
|
+
- `FOREIGN KEY` → 引用不存在记录的用例
|
|
71
|
+
- `DEFAULT` → 不传值时默认值验证
|
|
72
|
+
|
|
73
|
+
#### 2c: 业务规则
|
|
74
|
+
|
|
75
|
+
从时序图 Step 说明和 EX 异常用例中提取单点业务逻辑:
|
|
76
|
+
|
|
77
|
+
- 权限检查(未登录、无权限)
|
|
78
|
+
- 状态机转换(只有特定状态才能执行操作)
|
|
79
|
+
- 限流 / 频控规则
|
|
80
|
+
- 数据计算逻辑(金额计算、折扣规则)
|
|
81
|
+
|
|
82
|
+
**每个单元测试用例格式**:
|
|
83
|
+
|
|
84
|
+
| 字段 | 说明 |
|
|
85
|
+
|------|------|
|
|
86
|
+
| ID | `UT-{场景编号}-{序号}`,如 `UT-S01-01` |
|
|
87
|
+
| 描述 | 测试什么行为 |
|
|
88
|
+
| 来源 | 约束出处(如 `auth.yaml → register → email: format:email`) |
|
|
89
|
+
| 前置条件 | 测试前需要的状态 |
|
|
90
|
+
| 输入 | 具体输入值 |
|
|
91
|
+
| 预期输出 | 期望的返回值或错误信息 |
|
|
92
|
+
|
|
93
|
+
### Step 3: 设计场景测试用例
|
|
94
|
+
|
|
95
|
+
从两类来源提取场景测试用例:
|
|
96
|
+
|
|
97
|
+
#### 3a: 主路径(时序图 Step 序列)
|
|
98
|
+
|
|
99
|
+
将时序图的完整 Step 1 → Step N 视为一次端到端代码调用链:
|
|
100
|
+
|
|
101
|
+
- 确定场景的入口和出口
|
|
102
|
+
- 标注每个 Step 之间的数据传递(前一步输出作为后一步输入)
|
|
103
|
+
- 验证最终状态(数据库记录、返回值)
|
|
104
|
+
|
|
105
|
+
#### 3b: 异常路径(EX 异常用例)
|
|
106
|
+
|
|
107
|
+
将每个 EX 异常用例展开为场景测试用例:
|
|
108
|
+
|
|
109
|
+
- 标注异常在哪个 Step 触发
|
|
110
|
+
- 验证异常触发后的处理逻辑(错误返回、补偿/回滚)
|
|
111
|
+
- 验证异常未影响其他数据的完整性
|
|
112
|
+
|
|
113
|
+
**每个场景测试用例格式**:
|
|
114
|
+
|
|
115
|
+
| 字段 | 说明 |
|
|
116
|
+
|------|------|
|
|
117
|
+
| ID | `ST-{场景编号}-{序号}`,如 `ST-S01-01` |
|
|
118
|
+
| 描述 | 测试什么场景流程 |
|
|
119
|
+
| 覆盖 Steps | 覆盖时序图的哪些 Step(如 `Step 1→6`)或哪个 EX(如 `EX-2.1`) |
|
|
120
|
+
| 前置条件 | 测试前需要的状态和数据 |
|
|
121
|
+
| 操作序列 | 按 Step 顺序的操作列表 |
|
|
122
|
+
| 预期结果 | 最终状态(返回值 + 数据库状态 + 副作用) |
|
|
123
|
+
|
|
124
|
+
### Step 4: 覆盖度校验
|
|
125
|
+
|
|
126
|
+
反向校验测试用例是否覆盖了所有关键约束:
|
|
127
|
+
|
|
128
|
+
- [ ] Phase 1 每个正常验收条件至少对应 1 个 ST 用例
|
|
129
|
+
- [ ] Phase 1 每个异常验收条件至少对应 1 个 ST 或 UT 用例
|
|
130
|
+
- [ ] 每个 EX 异常用例至少对应 1 个 ST 用例
|
|
131
|
+
- [ ] API 每个 `required` 字段至少 1 个 UT 用例
|
|
132
|
+
- [ ] DB 每个 `UNIQUE` / `CHECK` 约束至少 1 个 UT 用例
|
|
133
|
+
|
|
134
|
+
如有未覆盖项,补充用例或向用户说明理由。
|
|
135
|
+
|
|
136
|
+
### Step 5: 验收条件追溯
|
|
137
|
+
|
|
138
|
+
将 Phase 1 需求文档中的每个 GIVEN/WHEN/THEN 验收条件提取出来,为每条分配一个追溯 ID,并关联到覆盖该条件的测试用例 ID。
|
|
139
|
+
|
|
140
|
+
#### 验收条件 ID 规则
|
|
141
|
+
|
|
142
|
+
- 格式:`{场景编号}-AC-{两位序号}`,如 `S01-AC-01`、`S01-AC-02`
|
|
143
|
+
- 按需求文档中出现的顺序编号,正常和异常条件统一编号
|
|
144
|
+
- 同一场景的 AC ID 必须连续且唯一
|
|
145
|
+
|
|
146
|
+
#### 追溯表填写规则
|
|
147
|
+
|
|
148
|
+
1. 从需求文档读取当前场景的所有验收条件(正常 + 异常)
|
|
149
|
+
2. 为每条验收条件分配 AC ID
|
|
150
|
+
3. 找到覆盖该条件的测试用例 ID(可以是 UT 或 ST),填入「覆盖用例」列
|
|
151
|
+
4. 每个 AC 至少关联 1 个测试用例;如果无法覆盖,在「覆盖用例」列注明原因
|
|
152
|
+
|
|
153
|
+
`openlogos verify` 会解析此追溯表,将 AC → 用例 ID → 运行结果三层联动,生成完整的验收追溯报告。
|
|
154
|
+
|
|
155
|
+
### Step 6: 输出测试用例规格文档
|
|
156
|
+
|
|
157
|
+
按场景输出 Markdown 格式的测试用例规格文档。
|
|
158
|
+
|
|
159
|
+
### Step 7: 引导后续操作
|
|
160
|
+
|
|
161
|
+
根据项目类型引导用户进入下一步:
|
|
162
|
+
|
|
163
|
+
- **涉及 API** → 「继续进入 Step 3b 设计 API 编排测试?」
|
|
164
|
+
- **不涉及 API** → 「测试设计已完成,建议进入代码生成:对我说『按 S01 的规格帮我实现』」
|
|
165
|
+
|
|
166
|
+
## 输出规范
|
|
167
|
+
|
|
168
|
+
- **文件格式**:Markdown
|
|
169
|
+
- **存放位置**:`logos/resources/test/`
|
|
170
|
+
- **命名规则**:`{场景编号}-test-cases.md`(如 `S01-test-cases.md`)
|
|
171
|
+
- 每个文件包含:单元测试用例(按来源分组)+ 场景测试用例(主路径 + 异常路径)
|
|
172
|
+
- 用例 ID 全局唯一:`UT-{场景编号}-{序号}` / `ST-{场景编号}-{序号}`
|
|
173
|
+
|
|
174
|
+
### 文档结构模板
|
|
175
|
+
|
|
176
|
+
```markdown
|
|
177
|
+
# {场景编号}: {场景名称} — 测试用例
|
|
178
|
+
|
|
179
|
+
## 一、单元测试用例
|
|
180
|
+
|
|
181
|
+
### 1.1 {分组名称}(来源:{约束出处})
|
|
182
|
+
|
|
183
|
+
| ID | 描述 | 来源 | 前置条件 | 输入 | 预期输出 |
|
|
184
|
+
|----|------|------|---------|------|---------|
|
|
185
|
+
| UT-S01-01 | ... | ... | ... | ... | ... |
|
|
186
|
+
|
|
187
|
+
## 二、场景测试用例
|
|
188
|
+
|
|
189
|
+
### 2.1 主路径:{场景名称}
|
|
190
|
+
|
|
191
|
+
| ID | 描述 | 覆盖 Steps | 前置条件 | 操作序列 | 预期结果 |
|
|
192
|
+
|----|------|-----------|---------|---------|---------|
|
|
193
|
+
| ST-S01-01 | ... | Step 1→6 | ... | ... | ... |
|
|
194
|
+
|
|
195
|
+
### 2.2 异常路径
|
|
196
|
+
|
|
197
|
+
| ID | 描述 | 覆盖 EX | 前置条件 | 触发条件 | 预期结果 |
|
|
198
|
+
|----|------|--------|---------|---------|---------|
|
|
199
|
+
| ST-S01-02 | ... | EX-2.1 | ... | ... | ... |
|
|
200
|
+
|
|
201
|
+
## 三、覆盖度校验
|
|
202
|
+
|
|
203
|
+
- [x] Phase 1 正常验收条件:全部覆盖
|
|
204
|
+
- [x] Phase 1 异常验收条件:全部覆盖
|
|
205
|
+
- [x] EX 异常用例:全部覆盖
|
|
206
|
+
- [x] API required 字段:全部覆盖
|
|
207
|
+
- [x] DB UNIQUE/CHECK 约束:全部覆盖
|
|
208
|
+
|
|
209
|
+
## 四、验收条件追溯
|
|
210
|
+
|
|
211
|
+
| AC ID | 验收条件 | 覆盖用例 |
|
|
212
|
+
|-------|---------|---------|
|
|
213
|
+
| S01-AC-01 | 正常:全新项目初始化 — 创建完整目录结构 | ST-S01-01 |
|
|
214
|
+
| S01-AC-02 | 正常:显式项目名与配置文件不一致时确认 | ST-S01-02 |
|
|
215
|
+
| S01-AC-03 | 异常:项目已初始化 — 显示错误提示 | ST-S01-03, UT-S01-05 |
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## 用例 ID 合约
|
|
219
|
+
|
|
220
|
+
用例 ID(`UT-S01-01`、`ST-S01-01`)是设计文档与运行时的**绑定合约**:
|
|
221
|
+
|
|
222
|
+
- 在 test-cases.md 中定义的 ID,必须在生成的测试代码中被原样使用
|
|
223
|
+
- 测试代码的 reporter 会把每个用例的 ID 和运行结果写入 JSONL 文件
|
|
224
|
+
- `openlogos verify` 通过 ID 将运行结果映射回测试用例规格,自动判定验收
|
|
225
|
+
- 修改用例 ID 时必须同步修改测试代码中的 ID
|
|
226
|
+
|
|
227
|
+
详细的 JSONL 格式定义和各语言 reporter 代码模板见 `spec/test-results.md`。
|
|
228
|
+
|
|
229
|
+
## 实践经验
|
|
230
|
+
|
|
231
|
+
- **测试用例是设计文档,不是代码**:本 Skill 产出的是 Markdown 格式的测试用例规格,具体的测试代码在 Step 4 代码生成阶段由 AI 基于此规格实现
|
|
232
|
+
- **先单元后场景**:单元测试用例覆盖单个函数的正确性,场景测试覆盖跨模块串联——先确保积木正确,再验证积木拼接
|
|
233
|
+
- **不要遗漏 DB 约束**:很多 Bug 来自数据库层面的约束违反,DB 约束是单元测试用例的重要来源
|
|
234
|
+
- **场景测试关注数据传递**:Step 间的数据传递(前一步输出 → 后一步输入)是最容易出错的地方
|
|
235
|
+
- **EX 异常用例必须有对应的场景测试**:时序图中标注的每个 EX 都应该在场景测试中有体现
|
|
236
|
+
- **边界值优先**:单元测试用例优先覆盖边界值(刚好合法、刚好非法),而不是随机值
|
|
237
|
+
- **与 test-orchestrator 互补**:本 Skill 设计代码层面的测试(函数调用级),test-orchestrator 设计 API 层面的测试(HTTP 请求级)。二者共同覆盖"测试金字塔"的不同层级
|
|
238
|
+
- **用例 ID 是跨阶段合约**:ID 贯穿 test-cases.md → 测试代码 → test-results.jsonl → acceptance-report.md,任何一处不一致都会导致 `openlogos verify` 报告不完整
|
|
239
|
+
|
|
240
|
+
## 推荐提示词
|
|
241
|
+
|
|
242
|
+
以下提示词可以直接复制给 AI 使用:
|
|
243
|
+
|
|
244
|
+
- `帮我设计测试用例`
|
|
245
|
+
- `帮我设计 S01 的单元测试和场景测试`
|
|
246
|
+
- `帮我给所有 P0 场景设计测试用例`
|
|
247
|
+
- `帮我检查 S01 的测试覆盖度`
|