PTS服务器开荒,听起来像是玩家群里一句“新服快开、求带求玩”的口号,但落到工程侧,它其实是一整套测试环境准备、数据重置、服务部署、冒烟验证和故障回滚的流程。PTS 的全称是 Public Test Server,也就是公开测试服务器,它独立于正式服,专门用于让测试玩家提前体验新版本、新玩法,同时让项目组在真实玩家进入前确认版本能跑、数据能清、创角链路能走通。这里的“开荒”有两层含义:玩家视角是探索新内容,工程视角则是把一个已经跑过多轮测试的旧环境恢复到“像刚开服一样可玩可测”的状态,并保证玩家真的玩得起来。
很多项目第一次做 PTS 开荒时,容易把精力全部放在“启动服务”上,结果玩家一进来就出现创角失败、邮件残留、排行榜脏数据、初始资源没发全等问题。问题根源通常不是服务端代码本身,而是开荒流程里少了数据初始化、环境隔离、脚本幂等和备份回滚这几个环节。
本文以通用游戏服务端项目为例,整理一次 PTS 开荒从准备到收尾的完整方法,包含环境规格评估、数据库清档、服务启动验证、开荒辅助脚本编写、高频故障排查和最佳实践清单。项目可能使用 Java、Go、C++ 或 Lua 服务端,技术栈会有差异,但开荒的思路是通用的。文中的命令、SQL、配置和脚本都用于说明思路,落地时要结合自己的项目结构、接口路径和依赖版本调整。
1. 先理解 PTS 服务器开荒到底在做什么
1.1 什么是 PTS 服务器,它和正式服有什么区别
PTS 服务器是游戏项目对外或对内开放的测试环境,通常比普通开发环境更接近正式服配置,但数据会定期清理。它的核心价值是:让真实玩家组合出开发环境里测不出来的负载和玩法表现,让项目组在新版本进入正式服之前先收到一批“接近真实”的反馈。
从技术角度看,PTS 服务器与正式服的区别主要在数据、账号、配置和容量四个维度。
| 对比维度 | PTS 测试服 | 正式服 |
|---|---|---|
| 数据定位 | 可随时清档,不保证长期保留 | 玩家核心资产,禁止任意回退 |
| 账号系统 | 通常使用独立账号池或专用白名单 | 正式账号体系 |
| 配置项 | 开服时间、资源倍率、GM 开关可修改 | 受运营流程和权限管理约束 |
| 容量目标 | 支撑测试规模即可,一般小于正式服 | 支撑全量玩家并发 |
| 变更频率 | 高,每周甚至每天热更 | 低,受发布窗口控制 |
| 回滚策略 | 容忍局部回档 | 必须避免数据丢失 |
PTS 服务器与开发环境、压测环境也不同。开发环境追求改代码后快速重启,数据越简单越好;压测环境追求高负载,往往会用机器人模拟大量玩家;PTS 服务器则要兼顾“真实玩家体验”和“项目组数据采集”,所以它既要有完整玩法链路,又要允许清档和回滚。
1.2 开荒在工程侧到底指什么
玩家说“开荒”,指的是新服务器开放后,所有人从零开始练级、打副本、竞争排行榜。项目组说“开荒”,指的是把测试环境从“历史遗留数据状态”拉回“新服初始状态”,并验证新版本能否正常服务玩家。
一次 PTS 开荒至少包含以下工程目标:
- 清理上一轮测试遗留的角色、公会、邮件、排行榜、商城数据。
- 初始化新版本需要的基础数据,比如地图、NPC、掉落表、活动配置。
- 确认服务端各进程可以按正确顺序启动并对外提供服务。
- 验证注册、登录、创角、进入场景这条核心链路是通的。
- 按测试计划批量创建测试账号或发放测试资源。
- 配置监控、日志、备份和回滚预案,防止开荒当天出问题无法恢复。
如果只完成其中一两项,就不能叫完整开荒。很多 PTS 事故都发生在这条链路的空白处,比如服务起来了但数据库还是旧数据,玩家创角后发现角色列表里有上一轮的角色残留,或者资源发放脚本重复执行导致所有测试号都收到双倍道具。
1.3 开荒前的任务拆解和人员分工
建议把开荒看作一个“小上线窗口”来管理,提前拆好任务并明确责任人。
| 责任方 | 主要任务 | 验收产物 |
|---|---|---|
| 服务端开发 | 提供启动脚本、配置基线、健康检查接口 | 服务可启动、可注册、可进入场景 |
| 运维 | 准备机器、数据库、缓存、日志采集和监控告警 | 资源就绪、备份可用、告警可达 |
| 客户端开发 | 确认客户端可连接 PTS 环境,无环境写死问题 | 登录流程跑通、版本匹配 |
| 测试 | 制定冒烟用例,覆盖登录、创角、资源、主玩法 | 冒烟报告、缺陷列表 |
| 策划/运营 | 提供初始资源数值、活动配置、发放名单 | 基础数据导入完成 |
任务拆解完成后,开荒当天按顺序执行:环境检查、备份清理、部署启动、核心链路验证、辅助脚本执行、持续监控。下面从环境准备开始讲。
2. 开荒前的环境准备:规格、依赖和配置要及时对齐
2.1 服务器规格与容量估算
开荒前第一件事是确认 PTS 服务器机器规格。规格太低会导致玩家涌入时立刻卡顿,规格太高又会造成资源浪费。
估算时主要看三个数字:
- 预期同时在线人数:PTS 一般不需要完全复刻正式服容量,通常按正式服峰值的一小部分估算。
- 单进程承载上限:不同服务端架构差异很大,有的逻辑服单进程能承载数千人,有的只能承载几百人。
- 数据规模:角色表、邮件表、日志表会随开荒天数增长,数据库磁盘要预留安全水位。
以下是一个偏保守的估算示例,实际要按自己项目压测结果调整。
| 资源项 | 小规模 PTS | 中等规模 PTS |
|---|---|---|
| 目标同时在线 | 200 人以内 | 1000 人左右 |
| 应用服务器 | 4 核 8G 一台起步 | 8 核 16G 两台起步 |
| 数据库 | 4 核 8G SSD | 8 核 16G SSD |
| 缓存 | Redis 2G | Redis 4G,开启持久化 |
| 磁盘 | 100G | 300G,日志和数据拆分目录 |
注意:不要把 PTS 的容量经验直接套到正式服。PTS 出现卡顿可以临时扩容,正式服出现卡顿会直接造成玩家流失,二者对容灾和监控的要求完全不同。
学习环境下,如果只是验证开荒流程,完全可以用一台 2 核 4G 的云主机,把数据库、Redis、逻辑服都装在同一台机器上。但生产级 PTS 测试服至少要把数据库和应用服务分开,否则开荒当天玩家集中进入时,数据库会被慢查询拖垮整台机器。
2.2 依赖组件安装与版本确认
游戏服务端常见的依赖组件包括关系型数据库、缓存、消息队列和对象存储。开荒前要确认这些组件的版本尽量与正式服对齐,避免出现“开发环境验证没问题,PTS 上行为不一致”的情况。
以经典组合为例,安装前先确认当前系统环境。
cat /etc/os-release uname -a which mysql || which mysqld which redis-server which nginx如果组件没有安装,可以使用系统包管理器或官方安装包安装。下面只是典型的安装思路,实际版本号要以项目依赖清单为准。
# Debian/Ubuntu 系 sudo apt update sudo apt install -y mysql-server redis-server # CentOS/RHEL 系 sudo yum install -y mysql-server redis安装完成后,必须做一次最低限度的连通性验证。
mysqladmin -uroot -p ping redis-cli ping关键点在于版本确认,而不是“能装上就行”。如果正式服使用 MySQL 8.x,PTS 上装了 5.7,那么 SQL 语法、字符集排序规则、事务隔离级别的默认行为都可能不一致,开荒当天容易出现开发环境没见过的报错。建议在项目文档里维护一张依赖版本清单,开荒前逐项核对。
2.3 配置对齐清单
服务端配置是开荒事故的高发区。最常见的问题是复制了正式服配置然后直接启动,导致 PTS 服务把数据写进了正式库,或者注册服务连到了错误的账号中心。
一个规范的服务器配置通常包含以下内容,这里以 YAML 形式给出示例。
server: name: pts-server-1 env: pts listen: 0.0.0.0:8100 region: cn-test database: host: 10.0.0.10 port: 3306 name: game_pts_db username: pts_writer password: change-me-01 redis: host: 10.0.0.11 port: 6379 db: 3 log: level: debug path: /data/logs/pts/ output: both feature: gm_open: true recharge_enabled: false mail_clean_on_start: true每一项配置都有明确目的:
| 配置项 | 含义 | 错误配置的后果 |
|---|---|---|
| env | 环境标识,用于区分日志、监控和上报 | 无法区分 PTS 与正式服数据 |
| database.name | 当前服务连接的库名 | 连错库会污染正式数据 |
| redis.db | Redis 逻辑库编号 | 多个环境共用 Redis 时互相覆盖缓存 |
| gm_open | 是否开放 GM 命令 | 正式服开放 GM 会造成刷资源风险 |
| log.level | 日志输出级别 | 开荒期日志级别太高会丢失排查线索 |
配置对齐的检查方式很简单:启动服务后,先查看进程实际读取到的配置,再对比配置清单。很多服务端支持启动参数指定配置文件,比如-config=/etc/pts/server.yaml,要确认启动脚本里确实指定的是 PTS 自己的文件,而不是环境变量里残留的默认路径。
3. 用最小流程完成一次 PTS 开荒
3.1 数据库备份、清档与基础数据初始化
开荒第一步不是直接删数据,而是先备份。即使 PTS 的数据允许清空,备份仍然能帮助定位“上一轮测试到底留了什么数据、哪些逻辑是清理脚本没覆盖到的”。
备份示例:
mysqldump -uroot -p --single-transaction --routines --triggers game_pts_db > /backup/pts_$(date +%Y%m%d_%H%M%S).sql备份完成后,按项目定义的表清单执行清档。清档不能只清角色表,还要处理工会表、邮件表、排行榜表、聊天日志表、交易记录表等。一个简化示例:
-- 关闭外键检查,避免删除顺序导致失败 SET FOREIGN_KEY_CHECKS = 0; TRUNCATE TABLE player; TRUNCATE TABLE player_item; TRUNCATE TABLE player_mail; TRUNCATE TABLE guild; TRUNCATE TABLE guild_member; TRUNCATE TABLE rank_daily; TRUNCATE TABLE mail_system; SET FOREIGN_KEY_CHECKS = 1;TRUNCATE 操作会重置自增主键,这通常是期望行为。如果只使用 DELETE 删除行而不重置自增 ID,玩家重新创角后角色 ID 会从历史值继续增长,排行榜、日志关联和日志排查都会变得很奇怪。
清档后要导入基础数据。基础数据一般包括地区地图、NPC、怪物、掉落、任务、活动配置等。导入方式因项目而异,常见方式是执行项目打包好的 SQL 文件或数据表脚本。
mysql -uroot -p game_pts_db < /data/deploy/base_data_2025.sql导入完成后做一个快速校验,确认核心表的数量符合预期。
SELECT COUNT(*) AS map_count FROM map_config; SELECT COUNT(*) AS npc_count FROM npc_config; SELECT COUNT(*) AS item_count FROM item_config;这里要特别注意:清档脚本和基础数据导入脚本最好由版本包统一管理,而不是散落在运维同学的本地机器上。否则换个环境开荒时,容易漏掉某个表的清理或基础数据版本不一致。
3.2 服务启动顺序与登录创角链路验证
服务启动顺序通常是从底层到上层:数据库和缓存先确认可用,再启动网关、逻辑服、跨服和场景服。顺序反了会导致服务启动后不断重连,日志刷屏,玩家请求超时。
下面是一个典型的启动脚本思路:
#!/usr/bin/env bash set -e echo "[1/5] check dependency..." mysqladmin -h 10.0.0.10 -upts_writer -pchange-me-01 ping redis-cli -h 10.0.0.11 ping echo "[2/5] start gateway..." nohup ./bin/gateway -config /etc/pts/gateway.yaml > /data/logs/pts/gateway.log 2>&1 & echo "[3/5] start logic server..." nohup ./bin/logic -config /etc/pts/logic.yaml > /data/logs/pts/logic.log 2>&1 & echo "[4/5] start scene server..." nohup ./bin/scene -config /etc/pts/scene.yaml > /data/logs/pts/scene.log 2>&1 & echo "[5/5] health check..." curl -s http://127.0.0.1:8100/health || exit 1启动脚本中的健康检查不能只看进程是否存在,而是要看服务是否真正就绪。建议服务端提供一个/health接口,返回数据库连接状态、缓存连接状态和当前加载的配置版本。
服务启动后,要验证核心链路而不仅是进程状态。最直接的方式是调用登录和创角接口。不同项目的接口协议不一样,这里用一个简化 HTTP JSON 示例说明思路。
# 登录并获取 token curl -s -X POST http://127.0.0.1:8200/api/login \ -H "Content-Type: application/json" \ -d '{"account":"pts_tester_001","channel":"pts"}' | tee login_result.json{"code":0,"data":{"token":"abc123","player_id":0,"need_create":true}}拿到need_create: true后调用创角接口。
curl -s -X POST http://127.0.0.1:8200/api/create_player \ -H "Content-Type: application/json" \ -H "Authorization: Bearer abc123" \ -d '{"name":"开荒测试001","job":1}' | tee create_result.json{"code":0,"data":{"player_id":10001,"name":"开荒测试001"}}创角成功后,再调用进入场景接口,确认玩家能真正进入地图而不是停留在角色选择界面。如果这三级接口都能返回正常,核心链路才算验证通过。
3.3 编写开荒辅助脚本:批量创角与初始资源发放
手动验证一两个账号后,下一步就是批量创建测试账号和发放初始资源。手工调用接口太慢,而且容易漏,建议用脚本完成。
下面的 Python 脚本思路适合大多数 HTTP 协议的服务端,非 HTTP 的长连接项目可以改成调用项目提供的管理工具或 SDK。
import csv import json import time import urllib.request LOGIN_URL = "http://127.0.0.1:8200/api/login" CREATE_URL = "http://127.0.0.1:8200/api/create_player" def post_json(url, payload, token=None): headers = {"Content-Type": "application/json"} if token: headers["Authorization"] = "Bearer " + token req = urllib.request.Request( url, data=json.dumps(payload).encode("utf-8"), headers=headers, method="POST", ) with urllib.request.urlopen(req, timeout=10) as resp: return json.loads(resp.read().decode("utf-8")) def create_one(account, name): login_resp = post_json(LOGIN_URL, {"account": account, "channel": "pts"}) if login_resp.get("code") != 0: return account, False, "login failed: " + json.dumps(login_resp, ensure_ascii=False) token = login_resp["data"]["token"] create_resp = post_json(CREATE_URL, {"name": name, "job": 1}, token=token) if create_resp.get("code") != 0: return account, False, json.dumps(create_resp, ensure_ascii=False) return account, True, "player_id=" + str(create_resp["data"]["player_id"]) def main(): with open("players.txt", "r", encoding="utf-8") as f: lines = [line.strip() for line in f if line.strip()] results = [] for line in lines: account, name = line.split(",") account = account.strip() name = name.strip() account, ok, msg = create_one(account, name) results.append((account, ok, msg)) print(account, ok, msg) time.sleep(0.5) # 限速,避免把网关打垮 with open("create_result.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["account", "success", "message"]) writer.writerows(results) if __name__ == "__main__": main()players.txt 示例:
pts_tester_001,开荒测试001 pts_tester_002,开荒测试002 pts_tester_003,开荒测试003这个脚本有几个关键设计:
- 登录和创角分开调用,避免一次失败导致整个流程中断。
- 每次请求间隔 0.5 秒,避免瞬时高并发把开荒期脆弱的服务打挂。
- 结果写入 CSV 文件,方便测试同学核对哪些账号创建失败。
- 脚本只做“创建角色”,资源发放可以继续追加到 same process。
资源发放如果走 HTTP 接口,可以复用上面的post_json方法,调用一个示例的管理接口:
grant_resp = post_json( "http://127.0.0.1:8300/api/gm/grant_item", {"player_id": 10001, "item_id": 1001, "count": 100}, token="gm_token", )需要注意的是,资源发放脚本必须幂等。重复执行不能导致道具重复发放。推荐的做法是在发放记录表里保存唯一键,比如player_id + item_id + batch_no,或者由服务端对每个 player_id 增加“是否已经发放过开荒礼包”的标记位。
3.4 开荒结果验证:数据、日志和监控三条线同时检查
开荒不是脚本执行完就结束,还要从数据、日志、监控三个角度验证结果。
数据侧检查角色总数是否符合预期:
SELECT COUNT(*) AS total_players FROM player; SELECT COUNT(*) AS total_mail FROM player_mail; SELECT status, COUNT(*) FROM player WHERE created_at > NOW() - INTERVAL 30 MINUTE GROUP BY status;日志侧检查开荒期间的服务日志有没有异常关键字。可以写一个简单的日志扫描命令:
grep -E "ERROR|EXCEPTION|TIMEOUT|FATAL" /data/logs/pts/*.log | grep -v "graceful" | tail -n 50监控侧至少要看四个指标:CPU 使用率、内存使用率、数据库慢查询数量、网关平均响应时间。如果开荒期间出现了大量慢查询,先记录现场,开荒结束后再优化 SQL,不要当场改并发逻辑。
| 验证维度 | 检查内容 | 预期结果 |
|---|---|---|
| 数据 | 角色总数、邮件数、排行榜表 | 与开荒脚本创建数量一致 |
| 日志 | ERROR、超时、连接失败 | 无批量异常 |
| 监控 | CPU、内存、慢查询、响应耗时 | 均在安全水位内 |
| 客户端 | 实际登录体验 | 可创角、可进入场景、道具到账 |
很多人只验证了“服务能启动”就宣布开荒完成,这是最危险的判断。正确的做法是至少让一个测试同学使用真实客户端走一遍从下载登录到进入战斗的完整流程,确认玩家视角没有问题。
4. 开荒期间的高频故障排查:回档、热更、崩溃
4.1 回档:为什么会出现,如何安全执行
PTS 开荒期间回档并不罕见。触发回档的常见原因有:
- 活动配置错误,导致所有玩家获得超量资源。
- 测试脚本 bug,批量写入了错误数据。
- 逻辑服务存在数据并发问题,角色数据损坏。
- 开荒当天热更配置没生效,玩家体验了错误版本内容。
回档的前提是必须有备份,所以开荒前进行备份不是走走形式,而是在给回档留后路。
回档操作的标准流程是:
- 立即停服或开启维护模式,阻止新数据写入。
- 备份当前损坏的库,用于后续定位问题。
- 从最近的备份点恢复数据。
- 启动服务,验证核心链路。
- 公告回档时间点,已发放道具可能丢失。
# 停服后再备份损坏现场 mysqldump -uroot -p game_pts_db > /backup/pts_broken_$(date +%Y%m%d_%H%M%S).sql # 恢复最近备份 mysql -uroot -p game_pts_db < /backup/pts_clean_20250701_080000.sql # 重启服务 bash ./deploy/stop.sh bash ./deploy/start.sh回档是最后手段,能通过“只撤销异常道具”解决的,尽量不要回档,因为回档会影响所有玩家。但 PTS 环境容忍度更高,有时候快速回档比重写修复逻辑更划算。无论如何,回档操作必须由专人执行,执行前后都要拍照备份,防止二次事故。
4.2 热更失败:配置或代码没有按预期生效
开荒期间修改配置后经常遇到“改了没生效”的问题。排查顺序如下:
- 确认修改的是 PTS 环境对应的配置文件,而不是本地或正式服配置。
- 确认服务端是否支持运行时热加载,如果不支持,需要重启或执行热更命令。
- 确认日志中是否打印了配置加载成功的信息。
- 确认客户端收到的资源版本和配置版本匹配。
常见的配置加载问题可以用一个最小检查命令定位:
# 查看进程实际打开的配置文件 ls -l /proc/<pid>/cwd cat /proc/<pid>/cmdline | tr '\0' ' ' # 查看日志里有没有重新加载配置的记录 grep "config reload" /data/logs/pts/logic.log | tail -n 10如果是代码热更失败,大概率是加载了旧的 class 或动态库,需要确认发布流程中的产物更新步骤是否执行完整。建议 PTS 环境每次发布后都在健康检查接口里返回版本号,便于快速核对:
{"code":0,"data":{"version":"20250701_1800","config_version":"20250701_1805"}}版本对不上时,直接按发布链路逐段排查,不要重启服务碰运气。
4.3 崩溃与明显卡顿:定位链路要固定下来
开荒时玩家集中进入,容易出现两类问题:服务崩溃和服务卡顿。
服务崩溃的排查顺序:
- 查看服务日志最后输出内容。
- 查看是否有 core dump 文件。
- 查看系统日志,比如
dmesg中是否有 OOM 或被 kill 记录。 - 确认崩溃进程是网关、逻辑服、场景服还是跨服。
dmesg | tail -n 50 grep -E "Out of memory|Killed process" /var/log/syslog | tail -n 20服务卡顿的排查侧重点不同,通常从资源消耗和慢查询两个方向查起。
# 查看进程资源占用 top -p $(pgrep -f logic | head -n1) # 查看数据库慢查询 mysql -uroot -p -e "SHOW PROCESSLIST;" | sort -k6 -n | tail -n 20卡顿的常见原因是数据库连接池被打满或某条 SQL 没有走索引。先定位是 CPU 忙还是等待数据库返回,再决定优化方向。
4.4 开荒故障排查总表
下面的表格可以打印出来贴在开荒作战文档里,遇到问题先按顺序检查。
| 现象 | 可能原因 | 检查方式 | 处理建议 |
|---|---|---|---|
| 玩家无法登录 | 网关未启动/账号服务不可达 | 检查网关进程、登录接口返回码 | 按启动顺序拉起服务 |
| 创角失败 | 角色名重复/数据库表损坏 | 查看逻辑服日志、手动调接口 | 清理脏数据或回档 |
| 进入场景超时 | 场景服未就绪/跨服连接失败 | 检查场景服日志、连接数 | 重启场景服并确认主从关系 |
| 道具未到账 | 发放脚本未执行/CD 覆盖 | 查发放记录表、脚本输出 CSV | 幂等脚本重新执行 |
| 排行榜脏数据 | 清档后未重置自增 ID | 查询 rank 表最大 ID | 再次清档并重置自增 |
| 配置修改不生效 | 修改错误文件/未触发热更 | 检查进程配置文件路径、版本号 | 修改正确配置并触发热更 |
| 服务频繁重启 | OOM/配置循环依赖 | 查看 dmesg、进程退出码 | 扩容内存、检查配置 |
| 数据库连接池满 | 慢查询堆积 | SHOW PROCESSLIST,分析慢查询日志 | kill 长事务、加索引、扩容 |
排查时有个原则:先确认输入和路径,再查依赖,最后才怀疑代码。比如“热更失败”首先确认改的是不是 PTS 的配置文件、进程有没有读到它,而不是一上来就改代码。
5. 常见坑与最佳实践:开荒平稳落地的关键
5.1 最容易踩的五个坑
第一个坑是使用正式服配置启动 PTS 服务。现象是 PTS 角色数据写进正式库,或者 PTS 玩家被推送到了正式频道。原因是复制配置时没有检查env、database.name、redis.db等隔离项。解决办法是在启动脚本里强制校验环境标识,不匹配就拒绝启动。
第二个坑是清档只清主角色表。现象是玩家创角后仍然看到旧公会邀请、旧邮件、排行榜残留。原因是清档脚本遗漏了关联表。解决办法是维护一张完整的清档表清单,每次版本迭代都同步更新。
第三个坑是资源发放脚本不幂等。现象是同一个测试账号收到双倍甚至多倍开荒礼包。原因是脚本重跑时没有检查发放记录。解决办法是发放前查询发放标记表,标记已存在的直接跳过。
第四个坑是缓存残留。清库后 Redis 里还保存着旧角色的排行榜缓存和登录 Token,玩家会看到已删除的角色或无法正常登录。解决办法是清档后执行缓存清理命令,并确保服务重启后重新加载缓存。
redis-cli -n 3 FLUSHDB第五个坑是开荒公告和玩家进服时间不一致。玩家已经创角玩了几分钟,运维才执行清档,导致玩家刚创建的角色被清掉。解决办法是严格按时间窗口执行,先停服清档,再开服,开服后不再动核心数据表。
5.2 PTS 开荒最佳实践清单
以下清单可以在每次开荒前过一遍,保证流程不遗漏。
| 阶段 | 检查项 | 完成标准 |
|---|---|---|
| 开荒前 | 配置文件环境标识为 pts | 启动脚本校验通过 |
| 开荒前 | 数据库完成备份 | 备份文件存在且大小正常 |
| 开荒前 | 清档表清单最新 | 关联表全部覆盖 |
| 开荒前 | 基础数据版本正确 | 核心配置表数量符合预期 |
| 开荒前 | 监控告警可达 | 测试告警已发送 |
| 开荒中 | 核心链路冒烟通过 | 登录、创角、进场景均正常 |
| 开荒中 | 开荒脚本幂等执行 | 重复执行不重复发放 |
| 开荒中 | 日志无批量异常 | ERROR 数量在阈值内 |
| 开荒中 | 紧急回滚方案就绪 | 备份可用、回滚步骤文档已更新 |
| 开荒后 | 测试玩家反馈回收 | 形成问题清单并排期处理 |
注意:PTS 开荒最忌讳的是“开服后再补救”。先把清洗、备份、验证做在前面,开服后即使出现问题,影响面也可以控制在测试环境内。
5.3 从一次开荒走向自动化开荒
一次手动开荒能跑通,不代表每次都稳定。当 PTS 开荒频率上升到每周甚至每天时,建议把开荒流程自动化。
自动化方向有三个:
- 清档初始化自动化:将备份、清档、导基础数据、清理缓存放进一个流水线脚本,一键执行。
- 核心链路自动化验证:用自动化用例调用登录、创角、进场景、领取资源接口,代替人工点击验证。
- 监控告警自动化:将 CPU、内存、慢查询、日志 ERROR 关键字接入告警平台,开荒期间有人值守而不是靠人盯终端。
自动化脚本仍然要有“一键回滚”的开关。开荒过程中发现基础数据导入错误,要能快速恢复上一份可用备份,而不是重新手搓数据。
对于刚接触 PTS 开荒的新手,建议先用一台测试机手动完整跑通三五次,理解每个脚本和 SQL 的作用,再考虑自动化。直接套用自动化流水线但不知道每一步在做什么,出了问题会更难定位。开荒本身不难,难的是对每一步背后的数据变化有清晰认识,并且能在玩家真正进入之前,就把异常尽早拦截下来。