跳到主内容

测试时期 · 协同 · moo-chrome-dev-tool

报 bug,不该 靠在群里追问

在出问题的页面「一键截图标注(或录屏)→ 填一行标题 → 提交」,扩展自动把现场证据 —— 截图、录屏、网络请求、JS 报错、页面元素、环境 —— 打包上报到团队 bug 系统。开发不用再追问「你怎么操作的、请求长什么样」。

Vue 3 + TS · Chrome MV3(111+) v0.8.15 · 待上架 CWS 923 自动化用例 · 数据不出企业

待上架期间想用?从 Gitee release 下载已打包 zip(带 sha256),Chrome chrome://extensions 开发者模式「加载已解压的扩展」即可;扩展内置一键升级。

现场打包 · 一次提交直达看板
宿主页面 · MAIN world hook
fetch/XHR · JS 报错 · SPA 路由
↓ postMessage · 进缓冲前先脱敏
内容脚本 · closed shadow DOM
截图标注 · 提交弹窗 · 录制条
↓ chrome.runtime
Service Worker · 后台中枢
项目匹配 · 提交路由 · 重试队列
通用 Webhook 禅道 v2 / v1

The pain

报一条 bug 的隐性成本,一直很高

传统流程下,测试发现「按钮点了没反应」要做五件事:截图、开 DevTools 抄请求、复制错误堆栈、回忆操作路径、写一段开发能看懂的描述 —— 单条 5–15 分钟,且关键现场常常缺失,开发被迫往返追问。

替代方案 差距
手工截图 + IM 描述无请求 / 报错现场,全靠追问
商业 SaaS 报障工具数据出公司、按席位收费、对接不了内部禅道
Sentry 类被动监控抓异常不抓「人的操作意图」,测试无法主动圈问题
浏览器自带录屏 / 截图不带网络与报错上下文,仍要手工归档到工单

定位:把「人发现的问题」和「机器记录的现场」在浏览器里合流,一次提交直达 bug 看板;数据走团队自己的后端,不出企业边界。

深挖 · 报障即协作

报 bug,要的是沉淀和闭环,不是即时

这是它配合 监控云待办 真正改变协作的地方 —— 比在微信群里发截图有效得多。

在微信群里报 bug
  • 一张截图 + 口头「点了没反应」
  • 开发追问「什么请求 / 报什么错」
  • 消息被聊天淹没、翻不到
  • 没指派、没状态、不了了之
用 Chrome 扩展报障
  • 一键截图标注 / 录屏 + 自动打包现场
  • 带失败请求 / JS 报错 / DOM / 环境
  • 直达 bug 看板:优先级、指派、闭环
  • 远端状态可回查,结构化、不丢

Three steps

三步完成,人工只做该做的

现场证据是自动采的;人只负责圈出问题、说清现象。

1

在出问题的页面唤起

命中的页面右下角出现悬浮球(可拖拽、可对当前站临时隐藏);或快捷键直接来:⌘⇧B 截图报障、⌥⇧R 启动录屏。多项目命中同一网址时弹选择器。

2

圈出问题:标注 / 录屏 / 选元素

截图标注

矩形/圆/箭头/指针/文字/马赛克六工具,多色线宽可调,撤销重做;密码框自动遮挡。

30s 录屏

最长 30 秒自动停(三层保险);录制中鼠标点击显示红圈涟漪,开发看得清点了哪。

选元素

进入拾取模式,点中的元素自动生成 selector 附进报告。

3

填标题、勾现场、提交

提交弹窗里填标题/描述,请求与报错逐条勾选要带哪些;选目标服务器。禅道项目额外给出 类型/严重/优先级/指派人/模块 下拉(数据从禅道实例自动拉)。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 数月的工程

923
自动化用例

768 单测 + 155 e2e(真实 Chromium 加载扩展跑,含动态注册/注入幂等/升级链/录屏)。

31
审计修复缺陷

多轮多代理交叉 review,累计主动发现并修复 31 个真实缺陷(含数据丢失/隐私/重复建单级)。

红 → 绿回归

每个修复必配「先红后绿」测试,杜绝顺着现状写的假测试。

发版流水线

一条命令:e2e 预跑 → 构建 → 冒烟 → PII 双扫 → 打 tag → 发 release + zip + sha256。

这是这套生态的「测」

人发现的问题,在浏览器里就近圈出、打包现场、直达看板。它采的 bug 进 监控云待办,和后端/前端异常汇成一条闭环。