从Swagger到可执行测试:基于Skills+RAG的接口用例智能生成实践

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 本文探讨AI生成接口测试用例落地难的根源:Swagger缺乏可执行上下文(如真实数据、业务规则、调用依赖)。提出“Skills+RAG”双机制方案——用Skills将用例生成拆解为参数构造、依赖处理、断言生成等原子能力;用RAG注入隐性业务规则。实战验证:订单接口用例从“语法正确却跑不通”升级为“开箱即用”,覆盖边界值与业务断言,效率提升10倍以上。

目录

一、Swagger生成了一堆代码,但用例还是得手写
二、本质是接口文档缺少“可执行的上下文”
三、核心机制:Skills拆解任务 + RAG注入隐性规则
四、实战对比:一个订单接口的两种生成方式
五、工程落地:最小可行方案与踩坑经验
六、你的接口测试用例能直接运行吗

一、Swagger生成了一堆代码,但用例还是得手写
2025年我接手一个微服务项目,Swagger文档写得整整齐齐。测试团队用Swagger Codegen生成了API客户端,然后继续手动写测试用例。

不是懒。是生成的代码只解决了“怎么调用”,没解决“用什么参数调用”和“怎么判断对错”。

一个典型场景:接口要求传userId,生成器给你生成了userId: 0。跑不通,因为0不是合法用户。测试人员得手工改成10001。接口要求传订单状态,生成器给你生成了status: "string"。也跑不通,因为枚举值只有“PAID”“UNPAID”。

到了2026年,AI生成用例的工具多起来了。但大部分还是把Swagger直接塞给大模型,出来一堆看起来像用例、实际跑不通的代码。根本原因不是模型不行,是模型看不到文档之外的东西——业务规则、数据依赖、断言经验。

二、本质是接口文档缺少“可执行的上下文”
先说清楚:Swagger(OpenAPI)是一个优秀的描述规范。它能把接口的路径、参数类型、必填属性、响应结构讲清楚。

但一个能在CI里跑通的测试用例,需要的上下文远不止这些:

合法的业务数据示例(userId必须是DB里真实存在的)
边界值规则(age范围1-120,超过400报错)
调用链路依赖(先调登录拿token,再调业务接口)
断言规则(响应里code=0时data不能为空)
这些东西,Swagger里一个都没有。测试人员写用例时,脑子里调用了两类知识:技术规范(来自Swagger)和业务经验(来自规则库、历史缺陷、领域知识)。

所以AI生成用例失败的根本原因:模型只看到了前半部分,看不到后半部分。

解决方案也不是训练一个更大的模型记住所有规则。实际可行的工程路径是:用RAG把业务规则注入,用Skills把用例生成拆解成可编排的能力单元。

三、核心机制:Skills拆解任务 + RAG注入隐性规则
我们内部跑通了一套方案。先看整体架构:

77cbe509-4d89-4463-9e00-3b29fea347ff.png

两个核心机制拆开讲。

机制一:Skills - 把“写用例”拆成可编排的原子能力

不让LLM一次生成整个测试文件。任务太复杂,模型容易出错。拆成三个独立Skill:

参数构造Skill:输入参数名、类型、约束,输出一组合法的测试数据值。对于依赖外部数据的参数,自动插入获取逻辑。
依赖链处理Skill:分析接口的前置条件,生成setup代码。比如需要登录态,它自动生成调用登录接口并提取token的代码块。
断言生成Skill:根据响应schema和业务规则,生成状态码断言、字段存在性断言、值范围断言。
每个Skill有独立的prompt模板,调用时只关注自己的职责。Skill之间通过一个简单的编排器组合。比如生成下单接口用例,流程是:依赖链Skill先获取token → 参数构造Skill生成商品ID、数量 → 断言Skill生成响应校验。

为什么这么做:拆分后每个任务足够单纯,LLM出错的概率指数级下降。而且Skill可以跨接口、跨项目复用。换一个项目,只需要换RAG里的规则库,不用改Skill。

机制二:RAG - 把“隐性规则”变成可检索的知识

业务规则怎么喂给模型?我们维护了一个规则库,每条规则是自然语言 + 对应的代码示例:

“userId参数必须是系统中已注册的用户,测试环境固定可用ID为10001、10002”
“当productId对应的商品库存为0时,响应中的code应为400,message包含'库存不足'”
“分页接口的pageSize最大100,传入101时应返回参数错误”
这些规则被向量化存入向量数据库。当LLM要生成某个接口的用例时,RAG检索器根据接口路径、参数名、甚至参数描述,召回最相关的5-10条规则,拼接到prompt里。

