
摘要 单元测试只是起点。真正的质量保障,在于 **“一段代码变更,如何精准触发上下游功能回归”**。 本文提出一种 可落地的 AI 白盒功能测试方案: ✅ 构建结构化接口知识库(含功能描述、调用链、业务规则) ✅ 在 MR 合并时,自动解析新增逻辑(如
memberRpcService.getMemberByPhoneNo) ✅ 智能推导: - 新分支的正向/异常场景 - 老路径的回归范围 - 上下游受影响的功能接口 ✅ 输出可执行的功能测试 Case(含接口 + UI 步骤) 方案已在某金融级钱包系统验证,**回归遗漏率下降 62%**。
你是否经历过:
根本原因:代码变更与功能语义之间存在巨大鸿沟。
而解决之道,是让 AI **理解“代码做了什么” + “业务需要什么”**。
我们为每个接口定义标准化元数据(YAML 示例):
# welfare_card_info.yaml
interface:
full_name: com.test.wallet.order.controller.WelfareCardCtrl#info
name: 福利卡详情查询
description: |
用户进入福利卡页面时,返回卡信息、使用规则、是否需要验证码等。
input_params:
- phoneNo: string, 必填, 用户手机号
output_fields:
- needCaptcha: boolean, 是否需要图形验证码
business_rules:
- "若用户是已注册会员,则 needCaptcha = false"
- "新用户或未绑定手机用户,needCaptcha = true"
upstream_calls:
- memberRpcService.getMemberByPhoneNo
- cardRuleService.getRules
downstream_consumers:
- H5 /welfare/card 页面
- 小程序 card-detail 组件
💡 关键:知识库不仅记录“接口怎么调”,更记录“业务为什么这样设计”。
当 MR 提交以下代码:
MemberDto member = memberRpcService.getMemberByPhoneNo(PhoneUtil.format(phoneNo));
if (member != null) {
offsitePhoneInfo.setNeedCaptcha(false);
}
AI 引擎执行三步分析:
memberRpcService.getMemberByPhoneNophoneNo 是已注册会员 → needCaptcha=falsePhoneUtil.format 抛异常)member == null 时,needCaptcha 应仍为 trueWelfareCardCtrl#info 的入口(H5、小程序)needCaptcha 决定是否弹验证码基于上述分析,AI 输出两类 Case:
表格
类型 | 测试场景 | 接口请求 | 预期响应 | 关联 UI 步骤 |
|---|---|---|---|---|
正向 | 已注册会员查询福利卡 | GET /welfare/card?phoneNo=13800138000 | {"needCaptcha": false} | 1. 输入会员手机号2. 进入页面不弹验证码 |
异常 | 手机号格式错误 | GET /welfare/card?phoneNo=138abc | 返回 400 错误 | 1. 输入非法手机号2. 提示“手机号格式错误” |
容错 | 会员服务不可用 | Mock memberRpcService 超时 | {"needCaptcha": true} | 1. 服务降级2. 仍要求输入验证码 |
表格
场景 | 说明 | 验证点 |
|---|---|---|
新用户 | 未注册手机号 | needCaptcha 必须为 true |
空手机号 | phoneNo=null | 接口应返回错误,不触发 RPC |
历史兼容 | 老版本 APP 调用 | 响应结构不变,字段兼容 |
📌 输出形式:可直接导入 TestRail / Xray,或生成 Playwright 脚本。

你是一名资深 QA,请基于以下信息生成测试场景:
【被修改接口】
名称:WelfareCardCtrl#info
原规则:needCaptcha 默认为 true
【新增代码】
if (memberRpcService.getMemberByPhoneNo(phone) != null) {
needCaptcha = false;
}
【memberRpcService.getMemberByPhoneNo 功能】
- 输入:格式化手机号
- 输出:MemberDto 或 null
- 异常:手机号非法时抛 IllegalArgumentException
请输出:
1. 新增的正向/异常场景
2. 必须回归的老路径
3. 受影响的前端页面
指标 | 实施前 | 实施后 | 提升 |
|---|---|---|---|
回归遗漏 Bug 数 | 12/月 | 4.5/月 | ↓ 62% |
测试设计耗时 | 4h/MR | 1h/MR | ↓ 75% |
新功能覆盖完整性 | 70% | 95% | ↑ 25% |
💬 开发反馈: “现在提 MR,AI 自动告诉我‘你要测这 3 个场景’,再也不用担心漏测了。”
不是等代码写完再想怎么测, 而是在代码变更的瞬间,测试 already there。
通过 接口知识库 + AI 语义推理,我们正在将这一愿景变为现实。
**你的下一次 MR,能否自带“精准回归清单”**? 答案,就在你的知识库与 AI 引擎之中。
技术栈:Java AST + Neo4j + Qwen + Playwright 开源参考:
立即行动: 1️⃣ 为你的核心接口补充 YAML 元数据 2️⃣ 在 CI 中加入 Diff 解析脚本 3️⃣ 用 LLM 生成第一个智能回归清单