从 SKILL.md 到测试工程资产,测试团队真正要补的不是 Prompt
用 Cursor、Claude Code、智能体工具写测试 Skills,很多测试开发同学都会遇到一个很尴尬的问题:
明明配置了 SKILL.md,AI 还是不按预期执行。
让它生成接口测试用例,它只写正常场景。
让它输出 JSON,它夹一堆解释文字。
刚开始还能按流程走,聊几轮之后就开始跑偏。
在项目 A 里还挺好用,换到项目 B 直接失灵。
很多人第一反应是:模型不稳定。
但从测试工程角度看,问题未必都在模型。
AI 测试 Skills 的本质,不是“写一段更长的提示词”,而是把测试团队的经验、约束、流程、输出格式和质量标准,沉淀成 AI 可以反复调用的工作流。
如果这个工作流本身不清楚,AI 自然会自由发挥。
这篇文章不讲概念,直接从测试开发真实使用场景出发,拆一拆 AI 测试 Skills 最容易踩的坑。
一、Skill 根本没有被加载
很多所谓“Skill 不生效”,第一步就错了。
不是 AI 不听话,而是它根本没加载到这个 Skill。
典型现象是:
你让 AI 列出当前可用 Skills,结果列表里没有你写的那个。
这时候继续改描述、改提示词都没意义。
项目级 Skill 通常会放在类似结构下:
your-project/
└── .cursor/
└── skills/
└── api-test-generator/
└── SKILL.md
几个地方最容易错:
.cursor 写成 cursor
skills 写成 skill
SKILL.md 写成 skill.md
技能目录嵌套过深
YAML 头格式不规范
推荐头部写法:
---
name: 接口测试用例生成器
description: 根据接口代码、接口文档或 Swagger 信息生成 pytest 测试用例,覆盖正常场景、异常场景、边界场景和断言逻辑
version: 1.0.0
last_updated: 2026-05-12
---
# 接口测试用例生成器
注意,不要用中文冒号。
错误写法:
name:接口测试用例生成器
正确写法:
name:接口测试用例生成器
这个坑很基础,但非常常见。
测试排查问题时,第一步不是怀疑系统复杂性,而是先确认基础输入有没有进入系统。
写 Skill 也是一样。
二、description 写得太虚,AI 不知道什么时候该用
很多人会这样写:
description: 当用户需要生成测试用例时使用
这句话看起来没问题,但实际触发很不稳定。
因为“生成测试用例”太宽泛了。
用户可能说:
帮我看下这个接口怎么测
也可能说:
这个登录接口异常场景补一下
还可能说:
根据 user_api.py 写 pytest
这些都和测试用例有关,但 AI 未必每次都会判断应该调用这个 Skill。
更稳的写法是:
description: 当用户要求基于接口代码、Swagger/OpenAPI 文档、接口请求示例、响应示例或业务需求描述,生成接口测试点、测试用例、pytest 自动化脚本和断言建议时使用。
这个描述比“生成测试用例”稳定得多。
它说清楚了:
输入是什么
任务是什么
输出是什么
适用边界是什么
description 不是写给人看的宣传语,而是写给模型看的触发条件。
越具体,越稳定。
三、技能名太像,多个 Skill 之间会互相打架
很多团队会同时建几个 Skill:
接口测试生成器
接口用例生成器
接口自动化生成器
API 测试助手
pytest 生成助手
这些名字看起来都合理,但放在一起就容易混淆。
AI 在判断该用哪个 Skill 时,会面临多个相似候选。
结果就是:
你本来想生成 pytest,它调用了测试点分析 Skill。
你本来想输出用例表,它直接生成了自动化代码。
你本来想做接口测试,它跑去套了通用测试报告模板。
建议 Skill 名称要区分任务边界。
比如:
接口测试点分析器
pytest 自动化用例生成器
接口测试报告生成器
缺陷复盘分析器
需求测试点评审器
不要所有 Skill 都叫“测试助手”。
“助手”这个词太泛,泛到最后就没有边界。
团队使用时,也建议显式点名。
例如:
@接口测试点分析器 分析当前接口的测试覆盖点
@pytest 自动化用例生成器 基于上面的测试点生成 pytest 代码
这样比让 AI 自己猜要稳得多。
四、Skill 只写任务,没有写角色边界
很多 Skill 一上来就写:
请根据接口代码生成测试用例。
这太薄了。
AI 不知道自己应该站在哪个角色上完成任务。
是初级测试?
是测试开发?
是自动化工程师?
是测试架构师?
是质量负责人?
不同角色输出的深度完全不同。
不推荐这样写:
你需要生成接口测试用例。
更好的写法是:
你是一名资深测试开发工程师,熟悉接口测试、pytest 自动化、业务规则分析、边界值设计、异常场景覆盖、断言设计和测试风险识别。
你的目标不是简单列出正常用例,而是帮助团队沉淀可执行、可维护、可自动化的接口测试资产。
这段话有两个作用。
第一,限定角色。
第二,限定质量目标。
测试领域里,最怕 AI 只给“看起来像测试”的内容。
真正有价值的测试输出,必须有覆盖面、断言、优先级、风险意识和可执行性。
五、流程没有闭环,执行到一半就停
很多 Skill 会写一串步骤:
1. 分析接口
2. 提取字段
3. 生成测试点
4. 输出测试用例
5. 生成 pytest 代码
但实际执行时,AI 经常做到一半就停下来:
以上是接口分析,请问是否需要我继续生成测试用例?
这对聊天没问题,但对工作流来说就是失败。
因为测试开发要的是完整产物,不是半成品。
这类 Skill 里需要加执行规则:
## 执行规则
- 必须一次性完成所有步骤,中间不得询问用户是否继续。
- 除非缺少关键输入,否则不要中断流程。
- 如果信息不足,应先基于已有信息完成可推断部分,并在最后列出缺失信息。
- 不允许只输出分析,不输出最终用例。
- 不允许只输出测试点,不输出断言建议。
这类规则一定要放在靠前位置。
越靠后的规则,越容易被弱化。
如果一个 Skill 里有十几步:
需求分析
接口分析
数据准备
用例设计
代码生成
脚本执行
结果分析
报告生成
缺陷定位
修复建议
建议拆掉。
拆成:
需求测试点分析 Skill
接口用例生成 Skill
pytest 脚本生成 Skill
测试结果分析 Skill
一个 Skill 干一类事,反而更稳定。
六、项目规则只在聊天里说,几轮后必忘
测试项目里有很多特殊规则。
例如:
业务成功码是 0000
HTTP 200 不代表业务成功
手机号必须走内部测试号段
测试环境不能访问生产域名
订单状态为 PAID 才能退款
pageSize 最大不能超过 100
很多人会在对话里告诉 AI:
我们项目成功码是 0000,你记住。
第一次它可能记住了。
几轮之后,它又开始写:
assert response.status_code == 200
这不是小问题。
因为测试用例的价值,很大程度取决于它是否理解项目规则。
规则必须固化到 Skill 里。
例如:
## 项目特定规则
### 响应判断
- HTTP 状态码 200 仅表示请求成功送达,不代表业务成功。
- 业务成功必须校验:`response.code == "0000"`。
- 业务失败必须校验:`response.code != "0000"`。
- 错误场景必须同时校验错误码和错误提示。
### 环境规则
- 默认测试环境:`https://test-internal.example.com`
- 不允许使用生产环境地址。
- 请求超时时间默认 30 秒,不得低于 10 秒。
### 数据规则
- 手机号、身份证号、银行卡号必须使用测试数据。
- 不允许在示例代码中写真实账号、真实 Token 或生产配置。
一条原则:
凡是每次都要遵守的规则,不要放在聊天里,要放进文件里。
七、只要求“生成用例”,没有定义测试覆盖标准
这是测试 Skills 最核心的坑。
很多 Skill 只写:
请生成完整测试用例。
问题是,什么叫完整?
对 AI 来说,可能包含 5 条用例就算完整。
对测试专家来说,至少要覆盖:
正常路径
异常路径
边界值
权限
状态流转
幂等性
重复提交
并发
数据一致性
错误码
降级逻辑
安全风险
性能风险
如果你不定义覆盖标准,AI 就会默认生成最常见、最省事的用例。
建议在 Skill 中加入测试覆盖矩阵:
## 测试覆盖要求
每个接口至少从以下维度设计用例:
1. 正常场景:合法参数、正常状态、预期成功。
2. 必填校验:必填字段为空、缺失、null。
3. 类型校验:字段类型错误、数组/对象结构错误。
4. 格式校验:手机号、邮箱、日期、枚举值、金额格式。
5. 长度校验:最小长度、最大长度、超长字符串。
6. 边界值:0、1、最大值、最小值、临界值。
7. 权限校验:未登录、Token 过期、角色权限不足。
8. 状态流转:当前状态是否允许执行该操作。
9. 幂等性:重复请求是否产生重复数据。
10. 并发风险:并发提交、并发修改、库存扣减、余额扣减。
11. 数据一致性:数据库状态、缓存状态、消息状态是否一致。
12. 错误处理:错误码、错误提示、异常结构是否符合规范。
这才是测试专家和普通提示词的区别。
不是让 AI “多生成几条”,而是给它一套测试设计标准。
八、输出格式没有 Schema,后续自动化根本接不住
如果你只是让 AI 输出:
请用 JSON 格式输出。
大概率会翻车。
它可能输出 JSON。
也可能输出 Markdown 代码块里的 JSON。
也可能先写一句“下面是结果”。
也可能字段名每次都不一样。
对人阅读影响不大,但对自动化接入是灾难。
比如你想把结果同步到:
TAPD
禅道
飞书表格
测试管理平台
自动化用例仓库
质量平台
格式不稳定,后面的流程就全断了。
推荐写严格 Schema:
## 输出格式要求
你必须严格输出 JSON,不得输出 Markdown、解释文字、代码块标记或额外说明。
输出结构必须符合以下格式:
{
"api_name": "接口名称",
"method": "GET | POST | PUT | DELETE",
"path": "接口路径",
"test_cases": [
{
"id": "TC001",
"title": "用例标题",
"priority": "P0 | P1 | P2",
"case_type": "normal | exception | boundary | permission | concurrency | security",
"precondition": "前置条件",
"request_data": {},
"steps": ["步骤1", "步骤2"],
"expected_result": "预期结果",
"assertions": ["断言1", "断言2"],
"automation_level": "high | medium | low"
}
],
"risks": [
{
"risk": "风险描述",
"suggestion": "建议"
}
]
}
再补失败格式:
如果无法生成,必须输出:
{
"error": "失败原因",
"missing_information": ["缺失信息1", "缺失信息2"]
}
这一步决定了 Skill 是“看着好用”,还是“真的能接入工程流程”。
九、Skill 写死项目结构,换个项目就失灵
很多 Skill 在项目 A 中好用,是因为它偷偷依赖了项目 A 的结构。
例如:
读取 src/api/user.py 文件,分析 UserAPI 类。
到了项目 B,目录可能变成:
backend/modules/user/controller.py
或者:
app/services/user_service.py
Skill 直接失效。
不要写死路径。
不推荐:
读取 api/user.py 文件。
更好的写法:
优先分析当前编辑器打开的文件。
如果当前没有打开文件,请在项目中搜索以下内容:
- Controller
- Router
- Service
- API
- Swagger
- OpenAPI
- request mapping
- route definition
不要假设固定目录结构。
这样 Skill 才能跨项目复用。
也不要写死框架。
不推荐:
根据 Flask 路由生成测试用例。
如果团队里既有 Flask,又有 FastAPI、Spring Boot、Django,这个 Skill 很快就不够用。
更好的写法:
根据当前项目实际使用的接口框架识别路由定义。可能包括但不限于 FastAPI、Flask、Django、Spring Boot、Express、NestJS。
Skill 要有适配能力,而不是只服务某一个项目。
十、没有前置检查,信息不够时 AI 就开始编
这是 AI 生成测试资产时最危险的问题之一。
输入信息不完整时,它不是说明缺什么,而是开始补全。
比如:
你只给了一个接口名,它可能编出 URL。
你只给了请求字段,它可能编出响应结构。
你没给鉴权方式,它可能默认 Bearer Token。
你没给业务规则,它可能按通用逻辑写成功失败。
这些东西看起来很顺,但放到项目里全是错的。
Skill 里必须加入前置检查:
## 前置检查
在生成测试用例前,必须先检查是否具备以下信息:
1. 接口名称;
2. 请求方法;
3. 请求路径;
4. 请求参数;
5. 参数类型;
6. 必填规则;
7. 响应结构;
8. 成功码与失败码;
9. 鉴权方式;
10. 业务状态流转;
11. 数据依赖;
12. 是否存在幂等或并发风险。
如果缺少信息,不得编造。
应在最终输出中列出缺失信息,并给出可继续生成的部分。
注意,不是让 AI 遇到信息不足就停止。
而是:
能推断的先做
不能确定的标出来
禁止编造
这才符合测试工程的工作方式。
十一、没有失败策略,一失败就开始自由解释
很多 Skill 只写成功路径:
输入接口文件 → 生成测试用例
但没有写失败路径。
如果接口文件不存在怎么办?
如果无法识别框架怎么办?
如果 Swagger 不完整怎么办?
如果代码里没有响应定义怎么办?
如果项目没有 pytest 配置怎么办?
没有失败策略,AI 就会自由发挥。
推荐补失败处理规则:
## 失败处理规则
如果无法完成任务,不允许输出模糊解释,必须按以下格式说明:
1. 当前已识别的信息;
2. 当前缺失的信息;
3. 不能继续生成的原因;
4. 用户需要补充的最小信息;
5. 在信息不足情况下,仍然可以提供的参考内容。
不得编造接口路径、字段含义、业务规则或断言逻辑。
测试工作里,失败不可怕。
可怕的是失败后输出一堆看起来正确、实际无法验证的内容。
十二、全局 Skill 太多,上下文被挤爆
有些人喜欢把所有 Skill 都放全局。
结果是:
每个项目都加载
每次对话都带着
技能越多,上下文越重
刚开始还行,时间一长就开始跑偏。
适合放全局的,一般是通用规范:
代码输出风格
测试报告格式
通用安全规范
通用命名规范
通用代码评审标准
不适合放全局的,是项目特定内容:
某项目接口成功码
某项目目录结构
某项目数据库表
某项目测试账号
某项目业务状态机
某项目专属自动化封装
这些应该放项目级 Skill 或项目规则里。
一个简单原则:
跨项目都成立的,放全局。
只对当前项目成立的,放项目。
只对当前任务成立的,放对话。
这句话能解决很多上下文混乱问题。
十三、团队本地版本不一致,每个人生成结果都不一样
个人用 Skill,问题不大。
团队用 Skill,就必须管理版本。
否则会出现:
你生成的用例有异常场景
队友生成的只有正常场景
你这边输出 JSON
队友那边输出 Markdown 表格
你已经更新了成功码规则
队友还在用旧版
最后大家会误以为是 AI 不稳定。
其实是 Skill 版本根本不一致。
项目级 Skill 应该进入版本管理:
.cursor/
└── skills/
└── api-test-generator/
└── SKILL.md
不要让 .cursor/skills/ 被 .gitignore 忽略。
Skill 内写版本信息:
---
name: 接口测试用例生成器
description: 根据接口代码或接口文档生成接口测试用例
version: 2.1.0
last_updated: 2026-05-12
owner: QA Team
---
团队更新 SOP 可以这样定:
1. 修改 SKILL.md
2. 更新 version 和 last_updated
3. 用最小案例验证
4. 提交 Git
5. 在团队群通知 Skill 已更新
6. 其他成员 git pull
7. 重新加载 Skills
8. 验证当前 Skill 版本
Skill 一旦进入团队协作,就不是个人提示词。
它是测试资产。
测试资产就必须版本化。
十四、把 Skill 当 Prompt 用,没有持续迭代
很多人写完 Skill 就不动了。
然后每次输出不好,就在聊天里临时补一句:
注意要覆盖边界值。
记得输出 JSON。
不要只写正常场景。
这其实是在重复修同一个问题。
更好的做法是:
发现一次问题,就更新一次 Skill。
如果发现它漏了空值:
把“必填字段为空、null、缺失”加入测试覆盖要求。
如果发现它漏了超长字符串:
把“字段最大长度、超长字符串、特殊字符”加入边界值设计规则。
如果发现它老是用 HTTP 200 判断成功:
把“HTTP 状态码不代表业务成功,必须校验业务码”加入项目强约束。
如果发现它输出格式乱:
把输出格式改成严格 JSON Schema,不允许额外解释文字。
Skill 的价值不是一次写好。
而是越用越贴合团队。
十五、没有接入真实测试流程,最后变成玩具
这是最容易被忽视的坑。
很多团队做 Skill,只停留在:
让 AI 生成几条测试用例
然后就结束了。
这当然能提升一点效率,但很难形成真正的工程价值。
真正有价值的 Skill 应该接入流程:
需求文档
↓
需求测试点分析 Skill
↓
测试用例生成 Skill
↓
接口自动化脚本生成 Skill
↓
执行结果分析 Skill
↓
缺陷定位与复盘 Skill
↓
测试报告生成 Skill
这时候 Skill 就不是单点工具,而是测试流程的一部分。
可以沉淀的测试资产至少包括:
测试点分析规则
接口用例设计规则
自动化脚本生成规范
断言设计规范
测试数据构造规范
错误码校验规范
缺陷描述规范
测试报告结构
风险识别清单
回归测试选择策略
当这些内容都沉淀下来,AI 才不是一个“会聊天的工具”,而是开始接近测试团队的工程助手。
一个更适合测试团队的 Skill 基础模板
下面这个模板可以作为起点。
不是最终版,但比“帮我生成测试用例”稳定很多。
---
name: 接口测试用例生成器
description: 根据接口代码、Swagger/OpenAPI 文档、接口请求示例、响应示例或业务需求描述,生成接口测试点、测试用例、pytest 自动化示例和断言建议
version: 1.0.0
last_updated: 2026-05-12
owner: QA Team
---
# 接口测试用例生成器
## 角色定位
你是一名资深测试开发工程师,熟悉接口测试、pytest 自动化、边界值分析、异常场景设计、业务规则分析、断言设计和测试风险识别。
你的目标不是简单生成正常用例,而是帮助团队沉淀可执行、可维护、可自动化的接口测试资产。
## 适用场景
当用户提供以下任意内容时,应使用该技能:
- 接口代码;
- Swagger / OpenAPI 文档;
- 接口请求示例;
- 接口响应示例;
- 业务需求描述;
- 当前打开的 Controller / Service / API 文件;
- 需要补充接口测试用例或 pytest 自动化脚本。
## 执行规则
- 必须一次性完成所有步骤,中间不得询问用户是否继续。
- 不得编造不存在的接口、字段、路径、类名、依赖或业务规则。
- 如果信息不足,应基于已有信息完成可推断部分,并在最后列出缺失信息。
- 必须覆盖正常场景、异常场景、边界场景、权限场景、状态流转场景和数据一致性场景。
- 不允许只输出正常用例。
- 不允许只输出测试点,不输出断言建议。
- 输出 pytest 示例时,应优先复用项目已有封装;无法识别时,再给出通用示例。
## 前置检查
生成用例前,请先检查是否具备以下信息:
1. 接口名称;
2. 请求方法;
3. 请求路径;
4. 请求参数;
5. 参数类型;
6. 必填规则;
7. 响应结构;
8. 成功码与失败码;
9. 鉴权方式;
10. 业务状态流转;
11. 数据依赖;
12. 幂等性或并发风险。
如果缺少信息,不得编造,应在最后列出缺失项。
## 项目规则
- HTTP 200 仅表示请求成功送达,不代表业务成功。
- 业务成功必须校验响应体中的业务码。
- 默认业务成功码为:`0000`。
- 错误场景必须校验错误码和错误提示。
- 不允许使用生产环境地址。
- Token、账号、手机号、身份证号等敏感数据必须使用测试数据或脱敏数据。
## 测试覆盖要求
每个接口至少从以下维度设计测试用例:
1. 正常场景;
2. 必填字段为空;
3. 字段缺失;
4. 字段为 null;
5. 字段类型错误;
6. 字段格式错误;
7. 字段超长;
8. 字段边界值;
9. 枚举值非法;
10. 权限不足;
11. Token 为空;
12. Token 过期;
13. 当前状态不允许操作;
14. 重复提交;
15. 并发请求;
16. 数据不存在;
17. 数据已存在;
18. 错误码与错误信息校验;
19. 数据库或缓存状态校验;
20. 下游服务异常或超时。
## 输出结构
请按以下结构输出:
### 1. 接口理解
说明接口用途、请求方式、核心参数、响应结构和业务规则。
### 2. 测试点分析
按以下分类输出:
- 正常场景;
- 异常场景;
- 边界场景;
- 权限场景;
- 状态流转场景;
- 幂等与并发场景;
- 数据一致性场景。
### 3. 测试用例表
| 用例编号 | 用例标题 | 优先级 | 场景类型 | 前置条件 | 请求数据 | 操作步骤 | 预期结果 | 断言点 |
|---|---|---|---|---|---|---|---|---|
### 4. pytest 示例代码
生成可参考的 pytest 测试代码。
### 5. 断言建议
说明需要校验的内容,包括:
- HTTP 状态码;
- 业务状态码;
- 响应字段;
- 错误提示;
- 数据库状态;
- 缓存状态;
- 消息队列或异步任务结果;
- 关键副作用。
### 6. 风险提醒
指出当前接口可能遗漏的测试风险。
### 7. 缺失信息
如果输入信息不足,请列出需要用户补充的最小信息。
再往前一步:测试团队可以沉淀一组 Skills
如果只做一个“接口测试生成器”,价值有限。
更推荐测试团队按流程拆成一组 Skills。
1. 需求测试点分析 Skill
输入 PRD、需求描述、用户故事。
输出:
业务流程
测试范围
主路径
异常路径
边界条件
状态流转
风险点
需要澄清的问题
2. 接口测试用例生成 Skill
输入接口文档、Swagger、代码、请求响应示例。
输出:
接口测试点
用例表
断言建议
自动化优先级
测试数据建议
3. pytest 自动化生成 Skill
输入测试用例和项目封装。
输出:
pytest 代码
fixture 设计
参数化用例
断言封装
数据准备与清理
4. UI 自动化脚本生成 Skill
输入页面结构、业务流程、元素信息。
输出:
页面对象模型
操作步骤
定位策略
断言点
失败截图建议
5. 缺陷分析 Skill
输入失败日志、接口响应、截图、错误堆栈。
输出:
问题现象
影响范围
可能原因
复现路径
定位建议
缺陷描述
优先级建议
6. 测试报告生成 Skill
输入测试结果、失败用例、风险列表。
输出:
测试结论
覆盖范围
通过率
失败分析
遗留风险
上线建议
这才是比较完整的 AI 测试 Skills 体系。
单个 Skill 是工具。
一组 Skills 才是流程。
最后:AI 测试 Skills 真正考验的不是提示词
很多人以为,写不好 Skill 是因为不会写 Prompt。
但测试专家看这个问题,会有一个更直接的判断:
不是 Prompt 不够华丽。
是测试方法本身没有结构化。
如果团队平时就没有统一的测试覆盖标准,没有清晰的断言规范,没有稳定的测试数据策略,没有用例优先级定义,没有缺陷复盘机制,那写出来的 Skill 也只会是松散的。
AI 不会凭空帮团队建立测试体系。
它只能放大已有体系。
你的测试流程清楚,AI 就能帮你提效。
你的测试规则混乱,AI 只会把混乱变得更快。
所以,AI 测试 Skills 最值得做的事情,不是让 AI 随便生成几条用例,而是把团队的测试经验沉淀下来:
哪些场景必须测
哪些断言不能漏
哪些字段要重点关注
哪些风险需要提前识别
哪些输出必须结构化
哪些流程可以自动化衔接
当这些东西进入 SKILL.md,它就不再是一段提示词。
它变成了测试团队的工程资产。
未来测试开发的差距,可能不只是谁更会用 AI。
而是谁能把测试经验沉淀成可复用、可版本化、可协作、可接入流程的 Skills 体系。
霍格沃兹测试开发学社,是一个专注软件测试、自动化测试、人工智能测试与测试开发的技术交流社区