实测效果:以前LLM生成quantity: 0,现在生成quantity: 1(因为规则说最小值是1)。以前断言只校验HTTP 200,现在会校验data.orderId不为空。生成的用例从“语法正确但跑不通”变成了“直接可执行”。

四、实战对比:一个订单接口的两种生成方式
拿一个真实接口:POST /order/create,Swagger定义如下:

userId: int, required
productId: int, required
quantity: int, 最小值1,最大值999
couponId: int, optional
响应:orderId(string), totalPrice(decimal)

方式一:直接让LLM读Swagger生成

输出用例片段(伪代码):

def test_create_order():
resp = client.post("/order/create", json={
"userId": 123,
"productId": 456,
"quantity": 0,
"couponId": 789
})
assert resp.status_code == 200
问题:userId=123可能不存在,quantity=0违反约束,couponId=789可能无效。断言只检查200,不检查业务字段。这个用例跑不通,即使能跑通也没覆盖任何有价值的校验。

方式二:Skills+RAG生成

规则库里有:

“userId用10001,该用户已在测试环境预置”
“productId用20001,该商品库存充足”
“quantity边界值为1和999,无效值为0和1000”
“优惠券必须属于当前用户,否则接口返回410”
生成结果:

def test_create_order_success():

# 依赖链Skill自动处理登录
token = login(user_id=10001)
client.set_token(token)

resp = client.post("/order/create", json={
    "userId": 10001,
    "productId": 20001,
    "quantity": 1,
    "couponId": None
})
assert resp.status_code == 200
assert resp.json()["orderId"] isnotNone
assert resp.json()["totalPrice"] > 0

def test_create_order_quantity_boundary():
token = login(user_id=10001)
client.set_token(token)

# 边界值:999应成功
resp = client.post("/order/create", json={
    "userId": 10001,
    "productId": 20001,
    "quantity": 999,
    "couponId": None
})
assert resp.status_code == 200

# 边界值:1000应失败
resp = client.post("/order/create", json={
    "userId": 10001,
    "productId": 20001,
    "quantity": 1000,
    "couponId": None
})
assert resp.status_code == 400

def test_create_order_invalid_coupon():

# 使用不属于该用户的优惠券
...

三个用例全部可运行。参数值来自规则库,断言覆盖了业务字段,边界条件自动生成。生成时间不到1分钟,人工写至少20分钟。

五、工程落地:最小可行方案与踩坑经验
说给测试开发和效能工程师。不需要大厂资源,用开源工具就能搭。

第一步:准备Swagger + 手工规则库

Swagger从knife4j或Springfox导出JSON。规则库先用手工整理,每个接口写3-5条规则,存成markdown或txt。不用追求全面,先跑通流程。

第二步:选RAG框架 + 本地模型

推荐LlamaIndex或LangChain。模型用Qwen2-7B或ChatGLM3-6B,Ollama本地部署。规则库用chromadb或faiss做向量存储。

第三步:实现三个Skill的prompt模板

参数构造Skill的prompt核心片段:

你是测试数据生成专家。根据以下参数定义和检索到的业务规则,生成一组测试参数值。
输出JSON数组,每个元素是一组完整的参数。不要输出解释。
依赖链Skill的prompt:

分析接口的前置依赖。如果需要登录,生成获取token的代码片段。如果需要预置数据,生成对应的setup代码。
输出Python代码,不要额外说明。
第四步:编排器写一个200行的Python脚本

读取Swagger → 遍历接口 → RAG检索 → 调用三个Skill → 组装成pytest格式 → 写入文件。

踩过两个坑:

坑1:RAG召回不准。解决方案:在规则入库时增加元数据(接口路径、参数名),检索时用精确匹配+向量检索混合。
坑2:Skill输出的代码有语法错误。解决方案:增加一个校验步骤,把生成的代码丢给Python的compile()做语法检查,失败则重试一次。
这套方案一周内搭完,投入产出比很高。

六、你的接口测试用例能直接运行吗
最后问一个实际问题:

你现在的接口测试用例库,如果换一台干净的机器,没有任何手工配置的数据,能直接跑通吗?

如果不能,说明你的用例和可执行之间隔着一层手工操作。这层操作,就是可以用Skills+RAG抹掉的东西。

