第 18 天:实操——把 spec 变成可执行验收:写 Gherkin 场景或跑契约测试

SDD+Harness 四周学习计划 · Week 3 · Day 18

Posted by LSG on August 27, 2026

SDD + Harness 四周学习计划 · Week 3 · Day 18(工程化闭环第 4 课 / 全计划第 1 个实操日)

今日主题:实操:spec 变成可执行验收——写 Gherkin 场景(Given/When/Then)或跑契约测试

建议用时:90 分钟(实操日可稍多)| 前置:Day 5 的 Day5-spec-<功能名>.md + Day 15 四类契约 + Day 16 规范即测试

输出物:把 Day 5 spec 的验收标准转写成 ≥3 条 Gherkin 场景(或一份可跑的契约测试)+ 转写对照表


0. 一句话剧透

关键衔接日。Day 5 你写了一份 spec,验收标准已经是 Given-When-Then 的雏形;Day 16 你学了「规范即测试」——测试从规范长出来。今天把这两头接上:把 Day 5 的验收标准正式转写成 Gherkin(Given/When/Then)场景,或跑一份契约测试。从今天起,「验收」不再是一段文字,而是一段可以被 CI/CD 执行的东西。

你的 Day 5 素材就在 Day5-spec-<功能名>.md(如 Day 7 修订过,优先用 v2)。这份文件是今天的唯一输入。


1. 今日目标(学完你能做到)

  • 能写出标准 Gherkin 场景(Feature / Scenario / Given / When / Then 结构正确)
  • 能把 Day 5 spec 的主路径 + 失败路径 + 边界条件各转写成至少 1 条场景
  • 能说清「一条 AC 对应一条 Scenario」还是「一条 AC 多条 Scenario」
  • 能判断自己的场景是否可执行(没有形容词、没有歧义动作)
  • (可选)能跑通一个契约测试的最小示例

2. 学习动线(实操专用时间盒)

步骤 内容 用时
1 第 3 节:Gherkin 三要素与模板 10 分钟
2 第 4 节:从 AC 到 Scenario 的转写方法 + 范例 20 分钟
3 第 5 节:选契约测试路线时的做法 10 分钟
4 实操第 6 节:转写 ≥3 条 Gherkin 35–45 分钟
5 存盘 + 自测 10 分钟

3. Gherkin:让验收标准可执行

Gherkin 是行为驱动开发(BDD)的标准场景描述格式(已核验):Given(前置条件)→ When(操作)→ Then(预期结果)

标准结构:

1
2
3
4
5
6
7
8
9
Feature: <功能名>
  作为 <角色>
  我想要 <能力>
  以便 <价值>

  Scenario: <场景名>
    Given <前置条件>
    When <操作>
    Then <预期结果>
  • Given:初始状态(数据、环境、登录态)
  • When:用户/AI 的动作
  • Then:可观测、可断言的预期结果(带数字)

关键:Then 里出现「快速、友好、稳定」任何一个形容词,这条场景就不可执行——回到 Day 5 的翻译工具包,把它换成数字 + 判定规则。


4. 从 Day 5 的 AC 到 Gherkin:转写方法

Day 5 的验收标准长这样(以 Day 5 样张「用户头像上传」为例,别照抄,用你自己的 spec):

1
2
AC-1(主路径):Given 已登录用户选择一张 ≤5MB 的 jpg/png/webp,When 提交上传,
  Then 接口 200 且返回稳定 URL,页面刷新后头像更新,全流程 ≤3s。

转写为 Gherkin:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Feature: 用户头像上传
  作为 已登录用户
  我想要 上传一张头像
  以便 评论与资料页显示我的样子

  Scenario: 主路径上传成功
    Given 我已登录
    And 我选择一张 3MB 的 jpg 图片
    When 我提交上传
    Then 接口返回 200
    And 返回一个稳定 URL
    And 页面刷新后头像更新
    And 全流程耗时 ≤3s(4G 网络、样例集 50 张)

  Scenario: 文件超限被拒
    Given 我已登录
    And 我选择一张 6MB 的 png 图片
    When 我提交上传
    Then 接口返回 4xx
    And 返回明确错误码
    And 不落任何文件

  Scenario: 未登录被拒
    Given 我未登录
    When 我调用上传接口
    Then 返回 401
    And 不执行上传

