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

跟提BUG机器人的区别
有小伙伴可能会问,这跟提交Bug的机器人没什么区别
其实对于自动提Bug的这种场景,早在几年前团队内就利用机器人的形式实现了(如钉钉、飞书、如流机器人等),通过@机器人的形式去提交Bug标题和截图,但机器人和Skill提交方式有明显区别,下面是流程对比
传统提 Bug 机器人(钉钉/飞书/Slack Bot)
传统机器人的典型流程:
- 你在群里@机器人,触发一个表单
- 表单里有一堆下拉框让你选:优先级?严重程度?所属端?
- 你手动填完,机器人帮你调 API 提交
本质上就是把「在网页上填表」变成了「在聊天窗口填表」。表单一个字段都少不了,你只是换了个地方填而已。
所以这种方式仍然存在明显的弊端
- 基于规则,无法自动区分端,在提交Bug的时候,需要人工选择所属端,IOS端/安卓端/服务端/前端等
- 无法自动分配到开发人员,还需要人工到Bug管理平台上修改
- 无法自动填写必填字段,还需要到Bug管理平台上人工修改
- Bug描述无法自动扩写,比如优化标题,复现步骤,期望结果
yunxiao-bug Skill 的做法
我这个工具不需要你填任何表单。它的核心逻辑是:
AI 根据你的一句自然语言描述,自动推断出所有字段。
比如你说"安卓端搜索页面样式错乱",AI 会推断:
- 所属端 → 安卓(关键词"安卓端")
- Bug类型 → UI设计问题(关键词"样式错乱")
- 优先级 → 低(体验/样式问题)
- 严重程度 → 4-轻微
- 负责人 → 自动分配给安卓开发
你说"IOS端点击登录按钮崩溃",AI 会推断:
- 所属端 → iOS(关键词"iOS端")
- Bug类型 → 程序问题(关键词"崩溃")
- 优先级 → 高(功能完全不可用)
- 严重程度 → 2-严重
- 负责人 → 自动分配给 iOS 开发
AI加载了这个Skill就是有经验的QA,他能根据自然语言的Bug描述进行语义理解,而不是像传统机器人是个表格搬运工,单纯进行模版填充
yunxiao-bug Skill我已经放在测开学习圈里面了,欢迎感兴趣的同学进圈获取
实现原理:三层架构
yunxiao-bug 的实现分三层:
第一层:Skill 定义(SKILL.md)
这是给 Claude Code 看的"说明书",定义了:
- 什么时候触发这个 Skill(用户说"提个 Bug"、“/yunxiao-bug”)
- AI 的推断规则(怎么根据描述判断所属端、Bug 类型等)
- 提交流程的完整步骤
核心在于推断规则。比如:
| 描述中的线索 | 推断为 |
|---|---|
| 接口、API、500错误、超时 | 后端 |
| 页面、样式、CSS、H5 | 前端 |
| Android、APK、安卓 | 安卓 |
| 崩溃、报错、数据错误 | 程序问题 |
| 样式错乱、视觉问题 | UI设计问题 |
| 功能完全不可用 | 优先级高、严重 |
| 体验/样式问题 | 优先级低、轻微 |
这些规则让 AI 像一个经验丰富的 QA 一样,听你说一句话就知道该怎么分类。
第二层:配置文件(config.yaml)
这是整个系统的"知识库",包含:
# 项目基本信息 (获取方式见下)
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 提交前会先读这个文件,确保所有填写的值都是合法的。
4个关键参数的获取方式:
-
Organization ID(云效组织ID):打开云效,点击头像-管理后台-基本信息,可以复制组织ID
-
Space Identifier(云效项目ID)
-
AccessKey ID和AccessKey Secret:创建方式见 https://help.aliyun.com/zh/ram/user-guide/create-a-ram-user
第三层:提交脚本(submit_bug.py)
这是实际调用云效 API 的 Python 脚本,大约 800 行代码,功能包括:
- Bug 提交:调用
CreateWorkitemV2Request创建工作项 - Bug 查看:调用
GetWorkItemInfo获取详情 - Bug 更新:调用
UpdateWorkitemField更新状态和字段 - 文件上传:自动上传截图到云效 OSS,并关联到工作项
- 字段映射:支持中文名 → identifier 的自动转换
完整工作流程
当你对 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"
全程你只说了一句话。
详细使用方法
1. 安装
# 一键安装,自动配置环境变量、Python 依赖、Claude Code 权限
bash ~/.claude/skills/yunxiao-bug/setup.sh
安装脚本会自动:
- 检测操作系统(macOS/Linux/Windows WSL)
- 配置阿里云 AK/SK 环境变量
- 创建 Python 虚拟环境并安装依赖
- 验证 API 连通性
2. 基本用法:一句话提 Bug
在 Claude Code 中直接描述 Bug 即可:
你:线上环境的虾不回消息
你:安卓端搜索页面样式错乱
你:iOS点击登录按钮直接崩溃
你:后端接口 /api/chat 返回 500
Claude 会自动推断所有字段并提交。
3. 指定额外信息
你也可以提供更多细节,AI 会据此做出更精准的推断:
你:安卓端在华为 Mate60 上,点击发送消息按钮没反应,但小米手机正常。
错误日志是 NullPointerException at MessageHandler.java:142
这时 AI 会额外填写:
- 测试环境:华为 Mate60
- 错误日志:NullPointerException at MessageHandler.java:142
- 复现步骤:在华为 Mate60 上点击发送消息按钮
4. 带截图提 Bug
你:这个页面样式有问题,截图在 /tmp/screenshot.png
除了描述图片路径,还可以拖图片到CC命令行
AI 会自动上传截图到云效并关联到工作项。
5. 查看 Bug 详情
你:/yunxiao-bug 查看 Bug XXXX-123 的详情
6. 更新 Bug 状态
你:/yunxiao-bug 把 Bug XXXX-123 标记为已修复,修复方案是重构了消息队列逻辑
如何迁移到其他平台
yunxiao-bug skill的架构是高度模块化的。如果你用的不是云效,而是 Jira、禅道、或者自研平台,迁移起来并不复杂。你需要改动的只有两层:
迁移到 Jira
需要改的:
- submit_bug.py — 替换 API 调用层
# 原来:阿里云效 SDK
from alibabacloud_devops20210625.client import Client
# 改为:Jira REST API
import requests
class JiraClient:
def __init__(self, base_url, email, api_token):
self.base_url = base_url
self.auth = (email, api_token)
def create_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/
- config.yaml — 改为 Jira 项目配置
# 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"
- SKILL.md — 基本不用改。AI 推断规则是平台无关的,只需要把命令示例改成对应参数格式。
迁移到禅道
需要改的:
- submit_bug.py — 使用禅道 REST API
import requests
class ZentaoClient:
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
})
def create_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
- config.yaml — 改为禅道配置
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 问题、优先级低、应该分配给安卓开发。这一层完全不用改。
不只是提 Bug
yunxiao-bug 只是整个 AI QA 流水线的一个环节。在我们的实践中,它跟其他 Skill 组成了完整的闭环:
- auto-test:AI 自动跑测试,发现 Bug
- yunxiao-bug:AI 自动把 Bug 提到云效
- yunxiao-autofix:AI 自动修复 Bug、提交 MR、回写云效
从发现 Bug 到修复 Bug,全程 AI 驱动,人只需要做最后的 Code Review。
PS:auto-test和yunxiao-autofix Skill目前还在调试中,等调试落地后,再来分享,欢迎持续关注我
如果你也想让 AI 帮你提 Bug,可以参考 yunxiao-bug 的实现,迁移到你自己的项目管理平台。核心代码量不到 1000 行,迁移工作量大概 1-2 天
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)