自动提交 BUG(Jira Bug Submission)
目的
把测试执行阶段的失败用例自动转化为 Jira Bug:提取 → 查重 → 建单 → 台账。Jira 不可用时降级为本地模拟 BUG 单,演示流程绝不硬失败。
输入(固定路径)
reports/junit.xml—— 测试结果数据文件(上游产物)
执行步骤
- 提取失败用例:运行
python .claude/skills/jira-bug-submit/scripts/parse_junit.py reports/junit.xml reports/failed_cases.json- 失败用例数为 0:正常结束(无 BUG 可提),台账中注明「本次执行无失败用例」。
- 能力探测(关键):检查当前会话是否有 Jira MCP 工具(工具名以
mcp__jira__或mcp__atlassian__开头)。- 没有工具,或后续任何一次调用失败(认证失败/网络不通/项目不存在)→ 立即转入第 6 步模拟模式,绝不停摆。
- 读模板:读取
references/jira-bug-template.md,按模板组织单内容。 - 查重(强制,建单前必须执行):对每个失败用例:
- 用搜索工具执行 JQL:
project = {项目KEY} AND summary ~ "{用例名关键字}" AND status not in (Closed, Done) - 存在未关闭的同名 BUG → 跳过创建,台账标注「已存在」;不存在 → 才允许建单。
- 项目 KEY 取环境变量
JIRA_PROJECT_KEY,未设置时默认DEMO。
- 用搜索工具执行 JQL:
- 建单:按模板用创建工具建单(标题
[自动化测试] {用例可读名} 失败,描述含环境/复现步骤/期望 vs 实际/失败信息,labels=autotest)。 - 台账:
- 真实模式 → 写入
reports/jira_issues.md(表格:用例名 / Jira 单号 / 状态:新建或已存在 / 链接)。 - 模拟模式 → 写入
reports/simulated_jira_bugs.md,文件头显著标注【模拟Jira】未连接真实 Jira,BUG 单格式与真实 Jira 模板一一对应(标题/环境/步骤/期望 vs 实际/严重级别)。
- 真实模式 → 写入
输出(固定路径)
reports/failed_cases.json(中间物)reports/jira_issues.md(真实模式台账)或reports/simulated_jira_bugs.md(模拟模式台账)
质量自检
- 每个失败用例在台账中都有对应行(创建或已存在),无遗漏
- 建单前对每个用例执行了 JQL 查重(未关闭同名单不重复提交)
- 单标题含
[自动化测试]前缀与用例可读名 - 描述含期望 vs 实际(对照断言失败信息)
- 降级路径真实可用:模拟单格式与真实模板一致且显著标注【模拟Jira】
模拟模式台账模板(simulated_jira_bugs.md)
# 【模拟Jira】未连接真实 Jira,以下为本地模拟 BUG 单
> 降级原因:{能力探测结果,如「未配置 Jira MCP / 认证失败」}
> 说明:单内容与真实 Jira Bug 模板一一对应,接入真实 Jira MCP 后自动切换。
## BUG-1
- 标题:[自动化测试] {用例可读名} 失败
- 严重级别:S2
- 标签:autotest
- 环境:http://127.0.0.1:5000(本地 Flask 演示应用)
- 复现步骤:...
- 期望结果:...
- 实际结果:...
- 失败信息:...