
大家好,我是洋子
对于一个测试工程师来说,最令人烦躁的事情是什么?我觉得不是跟开发扯皮,而是提Bug
每次提 Bug,咱们做什么?
打开阿里云效(或 Jira、禅道、自研平台等Bug管理平台),新建缺陷工作项,填标题,填描述,选优先级,选严重程度,选所属端,选所属项目,选迭代,选负责人,上传错误截图……
更让人崩溃的是,有些互联网大厂提Bug所需要的必填字段就有不下10个(纯为了统计数据),需求都还没测完,你已经累了,特别是某个需求有上百个bug的时候,提Bug都能提到手抽筋
那有没有一种可能:你用自然语言说一句话,Bug 就自动提好了?
于是,我写了一个叫 yunxiao-bug 的Skill。现在我提 Bug 是这样的,在AI工具命令行输入Bug描述:
/yunxiao-bug 线上环境的虾不回消息
然后它就自动帮我:
如果还有其他自定义字段,也可以添加配置扩展
一条命令,直接提交进阿里云效平台,完事。


在这里插入图片描述
有小伙伴可能会问,这跟提交Bug的机器人没什么区别
其实对于自动提Bug的这种场景,早在几年前团队内就利用机器人的形式实现了(如钉钉、飞书、如流机器人等),通过@机器人的形式去提交Bug标题和截图,但机器人和Skill提交方式有明显区别,下面是流程对比

