用 Cursor 写测试技能,明明照着教程配好了 SKILL.md,AI 就是不按套路出牌?
技能多了就“失忆”,输出格式乱七八糟,换个项目直接报废……
别急着怀疑 AI,80% 的问题都出在下面这 8 个坑里。
坑 1:技能根本不在列表里(路径/格式写错了)
典型现象:
对话框里输入“列出你当前拥有的 skills”,返回的列表找不到你写的那个技能。
AI 完全不理会你的指令,用通用方式回答。
原因:
Cursor 要求技能文件必须放在.cursor/skills/<技能文件夹>/SKILL.md,且 YAML 头格式必须严格正确。
解决:
1、确认路径
你的项目/└── .cursor/ └── skills/ └── 接口测试生成器/ ← 文件夹名随意 └── SKILL.md ← 文件名固定大写
2、检查 SKILL.md 头格式
必须这样写:
---name: 接口测试生成器description: 根据接口代码生成 pytest 测试用例---以下是你的指令...
常见错误:--- 没写全、name: 后面缺少空格、中文冒号。
3、重新加载
修改后按 Cmd/Ctrl+Shift+P → 输入 Reload Skills,或直接重启 Cursor。
坑 2:技能总是时灵时不灵(灵敏度下降)
典型现象:
技能描述里写了“当用户要求生成测试用例时触发”,但 AI 有时触发,有时不触发。
项目里技能数量超过 3 个后,AI 经常选错、漏选。
原因:
多个技能混淆了 AI 的意图识别,它要在好几份描述里做选择,再加上通用指令干扰,自然不稳。
解决:
强制点名法:对话中直接用 @技能名 指定,不依赖自动判断。
示例:
@接口测试生成器 针对 user_api.py 生成测试用例
虽然每次都要手动打一下,但 可靠性接近 100%。可以把它写进团队规范:凡是要求技能输出,必须 @技能名。
坑 3:全局技能太多,AI 聊久了就“失忆”
典型现象:
一开始技能工作正常,聊了几轮后 AI 突然回归普通模式,好像忘了自己有这个技能。
甚至开始出现错误的输出格式。
原因:
全局技能(对所有项目生效)会一直占用上下文窗口。如果你挂了 5 个全局技能,每个几百字,再加上系统 prompt,可能占据好几千 token。对话变长后,早期的技能描述就被“挤出”窗口,AI 自然忘记。
解决:
- 原则:只有“通用规范类”技能才放全局。
- 例如:“测试报告必须包含风险分析”、“所有代码示例用 Python 3.10+”。
- 项目专属技能(如针对某个接口的生成器)放在项目级 .cursor/skills/,不要全局。
- 定期清理:不常用的全局技能先删掉,用的时候再加。
坑 4:技能执行到一半就断掉或卡住
典型现象:
技能要求 AI 先分析代码、再生成用例、再输出报告。但 AI 做完分析后突然问“需要我继续吗?”或者只输出分析结果,没有后续。
原因:
技能描述中 没有明确要求“一次性完成所有步骤”,AI 理解为可以分步输出。
或者某一步的输出格式与下一步期望的输入不匹配,AI 无法自动衔接。
解决:
在技能描述开头加强制规则:
## 执行规则- 你必须一次性完成以下所有步骤,中间不得询问用户是否继续。- 步骤3的输出必须保存为 `{analysis}`,步骤4必须直接使用该变量。
如果技能超过 10 步,考虑拆成两个技能,用 → 链式调用。
坑 5:技能老是忘记你告诉它的项目规则
典型现象:
你已经在对话中说过“我们的接口返回码 0000 表示成功,其他表示失败”。
技能第一次记得,几轮对话后又开始用 HTTP 200 判断成功。
或者你要求“测试环境必须用公司内部账号”,过一会儿它就换回公共账号。
原因:
项目特定规则只存在于临时对话记忆中,早期信息会被后续内容挤走。
技能描述本身没有固化这些常量。
解决:
把项目规则直接写进 SKILL.md,不要只靠口头告知。
示例:
## 项目特定约束- 成功码校验:`response.code == "0000"`- 测试域名:`https://test-internal.example.com`- 默认超时:30 秒,不可低于 10 秒
如果规则经常变动,可以建一个名为 项目规范 的全局技能(只放常量),需要时用 @项目规范 显式引用,避免自动加载占用上下文。
坑 6:输出格式随心所欲,没法自动化解析
典型现象:
你要求“输出测试用例,格式为 JSON”,AI 有时输出 JSON,有时输出 Markdown 表格,有时还加一堆解释文字。
你想把它接到自动化工具(如上传到 TAPD),却被乱七八糟的格式卡住。
原因:
技能描述中的格式要求强制性不够,AI 理解为“建议”而非“必须”。
没有给出精确的 Schema 示例。
解决:
在技能描述中使用 “输出格式约束 + 强制示例”,并加警告语。
示例:
## 输出格式(必须严格遵守,不得添加任何额外文字)你必须输出以下结构的 JSON,不要输出代码块之外的任何内容。{ "test_cases": [ {"id": 1, "name": "登录成功", "steps": ["输入账号", "输入密码", "点击登录"]} ]}如果生成失败,输出 {"error": "失败原因"},不要自由发挥。
如果平台支持(如 OpenAI),开启 JSON Mode 或 Structured Output 会更稳。
团队内部可以用脚本校验输出是否符合预期 JSON Schema。
坑 7:换个项目,技能就失灵了
典型现象:
在项目 A 中完美运行的技能(比如“根据 Model 生成 SQL 测试语句”),复制到项目 B 的 .cursor/skills/ 下,表现完全不同——报错、乱输出、甚至拒绝执行。
原因:
技能描述中隐含了项目 A 的特有假设:绝对路径、特定文件名、目录结构、依赖库。
项目 B 没有这些,AI 执行时就抓瞎。
另外,项目 B 的其他全局技能也可能干扰意图识别。
解决:
- 技能描述要尽量抽象,基于相对路径和即时发现。
- 错误示例:"读取 api/user.py 文件"
- 正确示例:"分析当前编辑器中打开的 Python 文件中的接口定义"
- 增加前置环境检查:要求 AI 先确认必要条件,不满足则给出友好提示。
- 示例:"如果项目根目录下没有 conftest.py,请提示用户先初始化 pytest 基础配置。"
- 跨项目迁移后,先用 列出你当前拥有的skills 确认技能已加载,然后用一个最小测试验证(比如 @技能名 对当前文件做基础检查)。
坑 8:团队协作时,每个人的技能版本不一样
典型现象:
你优化了技能(增加了异常场景覆盖),推送到 Git。
队友拉取代码后,生成用例的质量还是老样子。
或者多人开发同一项目,各人本地 .cursor/skills/ 内容不同步,互相看不到对方的改进。
原因:
- cursor/skills/ 可能被 .gitignore 忽略了,没有纳入版本管理。
- Cursor 不会自动检测远程更新,队友必须手动拉取并重载。
- 队友私下又改了自己本地的版本,造成分叉。
解决:
1、将 .cursor/skills/ 纳入 Git 版本管理,并在 README 中明确:技能修改必须提交并通知团队。
2、在技能描述中添加版本号和日期,便于查询。
---name: 接口测试生成器version: 2.1.0last_updated: 2026-05-08---
团队成员可以问 AI“当前技能版本是多少”来核对。
3、建立团队更新 SOP:
- 修改者提交后,在群里发“技能 xxx 已更新至 v2.1”。
- 其他人执行 git pull,然后在 Cursor 中 Reload Skills,必要时重启编辑器。
- 用 列出你当前拥有的skills 确认版本号已更新。
别忘了 Skills 最实用的特性:边用边优化
Skills 不是一锤子买卖。你可以在对话中直接迭代:
通过以上经验,优化下 `SKILL.md` 这个技能描述,要求在测试用例中覆盖空值和超长字符串的异常校验。
AI 会输出优化后的内容,你复制替换原文件,然后 Reload Skills 或重启编辑器(避免缓存)。
几轮下来,技能就能完美贴合你的工作流。
Skills 通用框架
如果你看到比较喜欢的技能,可以提取它的技能框架,套用到其他的技能去
参考skill-creator 技能结构内容,提取技能结构与标题级骨架。要求中文输出
☑️想了解更多涨薪技能提升方法
✔️可以到公主号【Atstudy技术社区】,即可加入领取 ⬇️⬇️⬇️
转行、入门、提升、需要的各种干货资料
内含AI测试、 车载测试、AI大模型开发、BI数据分析、银行测试、游戏测试、AIGC
热门跟贴