转写三步法(记住这个套路):

  1. 抽前置:AC 里 Given 后面的状态 → 你的 Given(登录态、数据规模、输入文件)
  2. 抽动作:AC 里 When 后面的动作 → 你的 When(提交、调用、选择)
  3. 抽断言:AC 里 Then 后面的结果(含数字)→ 你的 Then(状态码、耗时、落库与否)

判断规则:一条 AC 如果只有一个「前置 + 动作 + 结果」组合,就转成 1 条 Scenario;如果一条 AC 覆盖多条路径,就拆成多条 Scenario——目标是每条 Scenario 只有一个清晰的断言场景。


5. 选契约测试路线时(可选)

如果今天想跑契约测试而不是只写 Gherkin,思路是(已核验工具):用 OpenAPI 定义接口契约 → 契约测试校验实现是否符合契约;没有真实服务时用 Mock Server 按契约生成模拟服务。数据契约侧可用 Pydantic 校验。最小实践建议:

  1. 从 Day 5 spec 挑一个接口,写一份最小 OpenAPI/JSON Schema(数据契约);
  2. 用工具生成校验(Pydantic 或 OpenAPI Generator 任一即可;环境装不了就标「待核验」并记录);
  3. 跑通「合法输入过、非法输入拒」两个断言即算完成。

环境受限时不用强求:把 Gherkin 写好本身就是 Day 20 的验收证据,契约测试可在 Day 20 一并补。


6. 今日实操(约 60–80 分钟)

Step 1 取出 Day 5 spec(5 分钟)

找到你的 Day5-spec-<功能名>.md(如没有,用 Day 7 修订的 v2)。

Step 2 挑 3 条验收(10 分钟)

必须覆盖三类:

  • 主路径成功 1 条(如 AC-1)
  • 失败/异常路径 1 条(如 AC-3 非法输入)
  • 边界条件 1 条(如 AC-4 未登录 / 并发 / 超时)

Step 3 写 Gherkin(30–40 分钟)

按第 4 节模板写 Week3-Day18-<功能名>-acceptance.feature,≥3 条 Scenario。写完逐条自检:

  • Given 有没有写清初始状态?
  • When 是不是单一动作?
  • Then 有没有数字/判定规则?零形容词?
  • 每条场景能对应回 Day 5 的哪条 AC?

Step 4 填转写对照表(10 分钟)

Day 5 AC 编号 对应 Scenario 转写时我改动/补充了什么
AC-1 主路径上传成功 补了样例大小(3MB)
AC-3 文件超限被拒 补了「不落任何文件」的断言

Step 5 存盘与记录(5 分钟)

文件存本目录。文末写一句:今天最卡的是把哪条 AC 转成 Given 还是 Then?(Day 21 复盘要用)


7. 自测题

  1. Gherkin 的三个关键字是什么?各自对应什么?
  2. 一条 AC 什么时候拆成多条 Scenario?
  3. Then 里出现「快速」为什么不行?怎么改?
  4. 未登录返回 401 这条验收,Given/When/Then 分别怎么写?
  5. 契约测试、Mock Server、Pydantic 各解决什么?
  6. 今天产出的 .feature 文件,Day 17 的哪道门禁可以直接消费它?

答案与提示

  1. Given(前置条件)/ When(操作)/ Then(预期结果)。
  2. 一条 AC 覆盖多条路径(成功 + 失败 + 边界)时拆成多条 Scenario,每条只有一个清晰断言。
  3. 不可执行——没有数字和判定规则。改成「≤3s(P95)」并给出基线。
  4. Given 我未登录 / When 我调用上传接口 / Then 返回 401 且不执行上传。
  5. 契约测试验实现是否符合契约;Mock Server 按契约生成模拟服务;Pydantic 做数据校验。
  6. ② 契约测试 / ③ 烟雾测试门禁(Day 18 的 Gherkin 可落成自动化验收脚本)。

延伸阅读

  • 腾讯云《SDD 规范驱动 + Harness:AI 全栈开发从「能跑」到「可控」》(规范即测试 / 契约测试工具出处):https://cloud.tencent.com/developer/article/2703349
  • CSDN《SDD 和 Harness:AI 编程的两大支柱》(Given-When-Then 场景写法回顾):https://blog.csdn.net/qq_43284469/article/details/164267908

本工作纸依据《SDD+Harness四周学习计划.md》Day 18 主题编制。整理日期:2026-09-09