All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m2s
主要变更: - 在 StandaloneIotCardResponse 和 DeviceResponse 中添加 series_name 字段 - 在 iot_card 和 device service 中添加 loadSeriesNames 方法批量加载系列名称 - 更新相关方法以支持 series_name 的填充 其他变更: - 新增 OpenSpec 测试生成和共识锁定 skill - 新增 MCP 配置文件 - 更新 CLAUDE.md 项目规范文档 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3.5 KiB
3.5 KiB
description
| description |
|---|
| 从 Spec 的 Scenarios 和 Business Flows 自动生成验收测试和流程测试 |
从 Spec 文档自动生成两类测试:
- 验收测试(Acceptance Tests):从 Scenarios 生成,验证单 API 契约
- 流程测试(Flow Tests):从 Business Flows 生成,验证多 API 业务场景
Input: 可选指定 change 名称(如 /opsx:gen-tests add-auth)。如果省略,从上下文推断或提示选择。
Steps
-
选择 change
如果提供了名称,使用它。否则:
- 从对话上下文推断
- 如果只有一个活跃 change,自动选择
- 如果模糊,运行
openspec list --json让用户选择
-
检查 change 状态
openspec status --change "<name>" --json确认 specs artifact 已完成(
status: "done") -
读取 spec 文件
读取
openspec/changes/<change-name>/specs/*/spec.md下的所有 spec 文件。 -
解析 Scenarios
从每个 spec 文件中提取
#### Scenario:块:#### Scenario: 成功创建套餐 - **GIVEN** 用户已登录且有创建权限 - **WHEN** POST /api/admin/packages with valid data - **THEN** 返回 200 和套餐详情 -
解析 Business Flows(如果存在)
从 spec 文件中提取
### Flow:块,包含多步骤业务场景。 -
生成验收测试
输出路径:
tests/acceptance/<capability>_acceptance_test.go模板结构:
func Test{Capability}_Acceptance(t *testing.T) { env := testutils.NewIntegrationTestEnv(t) t.Run("Scenario_{name}", func(t *testing.T) { // GIVEN: ... // WHEN: ... // THEN: ... // 破坏点:... }) } -
生成流程测试
输出路径:
tests/flows/<capability>_<flow>_flow_test.go模板结构:
func TestFlow_{FlowName}(t *testing.T) { env := testutils.NewIntegrationTestEnv(t) var ( // 流程级共享状态 ) t.Run("Step1_{name}", func(t *testing.T) { // 依赖:... // 破坏点:... }) } -
运行测试验证
source .env.local && go test -v ./tests/acceptance/... ./tests/flows/... 2>&1 | head -50预期:全部 FAIL(功能未实现,证明测试有效)
如果测试 PASS:说明测试写得太弱,需要加强
Output
## 测试生成完成
**Change:** <change-name>
**来源:** specs/<capability>/spec.md
### 生成的测试文件
**验收测试** (tests/acceptance/):
- <capability>_acceptance_test.go
- Scenario_xxx
- Scenario_yyy
**流程测试** (tests/flows/):
- <capability>_<flow>_flow_test.go
- Step1_xxx
- Step2_yyy
### 验证结果
$ source .env.local && go test -v ./tests/acceptance/... ./tests/flows/...
--- FAIL: TestXxx_Acceptance (0.00s)
--- FAIL: TestXxx_Acceptance/Scenario_xxx (0.00s)
xxx_acceptance_test.go:45: 404 != 200
✓ 所有测试预期 FAIL(功能未实现)
✓ 测试生成完成
下一步: 开始实现 tasks,每完成一个功能单元运行相关测试验证
Guardrails
- 每个 Scenario 必须生成一个测试用例(不要跳过)
- 每个测试必须包含"破坏点"注释
- 流程测试的 step 必须声明依赖
- 使用 IntegrationTestEnv,不要 mock 依赖
- 测试必须在功能缺失时 FAIL(不要写永远 PASS 的测试)
- 详细模板参考:
.opencode/skills/openspec-generate-acceptance-tests/SKILL.md