Files
ArtPlayer/refactor/testing.md
T

6.5 KiB
Raw Blame History

测试与验收

测试层次

浏览器验收采用连接的 @Chrome 交互检查与仓库自动回归相结合;具体操作断言、证据范围和真机边界见 多轮复盘与 npm 准入。浏览器已连接不代表播放器用例已通过。

层 内容 运行位置
单元 Emitter、配置、转换、索引、排序、选择状态、消息解析、时钟算法 保留 node:test;新工具需单独决策
生命周期 初始化失败、重复销毁、切源并发、过期响应、资源清理和 Promise 结算 可控时钟/媒体 adapter;关键流程再到真实浏览器
浏览器集成 完整播放器、插件 DOM、真实媒体、seek、字幕、鼠标/键盘/触控 Playwright Chromium/Firefox/WebKit
产物 由正常脚本构建的 tarball,UMD/AMD/global/require/ESM/legacy/i18n 隔离消费者项目,不能靠 workspace 源码链接通过
类型 正向样例、错误断言、类型推断、插件扩展、JS 用户、声明入口 明确版本的 tsc,bundler 和 Node 模块解析分别检查
设备/供应商 Safari 真机、PiP、Chromecast、IMA、模型和实际 codec 有能力的设备/外部环境,记录真实版本和限制
性能/资源 初始化、交互、帧调度、反复装卸、CPU/内存/事件资源 固定设备、媒体和测量流程,多次运行

基线与差分

优先复用仓库现有 HTML 和在线编辑器,入口清单及任务归属见 docs 页面与编辑器测试。执行前固定 prod 存储状态、实际脚本路径和构建来源;现有文档 smoke 不代替异步媒体断言。

  1. 基线产物来自 BASE-01 固定的发布版本,保存 tarball integrity、源码 SHA、工具版本和样本信息。
  2. 同一测试对旧产物和候选产物运行,比较公开结果、事件 trace、属性描述符和 DOM 状态。
  3. 不使用整个 minified bundle 的文本相等作为 API 兼容证据。
  4. 已确认缺陷使用单独用例记录“旧版本复现,候选修复”;差分例外必须有变更记录,不能一键更新全部快照掩盖回归。
  5. 接口、类型与行为三项分别验收。只有类型检查通过不能证明运行时正确。
  6. 起步先验证核心与试点,各包迁移前补齐自身发布基线。历史失败、候选回归和缺少环境分开,执行 ENG-10 的失败台账及逐模块门槛,不以全仓库初始全绿作为启动条件。

核心测试清单

  • 正常初始化、useSSR、配置错误、无容器、重复容器、初始化中途失败。
  • play/pause/toggle、自动播放拒绝、内部播放触发不产生未处理拒绝。
  • currentTime/seek、switchUrl/switchQuality、同 URL、连续切换、切换中销毁、错误重试。
  • ready/restart/destroy 次数和状态,video 原生事件转发参数及顺序。
  • 一个实例销毁两次、多个实例互斥、销毁监听器重入/抛异常、removeHtml=false。
  • 控件/设置 add/update/remove、selector 高亮、重复名称、mounted/beforeUnmount。
  • 字幕载入、失败、切换顺序、cue 数组、偏移、URL 回收。
  • fullscreen/fullscreenWeb/PiP/mini 进入退出和异常,移动端方向、手势和安全区域。
  • 热键、焦点、document 重绑、全局监听器及组件清理。
  • i18n、图标、主题、样式注入及用户 CSS 覆盖。
  • 每个内置插件:autoPlayback、autoOrientation、fastForward、lock、miniProgressBar。
  • 键盘可达性、可访问名称、设置菜单焦点、模式退出后的焦点返回和字幕可用性;保留原快捷键与自定义 DOM/CSS 用法。

此清单是验收目录;具体任务状态仍只记入 tasks.json。

媒体样本

优先复用仓库中许可明确的本地 MP4/WebM/VTT/SRT/ASS;补充短 HLS/DASH、音轨/清晰度变化、无音轨、空字幕、损坏内容、慢响应和中断样本。媒体服务支持 Range 与受控错误。不要让公共直播 URL 的可用性决定 PR 是否通过。

浏览器不能解码特定样本时,要区分浏览器/codec 能力和播放器回归。需要实际支持的路径不能静默 skip;可选能力的 skip 必须有原因,设备验收在发布清单中保持待完成。

CI 分层

触发 内容
每次 PR 固定安装、只读 lint、类型、受影响单元/生命周期、核心浏览器 smoke、受影响发布包检查
核心或共享构建改变 全部 22 包构建/类型检查,旧插件对候选核心的回归,扩展浏览器矩阵
定期或候选发布 完整浏览器组合、压力/资源、性能、外部 SDK 与真机清单
发布前 干净环境完整 CI、tarball 消费、新旧组合、文档站、回退演练

快速检查必须存在依赖映射;无法确定受影响范围时运行完整核心及生态检查,不仅按文件名选择测试。

ENG-02 先交付仓库内可执行的 CI 配置;GitHub required checks 的实际设置属于外部状态,在发布准入时核实,不能把没有仓库管理权限变成本地测试框架建设的前置阻塞。尚未迁移的包保留历史失败台账,迁移包严格验收,所有受影响公开路径的候选回归仍阻止交付。

不要在媒体测试中靠固定 sleep 等待。优先受控事件/状态条件、固定样本和故障注入;对重试、偶发失败及 trace 有明确记录。真实设备缺失不阻止无关文档/本地候选准备,但始终阻止缺证据的相关能力通过发布验收。

证据要求

每次记录命令、HEAD、运行时与浏览器版本、样本、通过/失败/跳过数、报告路径和限制。报告持久化到可追溯的 CI artifact 或仓库中适量文本摘要,不只给开发机器临时路径。不提交大型录像/媒体/trace 到源码仓库。

必要门槛:没有新增未解释的失败,没有已知合法旧调用失效,关键资源在销毁后停止增长,发布路径存在且可加载。覆盖率报告先建立真实基线,再在 ENG 阶段按模块制定分支覆盖门槛;禁止用无意义测试堆数字。

性能门槛在 BASE-06 固定设备和统计方式后登记。若候选包 gzip 大小增长超过基线 5%,或主要测量中位数退化超过 10%,作为初始审查阈值触发调查,不能以一次波动判定回归,也不能以无测量声称优化。

本计划不代表已有测试

以上新增命令、测试目录和矩阵都是待实现内容。现有测试事实及评估范围见 progress.md。