Files
ArtPlayer/refactor/testing.md
T

73 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试与验收
## 测试层次
| 层 | 内容 | 运行位置 |
| --- | --- | --- |
| 单元 | 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/内存/事件资源 | 固定设备、媒体和测量流程,多次运行 |
## 基线与差分
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](progress.md)。