用途
这是一个针对浏览器游戏的烟雾测试(Smoke Testing)工具,运行于真实无头浏览器中,用于在每次可触及游戏运行时的完成改动单元后执行一次门禁检查。它的目标是捕获模拟测试(mock)或仅空闲测试容易遗漏的环境问题和输入处理器问题。
主要能力
测试按顺序执行以下阶段:
- load(加载):通过 load 事件进行导航,导航失败即判定为立即失败。
- idle(空闲):在无任何操作的情况下等待,以发现启动过程和帧循环中的错误。
- input(输入):发送分散的指针点击、Space 与方向键敲击,以及一段短的方向键按住操作,并在其间留出等待计时器和生成逻辑的暂停。
测试工具会按阶段打印每一个错误。退出码含义:0 表示 PASS,1 表示运行时错误或加载失败,2 表示工具本身问题,例如缺少 Playwright 或参数错误。
使用方式
环境要求
- Node 18 及以上版本。
- 在被测项目中安装 Playwright 与 Chromium。脚本会从其运行所在目录解析 playwright。
- 当页面加载 CDN 资源时需要网络访问;加载失败会以控制台错误的形式呈现。
运行命令
从游戏项目目录运行:
node <skill-dir>/scripts/smoke-test.mjs path/to/index.html # 3s idle, 6s input
node <skill-dir>/scripts/smoke-test.mjs http://localhost:5173 --idle 5 --input 10
当游戏使用 ES 模块、fetch 或其他受同源限制的功能时,应通过 HTTP 提供服务。
工具自测
node scripts/smoke-test.mjs assets/fixtures/fixture-ok.html # PASS, exit 0
node scripts/smoke-test.mjs assets/fixtures/fixture-input-crash.html # FAIL, exit 1
node scripts/smoke-test.mjs assets/fixtures/fixture-input-crash.html --input 0 # PASS: idle misses the bug
适用场景
- 每个可到达游戏运行时的改动单元完成后,作为真实浏览器门禁执行一次。
- 用于发现模拟测试或仅空闲测试无法覆盖的环境与输入处理器故障。
限制
- PASS 仅表示页面已加载并经受所执行的空闲与输入路径且未报告错误。它不证明循环已启动,也不证明机制、音频、视觉效果、性能、难度或平衡性正确。
- 对于状态转换或计分公式,应改用 probing-web-game-mechanics;对于静默无操作行为,应使用专门的运行时检查进行测试。
- 通用输入计划不覆盖自定义按键,需要扩展该计划,或将那些控制项报告为未测试。
- 应将 CDN/网络错误视为失败,但在将一次不稳定的外部加载归因于游戏代码之前,应重新运行确认。