摘要

用户的要求很直接:试玩时不能中途崩溃,界面测试要由软件自动完成,不靠人手点。本次建了三层测试,都驱动真实的网页会话代码。首轮:浏览器层 3 整局全部打完、0 页面错误;回放层一局 111 步全部经界面点出且每步画面一致;会话层 30 局找到两个会导致录像生成失败或 AI 回合崩溃的真问题,均已修复。三层测试只证明界面不崩、显示与 Simulator 会话一致,不证明规则与商业游戏一致。

要回答的问题

能否让程序像玩家一样从选秀一路打到终局,并在任何异常、画面停住或显示不一致时自动报错?

方法:三层测试

层 做什么 什么算失败
会话层 直接调用网页会话随机走完整局:选秀(含重抽)、布阵、战斗里快照列出的每类合法动作、AI 回合、按需预览 任何异常;快照不是严格 JSON 或阶段未知;每隔 N 步从存档重建后状态不同;终局后录像/分析没就绪
浏览器层 在独立端口启动真实服务,Playwright 驱动本机 Edge 无头打开页面,按类型加权随机点可见控件、随机悬停;AI 回合用页面时钟快进 5 秒 页面异常、控制台错误、HTTP 5xx、请求失败、画面停住(失败保存截图和 HTML)
回放层 会话层记录每步选择与画面,再让浏览器按玩家方式逐步点出同一局:选秀卡、布阵、移动/攻击(指向目标边缘选进攻方向)、开魔法书选法术点目标 每步后服务器画面(状态号、存活部队数量与位置)和记录不同;页面内存与服务器不一致;棋盘数量牌不对;界面点不出某个合法动作

默认测试只跑短局(会话层 2 局、浏览器层进战斗后 25 步、回放层 2 回合);设置环境变量后加一整局浏览器对局。没有 Playwright 或 Edge 时浏览器两层跳过。

设置

浏览器层种子 11–13;回放层种子 101;会话层种子 1000–1029(30 局)。

结果

  • 浏览器层:3 整局全部打完,0 页面错误。
  • 回放层:111 步全部经界面点出,每步画面一致。调试中确认两条界面约定(不是缺陷):鼠标点目标格时按指针所在的边选进攻方向;原地攻击只有一种方式时用无后缀的动作。
  • 会话层找到两个真问题:
    1. 赛后分析不认识区域射击结果 attack_hex,录像和分析生成失败。已修,并加覆盖测试:Simulator 公开动作清单里的每种动作都必须有计数项。
    2. AI 回合崩溃(种子 1015):接近路线上的场地效果让攻击预览变成“已取消”(没有伤害、没有幸运分支),而带厄运的攻击者仍按幸运分支去取伤害,抛出 ValueError。现在已取消的攻击估值为 0,并加了回归测试(去掉修复时测试会失败)。
  • 会话层随后补上“终局后等录像就绪,失败即报”,用注入的分析异常验证能报出来。

局限

  • 回放层的英雄技能、生物技能、多目标法术、区域射击路径已写好,但还没在回放中被抽到,需要更多种子。
  • 浏览器随机层每步约 1 秒,整局 1–5 分钟,更多种子需后台批量跑。
  • 只证明界面层稳定、显示一致,不证明规则与商业游戏一致。

结论与下一步

自动化整局测试已可用,首轮就抓出两个会让试玩中断的问题。下一步用更多种子覆盖剩余点击路径,并可与感知侧的“界面动作词汇”共用这套点击路径。