相关文章
|
27天前
|
JSON 人工智能 测试技术
我如何用Skills+Postman,让接口测试用例自动生成、自动维护,半年零手工更新
本文揭秘如何用Postman+大模型Skills实现接口测试用例“零手工维护”:通过自动感知OpenAPI变更、智能生成并应用Collection补丁、Git化管理+CI闭环验证,6个月未手动增删改用例。核心不是生成用例,而是让用例随代码自动同步。
|
27天前
|
人工智能 安全 前端开发
面试官问:什么是 Harness 工程?AI Agent 时代,测试人必须补上的新能力
Harness工程是AI Agent时代的“工作台”,聚焦为其构建稳定、可控、可验证的工程环境。它涵盖上下文管理、工具调用、沙箱权限、测试验证、日志观测与反馈回路,解决Agent在真实项目中因缺上下文、缺工具、缺反馈、缺边界导致的失控问题。本质是让Agent“能做事、做得对、出错可修复”。
|
27天前
|
设计模式 人工智能 JSON
Skills-first:一种全新的接口自动化测试设计模式(爆肝万字实操)
本文提出“Skills-first”测试新范式,直击AI生成用例后维护难的痛点:告别“人驱动AI”,转向“事件驱动”。通过感知层捕获变化、决策层输出结构化操作原语、执行层精准落地,实现用例自动演进。实测将接口变更响应从2小时压缩至4分钟,释放80%机械维护人力。
|
27天前
|
人工智能 自然语言处理 前端开发
Playwright + 三大AI测试智能体实战:从用例生成到自动修复全记录(附可复现命令)
团队基于Playwright打造“测试智能体”三件套:用例生成器(RAG+自然语言)、执行自愈引擎(AI定位修复)、智能断言分析器(LLM比对结果)。三者协同使Web自动化测试编写与维护成本降60%,200个场景验证有效。
|
27天前
|
人工智能 JSON 测试技术
接口自动化测试的下一个十年:从脚本到Skills,让AI学会“如何测”
本文探讨接口自动化测试的范式升级:从低效脚本维护转向AI驱动的“技能(Skills)”模式。指出脚本堆积不等于测试能力,核心在于沉淀可推理的业务规则与契约。通过三层机制(业务知识层、策略生成层、执行反馈层),实现从“执行指令”到“理解意图”的跃迁。强调测试工程师的新价值——定义“如何测”,而非写多少行代码。
|
27天前
|
人工智能 JSON 自然语言处理
接口测试遇到大模型:把“登录、下单、支付”拆解为Skills,AI自动编排执行
三个月前,某团队用40+脚本覆盖5个核心流程,却陷入组合爆炸、变更蔓延与场景难扩的“三重死法”。本文提出AI编排新范式:将登录、下单等步骤抽象为原子Skill,由大模型基于自然语言动态生成结构化执行计划(非代码),通过Skill仓库、调度器与数据总线三层架构实现灵活复用。维护成本骤降70%。
|
3月前
|
SQL 人工智能 Java
AI 时代,测试工程师的学习路线该怎么规划?
AI时代,测试工程师正从“执行者”跃升为“质量体系构建者”。本文厘清五大进阶阶段:夯实基础、突破自动化与专项测试、推进工程化、实践线上质量运营、掌握AI系统评测能力,强调能力闭环而非工具堆砌。
|
27天前
|
人工智能 JSON 测试技术
3人团队搞定500+接口:用Skills构建可复用的“测试技能库”,复用率提升80%
本文直击接口自动化测试痛点:脚本重复率高、复用率不足20%、维护成本飙升。提出“测试技能库”新范式——将校验逻辑提炼为可检索、可组合、带契约的“技能”,实现从“代码复用”到“能力复用”的跃迁。含三层架构、落地三步法与真实订单案例,助团队降本增效。
|
8天前
|
人工智能 监控 自动驾驶
Loop Engineering 实战:/goal 命令让 AI 自己写完整项目
Loop Engineering 让 AI 自己循环干活。本文用 Claude Code /goal 带你从零搭项目,跑通自动开发全流程——设定目标,循环搞定。
Loop Engineering 实战:/goal 命令让 AI 自己写完整项目
|
27天前
|
人工智能 自然语言处理 JavaScript
Playwright + AI 智能体:让Web自动化测试自己写、自己修、自己断言(附完整代码)
本文揭示AI测试Agent如何颠覆传统自动化:从“手写脚本”迈向“目标驱动闭环”。AI可自主感知DOM、推理定位、修复失败、语义化断言。登录案例对比凸显——稳定性正从“选择器”转向“语义”。工程师角色升维为测试策略设计者。
Playwright + AI 智能体:让Web自动化测试自己写、自己修、自己断言(附完整代码)