|
| 1 | +--- |
| 2 | +title: AI 能把接口自动化做到哪一步? |
| 3 | +description: AI 做接口自动化测试的五个阶段各自解决什么问题、遵循什么原则、产出什么,以及 AI 与人在其中各自承担的部分。 |
| 4 | +published: 2026-09-19 |
| 5 | +tags: [接口测试, 自动化测试, 测试方法论, AI自动化] |
| 6 | +category: 原创 |
| 7 | +draft: false |
| 8 | + |
| 9 | +--- |
| 10 | + |
| 11 | +AI 做接口自动化测试,工作流可以拆成五个阶段: |
| 12 | + |
| 13 | +> **探索 → 设计 → 计划 → 执行 → 自愈** |
| 14 | +
|
| 15 | +上一阶段的产出就是下一阶段的输入,每个阶段产出的每一条结论,都要能追回到它的来源。 |
| 16 | + |
| 17 | +| 阶段 | 回答的问题 | 产出 | |
| 18 | +| ---- | -------------------------- | ---------------------------------- | |
| 19 | +| 探索 | 有哪些接口、它们怎么连 | 接口清单、依赖关系、待确认清单 | |
| 20 | +| 设计 | 这一轮验证什么、到什么程度 | 测试策略 | |
| 21 | +| 计划 | 这些验证怎么落成安排 | 结构化用例(含数据规格与顺序约束) | |
| 22 | +| 执行 | 跑出来的是不是真的 | 脚本、执行报告 | |
| 23 | +| 自愈 | 失败之后怎么办 | 修复后的测试 | |
| 24 | + |
| 25 | +--- |
| 26 | + |
| 27 | +## 一、探索:整理出接口清单与依赖关系 |
| 28 | + |
| 29 | +探索阶段要回答的是:有哪些接口,它们怎么连。做法是把散落的资料汇总成结构化的接口清单。 |
| 30 | + |
| 31 | +### 汇总资料 |
| 32 | + |
| 33 | +接口资料通常散落在五处:契约文件(可机器校验的形式化描述)、说明文档、变更记录、历史缺陷,以及同事随手留下的请求示例。汇总之后要把它整理成结构化的接口描述——每个接口的方法、路径、参数、请求体、响应和认证方式。 |
| 34 | + |
| 35 | +汇总时有两件事要守住: |
| 36 | + |
| 37 | +- **标注来源**:每条结论是来自说明文档、来自契约文件,还是由材料推断得出,要分得清楚。 |
| 38 | +- **保留空缺**:材料里查不到的信息,列成待确认清单,挂起待核实。 |
| 39 | + |
| 40 | +### 分清项目事实与模型推测 |
| 41 | + |
| 42 | +AI 见过很多系统,会依据经验补全资料里缺失的部分。这类补全要与项目事实分开标注,否则后面的测试就建立在假设上了。待确认清单把还不知道的部分显式留下来,留待核实。 |
| 43 | + |
| 44 | +### 确认规范版本 |
| 45 | + |
| 46 | +上面说的契约文件,遵循的是一套接口描述规范,而这套规范有不同版本,语法和字段位置各不相同,解析之前先确认版本。版本信息连同它的来源,一并记入接口清单。 |
| 47 | + |
| 48 | +### 梳理依赖 |
| 49 | + |
| 50 | +接口很少是孤立的。常见的依赖有五类: |
| 51 | + |
| 52 | +- **鉴权**:需要先登录换取凭证 |
| 53 | +- **数据接力**:需要上游接口返回的标识才能调用 |
| 54 | +- **强顺序业务**:必须按业务顺序执行 |
| 55 | +- **开关与租户**:不同配置下行为不同 |
| 56 | +- **延迟可见**:写入之后要等一段时间才能查到,验证要轮询到目标状态出现或超时 |
| 57 | + |
| 58 | +前四类决定调用先后与数据传递方式;开关与租户不影响顺序,它影响的是同一接口在不同配置下的期望值。 |
| 59 | + |
| 60 | +探索阶段把这些整理成一份接口依赖关系清单,记录每对接口之间的关系与传递的字段,作为计划阶段排顺序的候选输入。 |
| 61 | + |
| 62 | +**产出**:结构化接口清单、接口依赖关系清单、待确认问题清单。 |
| 63 | + |
| 64 | +--- |
| 65 | + |
| 66 | +## 二、设计:决定验证什么、到什么程度 |
| 67 | + |
| 68 | +探索回答了"有哪些接口",设计要回答"这一轮做到什么程度"。答案定下来就是测试策略;至于这些验证怎么安排,留到计划阶段。 |
| 69 | + |
| 70 | +设计阶段先做一件事:把探索阶段留下来的待确认清单核实掉。核实不了的,写明处置口径——是阻塞相关用例,还是带标记执行。 |
| 71 | + |
| 72 | +### 范围与优先级 |
| 73 | + |
| 74 | +设计阶段先定两件事:这次测哪些接口,以及先测哪些。 |
| 75 | + |
| 76 | +排优先级看三件事:会不会挡住发布,要不要每次回归,断了之后损失最大的是哪一环。 |
| 77 | + |
| 78 | +AI 负责把模块、接口、场景的清单列成候选,人负责决定先测哪些。 |
| 79 | + |
| 80 | +### 覆盖层次 |
| 81 | + |
| 82 | +范围定下来之后,按几个层次各过一遍,检查有没有整类场景被漏掉: |
| 83 | + |
| 84 | +- **主路径**:正常流程能不能走通 |
| 85 | +- **边界值**:参数取到契约允许的上下边界时,接口如何回应;越界一档的期望是拒绝,归入下一类 |
| 86 | +- **拒绝场景**:协议不合法、业务规则不允许的请求,有没有被正确拒绝 |
| 87 | +- **基础观测**:响应时间在什么量级 |
| 88 | +- **低成本安全项**:未授权、越权这类基础检查,成本低,顺手补上 |
| 89 | + |
| 90 | +这几层是一张查漏用的清单,各层比例由业务风险决定。并发扣库存、重复提交这类场景不在这几层之内,需要另外补上。 |
| 91 | + |
| 92 | +### 期望值 |
| 93 | + |
| 94 | +期望值要回答的是:请求发出去之后,什么样的返回才算对。它是一条用例里最难定的一半——发什么请求照着接口清单抄一遍就有,期望什么样的返回没有现成的地方可抄。 |
| 95 | + |
| 96 | +定期望值时按顺序找依据:契约文件写明的以契约为准,说明文档写明的以文档为准,业务规则明确的以规则为准。同一接口在不同配置下期望不同,差异按配置分别记录。三者都没有的,记入待确认清单并挂起。 |
| 97 | + |
| 98 | +### 断言粒度 |
| 99 | + |
| 100 | +断言分层写: |
| 101 | + |
| 102 | +- **协议层**:状态码与响应格式 |
| 103 | +- **结构层**:关键字段是否存在且类型正确 |
| 104 | +- **业务层**:结果是否符合业务规则 |
| 105 | +- **链路层**:上游接口返回的数据能否被下游接口正常使用。这一层只在跨接口的场景用例里出现;上游失败时,下游用例应当跳过 |
| 106 | + |
| 107 | +断言只写到依据链上明确承诺的那一层:只断言其中声明为必填的字段,以及业务规则约定的值。可选字段、扩展字段、字段顺序,以及时间戳的具体取值,都不作断言对象。 |
| 108 | + |
| 109 | +**产出**:测试策略(范围与优先级、覆盖层次、期望值、断言粒度)。 |
| 110 | + |
| 111 | +--- |
| 112 | + |
| 113 | +## 三、计划:把策略展开成用例 |
| 114 | + |
| 115 | +探索产出的接口清单和依赖关系,加上设计定下的测试策略,到这一步要变成可以逐条执行的用例。 |
| 116 | + |
| 117 | +### 结构化用例 |
| 118 | + |
| 119 | +把策略展开成一条条用例,每条说明调用哪个接口、传什么数据、期望什么结果、这个期望的依据,需要哪些前置条件,并带上自己的编号。 |
| 120 | + |
| 121 | +这个形态是可评审的结构化数据,下游代码环节直接消费,返工量小得多。 |
| 122 | + |
| 123 | +### 测试数据 |
| 124 | + |
| 125 | +数据按用途分两类:正常数据用于验证主路径,边界数据用于验证契约允许范围的临界值。 |
| 126 | + |
| 127 | +计划阶段定下的是**数据规格**:字段约束、唯一性、清理方式、来源。具体取值在执行时生成。 |
| 128 | + |
| 129 | +数据管理有三条通用原则: |
| 130 | + |
| 131 | +- 写入型测试使用唯一数据,避免重复运行与并行运行相互干扰 |
| 132 | +- 每条写入的数据配一个清理动作,另有一套按前缀批量回收的兜底清理,不依赖用例正常退出 |
| 133 | +- 账号、凭证和环境地址通过环境变量提供,不写进用例 |
| 134 | + |
| 135 | +### 执行顺序 |
| 136 | + |
| 137 | +顺序主要从探索阶段的依赖结构推导: |
| 138 | + |
| 139 | +- 图上没有相连的接口归入同一批。图上无连接只是必要条件——能不能真的并行,还要看它们是否共用同一份可变数据,比如库存、余额、账号、全局开关 |
| 140 | +- 有依赖的优先用前置数据构造消除;确实打断不了的,显式标记为顺序执行,并在失败时跳过后续 |
| 141 | +- 写入后延迟可见的接口,额外带上轮询与超时条件 |
| 142 | + |
| 143 | +**产出**:结构化用例——每条用例连同它的数据规格与顺序约束一并确定,进入执行阶段后可以直接照着写代码。 |
| 144 | + |
| 145 | +--- |
| 146 | + |
| 147 | +## 四、执行:生成脚本并取得证据 |
| 148 | + |
| 149 | +计划产出的用例还不能跑。执行阶段把它变成脚本,跑出结果。 |
| 150 | + |
| 151 | +### 从用例到脚本 |
| 152 | + |
| 153 | +转换的主体可以机械化,真正需要安排的是公共部分:环境地址、超时这类配置从环境变量读取,认证、数据生成这类每条用例都要用的逻辑集中管理。断言按设计阶段定下的层级写。 |
| 154 | + |
| 155 | +此外,每条用例保留自己的编号,报告里的结果才能回溯到计划阶段的用例。 |
| 156 | + |
| 157 | +### 运行前的准入检查 |
| 158 | + |
| 159 | +跑之前先做准入检查:服务可达、账号有效、接口已部署、当前环境允许写数据。这四件事只能在真实运行中确认。任何一项不通过,整批终止,标记为环境阻塞,不生成用例级报告,不进入自愈。 |
| 160 | + |
| 161 | +准入通过之后,按计划阶段确定的顺序执行。 |
| 162 | + |
| 163 | +### 报告解读 |
| 164 | + |
| 165 | +运行留下的证据汇总成报告。报告要能回答两个问题:这条结果对应哪一条用例,失败时的现场是什么样。因此每条记录包含: |
| 166 | + |
| 167 | +- 用例编号与名称 |
| 168 | +- 调用的接口,以及该用例的期望值及其依据 |
| 169 | +- 通过/失败状态 |
| 170 | +- 失败时的请求、响应、状态码与运行环境 |
| 171 | + |
| 172 | +请求与响应里的凭据和令牌,在落盘之前先脱敏。自愈从这份报告取用证据,不再另建留存路径。 |
| 173 | + |
| 174 | +**产出**:测试脚本、执行报告。 |
| 175 | + |
| 176 | +--- |
| 177 | + |
| 178 | +## 五、自愈:从失败归因到自动修复 |
| 179 | + |
| 180 | +报告里的失败,一部分是被测系统真的变了,一部分是测试自己写错了。自愈的做法是先归因,再决定改什么。 |
| 181 | + |
| 182 | +### 失败分类 |
| 183 | + |
| 184 | +常见的失败现象有几类,每类的原因和修复方向都不同: |
| 185 | + |
| 186 | +| 现象 | 常见原因 | 修复方向 | |
| 187 | +| ---------------------- | ---------------------------------- | -------------------- | |
| 188 | +| 响应结构和预期对不上 | 字段改名、嵌套层级变了 | 改断言或解析方式 | |
| 189 | +| 认证类拒绝 | 凭证过期、请求头名称不对、权限不足 | 刷新凭证、改正请求头 | |
| 190 | +| 路径类失败 | 路径变了、版本前缀变了、卡在网关 | 改地址或路径拼接 | |
| 191 | +| 状态码正常但业务码不对 | 产品改了规则 | 更新期望值 | |
| 192 | +| 请求体校验不通过 | 数据不符合契约 | 改测试数据或边界值 | |
| 193 | + |
| 194 | +现象与原因是一对多:业务码不对,可能是产品改了规则,也可能是上一轮遗留数据、期望值本身写错、环境开关没开。期望值的改动以已确认的变更为前提;证据不足以区分时,标记为待人工判断。 |
| 195 | + |
| 196 | +### 自动修复流程 |
| 197 | + |
| 198 | +分类定下来,修复方向也就定了。自动修复分三步: |
| 199 | + |
| 200 | +1. **捕获失败信息**:把失败时的请求、响应、状态码和运行环境一起留存下来。证据在执行阶段已经脱敏落盘,这里直接引用。 |
| 201 | +2. **生成修复补丁**:按失败类别给出对应的改动方案,连同判断依据一起记下来——判定为路径类失败,补丁就是调整地址或路径拼接。改动涉及期望值或核心断言的,补丁以待确认形式提交,不直接应用。 |
| 202 | +3. **应用并复跑**:可直接应用的补丁应用后,把这条用例重新跑一遍,跑通了才算修复完成。复跑走执行阶段的同一套流程与报告。 |
| 203 | + |
| 204 | +### 修复纪律 |
| 205 | + |
| 206 | +- **改动从局部开始**:配置、路径拼接、数据唯一性、认证获取、等待逻辑。这几处覆盖了大部分失败;框架和核心断言不在这批改动范围内。 |
| 207 | +- **关键期望值的更新以已确认的变更为前提**:响应少了一个字段,先确认是契约变了,还是产品缺陷。 |
| 208 | +- **该转人工的时候转人工**:同一用例连续失败达到预设次数,或者补丁会改变核心业务断言。当现有证据分不清"产品有缺陷"和"测试写错了"的时候,人工判断是最快的路径。 |
| 209 | + |
| 210 | +**产出**:修复后的测试——补丁回写到设计、计划、执行三处的产物上,每次回写留记录。 |
| 211 | + |
| 212 | +--- |
| 213 | + |
| 214 | +## 小结 |
| 215 | + |
| 216 | +从探索到自愈,五个阶段环环相扣,每一段的产出交给下一段当输入。这条链路上,AI 与人的分工是这样的: |
| 217 | + |
| 218 | +| AI 承担 | 人承担 | |
| 219 | +| ---------------------------- | -------------------------- | |
| 220 | +| 检索与整理材料 | 确认每个用例的期望值 | |
| 221 | +| 解析接口描述、梳理依赖关系 | 决定风险优先级 | |
| 222 | +| 批量展开候选场景 | 判断规则是否真的发生了变化 | |
| 223 | +| 翻译代码、汇总证据、提出补丁 | 对最终结论负责 | |
| 224 | + |
| 225 | +这张表划出的是 AI 目前的位置:**别指望 AI 端到端兜底,它担得起过程成本,担不起最终结论**** 单条用例从零到能跑,二十分钟的活它做掉十五分钟,人只留最后五分钟做必须由人做的判断。 |
| 226 | + |
| 227 | +它的产出因此止于一份待确认的初稿:标出的异常、展开的场景、提出的补丁,触及期望值和核心断言的部分要经过人的判断才能成立。 |
| 228 | + |
| 229 | +落到具体场景:主干链路先跑一遍,明显异常和与需求的偏差标出来,人只看这份异常清单;用例按需求生成覆盖主干的初稿,人做的是取舍与优先级确认。 |
| 230 | + |
| 231 | +人剩下的时间,都花在表格右列的那几件事上,其中最要紧的一件是确认期望值合不合理。确认期望值这件事贯穿了从设计到自愈的每一个阶段——**一套测试可不可信,最终取决于每个期望值能不能追回到它的来源。** |
0 commit comments