数据存盘


功能说明

数据存盘是一个十分重要的基础模块,而且大多数的功能测试中都会涉及到它,但极少会专门测试它。一般数据存盘出现问题,现象也比较明显单一,就是“回档”,也就是数据回到了操作以前的样子。存盘的问题一旦出现了,就会有造成规模性的影响,而且后期的补偿处理十分麻烦,因为没有明确的数据记录玩家曾今获得过什么,是什么状态。

一般来说,网络游戏的数据都是存在服务端的,从关联性上来说,可以大致分为角色数据公共数据两种。角色数据主要就是跟单个玩家绑定在一起的,例如玩家角色的等级,能力属性,背包里的物品等等;而公共数据不属于某个单独的玩家,而是许多玩家聚集到一起,由服务器独立维护的数据,例如帮会、交易行、排行榜等等。当然,无论是哪种数据,最后在服务端都是要写入到数据库里的,所以从数据的存储角度上来说,两者并没有本质的区别。

当然,网络游戏也有存储在本地的数据,但这类数据都是为了提供更良好的体验而存储的,不会涉及到重要的游戏数据。例如本地会存储登录过的账号,上次进入的区服信息,这样当你下次启动客户端,不用重新输入账号和选服选角。

既然要存数据,那么肯定有一定的存储规则,比如如何触发存盘,要存哪些数据,多久存一次,一次性能存多大的量等等。存盘要有统一的接口,避免冲突,相互覆盖;不用的数据最好进行标记,不要轻易删除数据;一些重要数据之间建立关联关系,防止有的存了,有的没存,导致逻辑上有冲突。还有就是从一开始设计数据规则时,角色数据就能够根据区服信息等建立唯一性的ID标识,而不是简单使用角色名。这样当要合并两个服务器的数据的时候,可以少处理很多的冲突。

在实际的测试过程中,数据存盘是作为一个测试点包含在所有功能测试当中的,因为不同的功能要存盘的数据不同,存盘的规则可能也不一样,需要逐一验证。但某些具有相同或相似存盘接口的数据,只要测过一次不必每次都测试,前提是要跟开发同学核对好背后的规则。

最后还需要注意的是,服务端最好每天定时做一次数据库备份,以防意外情况导致数据丢失,无法恢复。这算是一种容灾手段。

数据存盘比较容易出问题的几个情景:

  1. 服务器关闭重启,大量的玩家数据要进行存盘.
  2. 游戏运行过程中闪退,导致部分数据没来及存盘就丢失了,也就是所谓的回档。如果是整体回档还好,最怕的是部分数据存盘,部分数据回档,导致数据出现不一致。
  3. 两组服务器进行合服的时候,要将两组存盘数据合并成一份,可能会有大量相同重复的数据需要处理,而且这种处理过程如果有遗漏也很容易造成数据不一致。

测试用例

下载地址及位置:功能测试用例库


问题示例

  1. 《剑网3》曾今出过一个大事故,某个角色的数据太大,导致数据库存盘的时候失败,而失败时没有返回导致整个服务器的存盘都阻塞住了,结果关服更新后,整个游戏服务器里的角色出现了大面积的回档。

  2. 《萌货大逃亡》是个单机小游戏,游戏数据存在本地。但是替换安装了新的客户端后,使用同一个账号登录游戏,动物和道具出现了丢失,其他关卡和金钱数据正常。

results matching ""

    No results matching ""