传统机器人的典型流程:
本质上就是把「在网页上填表」变成了「在聊天窗口填表」。表单一个字段都少不了,你只是换了个地方填而已。
所以这种方式仍然存在明显的弊端
我这个工具不需要你填任何表单。它的核心逻辑是:
AI 根据你的一句自然语言描述,自动推断出所有字段。
比如你说"安卓端搜索页面样式错乱",AI 会推断:
- 所属端 → 安卓(关键词"安卓端")
- Bug类型 → UI设计问题(关键词"样式错乱")
- 优先级 → 低(体验/样式问题)
- 严重程度 → 4-轻微
- 负责人 → 自动分配给安卓开发
你说"IOS端点击登录按钮崩溃",AI 会推断:
- 所属端 → iOS(关键词"iOS端")
- Bug类型 → 程序问题(关键词"崩溃")
- 优先级 → 高(功能完全不可用)
- 严重程度 → 2-严重
- 负责人 → 自动分配给 iOS 开发
AI加载了这个Skill就是有经验的QA,他能根据自然语言的Bug描述进行语义理解,而不是像传统机器人是个表格搬运工,单纯进行模版填充
yunxiao-bug Skill我已经放在测开学习圈里面了,感兴趣的同学欢迎进圈获取,也可以根据下面的原理介绍自行实现Skill
yunxiao-bug 的实现分三层:
这是给 Claude Code 看的"说明书",定义了:
核心在于推断规则。比如:
描述中的线索 | 推断为 |
|---|---|
接口、API、500错误、超时 | 后端 |
页面、样式、CSS、H5 | 前端 |
Android、APK、安卓 | 安卓 |
崩溃、报错、数据错误 | 程序问题 |
样式错乱、视觉问题 | UI设计问题 |
功能完全不可用 | 优先级高、严重 |
体验/样式问题 | 优先级低、轻微 |
这些规则让 AI 像一个经验丰富的 QA 一样,听你说一句话就知道该怎么分类。
这是整个系统的"知识库",包含:
# 项目基本信息 (获取方式见下)
organization_id:"xxxxxx"
space_identifier:"xxxxxx"
# 默认值
defaults:
priority:"中"
severity:"3-一般"
assigned_to:"AI测试员工"
sprint:"UniClaw_V1.0"
# 按所属端自动分配负责人
assigned_to_by_platform:
安卓:"唐xx"
IOS:"聂xx"
后端:"李x"
前端:"胡x"
# 所有自定义字段的定义和可选值
field_definitions:
所属端:
options:[其他,算法,后端,前端,安卓,IOS,Windows,MAC]
Bug类型:
options:[程序问题,需求问题,UI设计问题]
发现方式:
options:[AI自动化测试,用户反馈,手工测试,...]
# ... 20+ 个自定义字段
这个文件是项目特定的。不同项目的字段、选项、负责人都不同。AI 提交前会先读这个文件,确保所有填写的值都是合法的,可以让AI修改成自己的项目配置。
4个关键参数的获取方式:
Organization ID (云效组织ID):打开云效,点击头像-管理后台-基本信息,可以复制组织ID
Space Identifier (云效项目ID)
AccessKey ID 和 AccessKey Secret :创建方式见 https://help.aliyun.com/zh/ram/user-guide/create-a-ram-user
这是实际调用云效 API 的 Python 脚本,大约 800 行代码,功能包括:
CreateWorkitemV2Request 创建工作项GetWorkItemInfo 获取详情UpdateWorkitemField 更新状态和字段当你对 Claude Code(Cursor,CodeX等其他AI编程工具也支持) 提交Bug描述"线上环境的虾不回消息",背后发生了什么:
用户输入: "线上环境的虾不回消息"
↓
Step 1: Claude Code 识别意图,触发 yunxiao-bug Skill
↓
Step 2: AI 读取 config.yaml,获取所有可用字段和选项
↓
Step 3: AI 语义分析,推断各字段值
- 所属端 → 后端
- 所属项目 → 智能体
- Bug类型 → 程序问题
- 优先级 → 高
- 严重程度 → 2-严重
- 发现方式 → 用户反馈
↓
Step 4: AI 查找负责人映射
- 所属端=后端 → 负责人=李四
↓
Step 5: 组装命令并执行
submit_bug.py submit \
--subject "线上环境的虾不回消息" \
--priority "高" \
--severity "2-严重" \
--assigned-to "李四的accountId" \
--field "所属端=后端" \
--field "所属项目=智能体" \
--field "Bug类型=程序问题" \
--field "发现方式=用户反馈"
↓
Step 6: submit_bug.py 调用云效 API
- 解析中文字段名 → identifier
- 解析中文选项值 → 实际值
- 调用 CreateWorkitemV2Request
↓
Step 7: 返回结果
"Bug 创建成功! 工作项ID: xxx"
全程你只说了一句话。
# 一键安装,自动配置环境变量、Python 依赖、Claude Code 权限
bash ~/.claude/skills/yunxiao-bug/setup.sh
安装脚本会自动:
在 Claude Code 中直接描述 Bug 即可:
你:线上环境的虾不回消息
你:安卓端搜索页面样式错乱
你:iOS点击登录按钮直接崩溃
你:后端接口 /api/chat 返回 500
Claude 会自动推断所有字段并提交。
你也可以提供更多细节,AI 会据此做出更精准的推断:
你:安卓端在华为 Mate60 上,点击发送消息按钮没反应,但小米手机正常。
错误日志是 NullPointerException at MessageHandler.java:142
这时 AI 会额外填写:
你:这个页面样式有问题,截图在 /tmp/screenshot.png
除了描述图片路径,还可以拖图片到CC命令行

