3170项测试如何守护游戏质量:《卫戍协议:盟约》单元测试、E2E与模糊测试体系全解
【免费下载链接】Stronghold-Protocol明日方舟「卫戍协议:盟约」非官方同人复刻:浏览器自走棋塔防,单人或 1–4 人联机合作(非商业)项目地址: https://gitcode.com/gh_mirrors/st/Stronghold-Protocol
《卫戍协议:盟约》是一款基于浏览器运行的自走棋塔防游戏,还原了明日方舟"卫戍协议"的单人或 1–4 人联机合作玩法(非官方同人、非商业项目)。这样一款涉及战斗数值、联机协议、经济系统的网页游戏,凭什么敢让你放心上手?答案藏在仓库根目录一条npm test命令背后——node --test会拉起 307 个测试文件、数千个用例,全量跑通即 3170 项测试全部通过。本文带你拆解这套由单元测试、集成测试、E2E 与模糊测试(Fuzz)构成的四层质量守护体系。
一、测试体系总览:一套金字塔,四层防线
项目全部测试集中在 test/ 目录,按被测目标分为五区:
| 目录 | 文件数 | 守护对象 |
|---|---|---|
| test/sim/ | 62 | 战斗模拟内核(走位、技能、伤害) |
| test/match/ | 69 | 对局状态机(经济、选牌、回合) |
| test/ui/ | 69 | 前端界面逻辑与交互 |
| test/render/ | 55 | 战场渲染(棋盘、特效、朝向) |
| test/content/ | 35 | 游戏内容数据(干员、羁绊、波次) |
测试框架就是 Node.js 内置的node --test(要求 Node ≥ 22,见 package.json),零额外依赖,浏览器层 E2E 则通过puppeteer-core驱动真实页面。
二、单元测试:把战斗引擎锁进"种子"
战斗模拟是最容易出 bug 的地方:一个公式写错,整局平衡就崩。test/sim/ 的 62 个测试文件直接对着 server/sim/Battle.js 开火,验证移动、技能、投射物、朝向不变性等每一条规则。
关键手法是固定随机种子:同一组输入 + 同一种子,必须产出完全一致的对局。这样任何一次数值改动,只要破坏确定性,测试立刻红灯。
三、集成测试:AI 机器人打完整局
比单元测试更狠的是"全对局测试":让 AI 机器人在无头模式下从匹配打到结算。
- test/match/fullmatch.test.js:单人 × 4 种难度、2/3/4 人合作,各跑 20 个种子,断言"零报错打完一整局",还覆盖服务器端回退战斗模式。
- 核心加速神器是 test/match/harness.js 里的
VirtualScheduler——虚拟时间调度器让战斗同步快进,一整局只花毫秒级墙钟时间。 - test/match/economy.test.js、merge.test.js、draft.test.js 等则分别盯死经济、合成、选牌等子系统。
想自己复现平衡性数据?项目还配了现成工具:
node tools/matchrun.mjs --mode coop --difficulty HARD --players 4 --seeds 20 node tools/botbench.mjs --configs solo:HARD,coop4:HARD --seeds 40 --json new.json详见 docs/META.md 第 6 节 "Testing & tools"。
四、E2E 测试:真实服务器 + 真实浏览器
集成测试再严密,也可能漏掉"页面实际长什么样"。test/e2e/ 提供fastServer.mjs起一个真实 Node 服务器,test/ui/ 里大量*.e2e.test.js文件则用 puppeteer-core 驱动真实浏览器,走完整流程:建房 → 选干员 → 购买放置 → 观战 → 结算。例如 test/ui/loadout-battle.e2e.test.js 和 test/ui/spectator.e2e.test.js 分别覆盖上阵战斗与观战视角,确保客户端与服务器协议逐帧对齐。
五、模糊测试:用"混沌"逼出边界 bug
这是整套体系里最有"攻击性"的一环,思路是:随机轰炸,系统必须永不崩溃、永不状态损坏。
- 协议 Fuzz— test/match/fuzz.test.js:随机生成合法形状的客户端指令(购买、移动、装备、表情……)在随机阶段发射,并夹杂随机断线/重连/离开/时间跳变。验收标准苛刻:绝不抛内部错误、绝不破坏金币、卡池、槽位等不变量。
- 战斗 Fuzz— test/sim/fuzz.test.js:随机真实干员阵容 + 真实地图 + 真实波次,打满 200 场随机战斗并持续检查不变量;可通过环境变量加压:
SIM_FUZZ_N=3000 SIM_FUZZ_CHECK_EVERY=3 node --test test/sim/fuzz.test.js- 混沌 Soak— test/sim/robustness.test.js 的 chaos fuzz 用例,用 500 场随机内容战斗浸泡内容脚本。
六、如何一键跑完全量测试
无需安装任何测试框架,克隆仓库装好依赖后即可:
git clone https://gitcode.com/gh_mirrors/st/Stronghold-Protocol cd Stronghold-Protocol npm install npm test # 等价于 node --test,跑通全部 3170 项测试只想关注某一层时,按目录过滤即可,例如node --test test/match/*.test.js专跑对局层(推荐写法见 docs/META.md)。
七、新手入门建议
- 先读文档再改代码:docs/SIM.md 讲战斗规则,docs/DESIGN.md 第 11 节明确"每模块配单测、内容配测试、全对局 Bot 测试零报错"的质量红线。
- 改动必附测试:仓库里大量
feedback*、playtest*命名的测试文件(如 test/sim/feedback1e-aoe.test.js)说明每次问题修复都会沉淀为回归用例。 - 善用调试工具:tools/doctor.mjs 一键体检环境,tools/botbench.mjs 可做 AI 战绩 A/B 对比。
3170 项测试不是终点,而是每一行提交的"底线"。当机器人替你把 4 人合作、Boss 战、断线重连反复锤炼过千百遍,你点开浏览器时,只剩纯粹的塔防乐趣。🎯
【免费下载链接】Stronghold-Protocol明日方舟「卫戍协议:盟约」非官方同人复刻:浏览器自走棋塔防,单人或 1–4 人联机合作(非商业)项目地址: https://gitcode.com/gh_mirrors/st/Stronghold-Protocol
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考