测试时期 · 协同 · moo-chrome-dev-tool
报 bug,不该
靠在群里追问
在出问题的页面「一键截图标注(或录屏)→ 填一行标题 → 提交」,扩展自动把现场证据 —— 截图、录屏、网络请求、JS 报错、页面元素、环境 —— 打包上报到团队 bug 系统。开发不用再追问「你怎么操作的、请求长什么样」。
待上架期间想用?从 Gitee release 下载已打包 zip(带 sha256),Chrome chrome://extensions 开发者模式「加载已解压的扩展」即可;扩展内置一键升级。
The pain
报一条 bug 的隐性成本,一直很高
传统流程下,测试发现「按钮点了没反应」要做五件事:截图、开 DevTools 抄请求、复制错误堆栈、回忆操作路径、写一段开发能看懂的描述 —— 单条 5–15 分钟,且关键现场常常缺失,开发被迫往返追问。
| 替代方案 | 差距 |
|---|---|
| 手工截图 + IM 描述 | 无请求 / 报错现场,全靠追问 |
| 商业 SaaS 报障工具 | 数据出公司、按席位收费、对接不了内部禅道 |
| Sentry 类被动监控 | 抓异常不抓「人的操作意图」,测试无法主动圈问题 |
| 浏览器自带录屏 / 截图 | 不带网络与报错上下文,仍要手工归档到工单 |
定位:把「人发现的问题」和「机器记录的现场」在浏览器里合流,一次提交直达 bug 看板;数据走团队自己的后端,不出企业边界。
- ✕一张截图 + 口头「点了没反应」
- ✕开发追问「什么请求 / 报什么错」
- ✕消息被聊天淹没、翻不到
- ✕没指派、没状态、不了了之
- ✓一键截图标注 / 录屏 + 自动打包现场
- ✓带失败请求 / JS 报错 / DOM / 环境
- ✓直达 bug 看板:优先级、指派、闭环
- ✓远端状态可回查,结构化、不丢
Three steps
三步完成,人工只做该做的
现场证据是自动采的;人只负责圈出问题、说清现象。
在出问题的页面唤起
命中的页面右下角出现悬浮球(可拖拽、可对当前站临时隐藏);或快捷键直接来:⌘⇧B 截图报障、⌥⇧R 启动录屏。多项目命中同一网址时弹选择器。
圈出问题:标注 / 录屏 / 选元素
矩形/圆/箭头/指针/文字/马赛克六工具,多色线宽可调,撤销重做;密码框自动遮挡。
最长 30 秒自动停(三层保险);录制中鼠标点击显示红圈涟漪,开发看得清点了哪。
进入拾取模式,点中的元素自动生成 selector 附进报告。
填标题、勾现场、提交
提交弹窗里填标题/描述,请求与报错逐条勾选要带哪些;选目标服务器。禅道项目额外给出 类型/严重/优先级/指派人/模块 下拉(数据从禅道实例自动拉)。webhook 提交前可预览最终 JSON,所见即所发;提交后回显远端单号 + 直达链接。
Auto capture
现场,是自动采的(零操作)
注入宿主页真实 JS 世界的钩子,在你点报障之前就把现场记好了。
网络请求
最近 N 条 fetch/XHR(默认 50),含 method/URL/头/体/响应/耗时/状态码;单条 body 20KB 截断防拖垮。
JS 报错
未捕获异常 + Promise rejection,带堆栈/文件/行列号;高频同错 100ms 去重防刷屏。
SPA 路由感知
hook pushState/replaceState/popstate/hashchange,单页应用内导航自动重新匹配项目,无感。
存储快照
按项目配置的白名单 key 抓 local/sessionStorage(如当前用户 id),非白名单一概不读。
环境信息
URL、UserAgent(解析成可读浏览器/系统)、视口尺寸、时间戳自动附带。
DevTools「Moo」面板
F12 里实时看请求/报错时间线、JSON 高亮搜索;不开 F12 也能用独立「工作区」浮窗。
Channels
上报通道:一层抽象,接谁都行
通道差异收口在 IssueAdapter 抽象层(submit / fetchStatus / 序列化重试)—— 未来接 GitHub/Jira 只需新增 adapter,编排层零改动。
通用 Webhook
POST 到团队自建后端;payload 模板可视化自定义({{title}}/{{image}} 等占位符,JSON 上下文自动转义);JSON / multipart 两种体 + 自定义请求头。
禅道直连
免后端开发直接建 bug 单:v2 API 优先 + v1 自动 fallback(兼容多版本/多实例 schema 方差)、401 自动重登、附件 multipart 上传、产品/模块/人员自动发现并缓存。
生态配套
配套 moo-scaffold-cloud 云端 todos/intake 直接对接,或 scaffold 自带接收接口;协议公开(两个 HTTP 接口),任何语言可自实现。
Token 走 POST body 注入(不进 URL,避免 access log / referer 残留),状态回查同样 POST 带 body token。
After submit
提交不是终点,闭环才是
报完能回查状态、能重提、失败不丢 —— 让一条 bug 真正走完生命周期。
本地历史
最近 30 条提交记录(截图压成缩略图省配额),含完整提交内容。
远端状态回查
打开历史自动同步一次,也可手刷;显示待处理/处理中/已完成/已删除。
一键重提
直接重新提交,含当初选的禅道 类型/严重/优先级/指派人 快照,不回落默认。
失败重试队列
网络错/5xx 自动入队,5 分钟周期重试(最多 5 次);90s 全局 + 60s 单条冷却防重复建单,成功自动回填状态。
工具栏图标 badge 显示 24h 内失败计数(红)/ 有新版本(蓝),让失败和升级都不被无视。
Security & privacy
装在浏览器里,更要克制设防
它能读你正在看的页面 —— 所以隐私与最小权限是贯穿性设计,不是事后补丁。
数据不出企业
所有上报只发往你自己配置的后端,扩展不内置任何第三方数据收集。
closed shadow DOM
扩展 UI(含你输入的标题/描述、截图)对宿主页脚本不可见。
消息三重校验
MAIN→ISOLATED 校验 source/origin/shape;内部消息严校 sender.id,防第三方扩展窃取伪造。
主动脱敏(进缓冲前)
请求体/头/query 的敏感字段在进入本地缓冲前就打码(默认 18 个常见 key,可增删),非 JSON 体同样覆盖。
最小权限 · 动态注册
host_permissions 为 optional(主动授权才注入),内容脚本只注入配置命中的站点,不做全站注入。
发版 PII 红线
发布流水线内置 PII 扫描(黑名单 + 手机号/邮箱/内网 IP/证件号模式),命中即中止。
Engineering quality
不是 demo,是 dogfood 数月的工程
768 单测 + 155 e2e(真实 Chromium 加载扩展跑,含动态注册/注入幂等/升级链/录屏)。
多轮多代理交叉 review,累计主动发现并修复 31 个真实缺陷(含数据丢失/隐私/重复建单级)。
红 → 绿回归
每个修复必配「先红后绿」测试,杜绝顺着现状写的假测试。
发版流水线
一条命令:e2e 预跑 → 构建 → 冒烟 → PII 双扫 → 打 tag → 发 release + zip + sha256。