AI 会自动上传截图到云效并关联到工作项。
你:/yunxiao-bug 查看 Bug XXXX-123 的详情
你:/yunxiao-bug 把 Bug XXXX-123 标记为已修复,修复方案是重构了消息队列逻辑
yunxiao-bug skill的架构是高度模块化的。如果你用的不是云效,而是 Jira、禅道、或者自研平台,迁移起来并不复杂。你需要改动的只有两层:
需要改的:
# 原来:阿里云效 SDK
from alibabacloud_devops20210625.client import Client
# 改为:Jira REST API
import requests
classJiraClient:
def__init__(self, base_url, email, api_token):
self.base_url = base_url
self.auth = (email, api_token)
defcreate_issue(self, project_key, summary, description, **fields):
payload = {
"fields": {
"project": {"key": project_key},
"summary": summary,
"description": description,
"issuetype": {"name": "Bug"},
"priority": {"name": fields.get("priority", "Medium")},
"assignee": {"accountId": fields.get("assignee")},
# 自定义字段
**{k: v for k, v in fields.items() if k.startswith("customfield_")}
}
}
resp = requests.post(
f"{self.base_url}/rest/api/3/issue",
json=payload, auth=self.auth
)
return resp.json()
Jira API 文档:https://developer.atlassian.com/cloud/jira/platform/rest/v3/
# Jira 配置
jira_base_url:"https://your-company.atlassian.net"
project_key:"PROJ"
defaults:
priority:"Medium"
assignee:"accountId_xxx"
# 自定义字段映射
field_definitions:
所属端:
identifier:"customfield_10001"
options:
后端:"backend"
前端:"frontend"
安卓:"android"
需要改的:
import requests
classZentaoClient:
def__init__(self, base_url, account, password):
self.base_url = base_url
self.session = requests.Session()
# 登录获取 token
self.session.post(f"{base_url}/api.php/v1/tokens", json={
"account": account, "password": password
})
defcreate_bug(self, product_id, title, **fields):
payload = {
"title": title,
"product": product_id,
"severity": fields.get("severity", 3),
"pri": fields.get("priority", 3),
"assignedTo": fields.get("assignee", ""),
"type": fields.get("bug_type", "codeerror"),
"steps": fields.get("description", ""),
# 自定义字段...
}
resp = self.session.post(
f"{self.base_url}/api.php/v1/bugs",
json=payload
)
return resp.json()
禅道 API 文档:https://www.zentao.net/book/api/setting-369.html
zentao_base_url:"https://zentao.your-company.com"
product_id:1
defaults:
severity:3# 禅道用数字 1-4
priority:3
assignee:"zhangsan"
field_definitions:
Bug类型:
identifier:"type"
options:
程序问题:"codeerror"
需求问题:"designdefect"
UI设计问题:"designchange"
如果你们公司是自研的项目管理系统,迁移思路一样——你只需要提供一套 CRUD API:
必需 API:
POST /api/bugs — 创建 Bug(必须)
GET /api/bugs/:id — 查看 Bug 详情
PUT /api/bugs/:id — 更新 Bug 状态和字段
POST /api/bugs/:id/files — 上传附件
可选 API:
GET /api/projects — 获取项目列表
GET /api/users — 获取用户列表
GET /api/fields — 获取自定义字段定义
GET /api/sprints — 获取迭代列表
然后在 submit_bug.py 中实现一个 Client 类来封装这些 API 调用即可。
要改的文件 | 改什么 | 工作量 |
|---|---|---|
submit_bug.py | 替换 API 调用(云效 SDK → 目标平台 API) | 中等(200-400行) |
config.yaml | 替换项目配置、字段映射、选项值 | 小(照着目标平台字段配一遍) |
SKILL.md | 基本不用改,推断规则是通用的 | 极小(改几个命令示例) |
setup.sh | 替换环境变量(AK/SK → 目标平台认证信息) | 小 |
核心洞察:这个 Skill 的价值不在 API 调用,而在 AI 推断规则。 推断规则是平台无关的——无论你用什么项目管理系统,AI 都能从"安卓端搜索页面样式错乱"推断出这是一个安卓端的 UI 问题、优先级低、应该分配给安卓开发。这一层完全不用改。
yunxiao-bug 只是整个 AI QA 流水线的一个环节。在我们的实践中,它跟其他 Skill 组成了完整的闭环:
从发现 Bug 到修复 Bug,全程 AI 驱动,人只需要做最后的 Code Review。
PS:auto-test skill目前已实现AI驱动APP自动化测试,但yunxiao-autofix Skill目前还在调试中,等调试落地后,再来分享,欢迎持续关注我