《王者荣耀》是使用Unity制作的一款MOBA即时对战手游,PVP实时战斗对游戏性能要求极高。本文主要介绍《王者荣耀》项目如何利用腾讯WeTest平台提供的GAutomator自动化测试框架,来解决研发测试过程中的几个痛点,从测试角度保证游戏的基础体验,助力打造高品质手游。希望本文能够给大家提供一些思路。

遇到的问题

MOBA手游核心玩法是5V5对战模式,5V5的核心玩法决定了《王者荣耀》在测试时需要投入更多的人力和机器,每次测试需要10个测试人员来协助完成。其次项目更新迭代速度非常之快,一个版本需求点超过300个,比如已经上线的V12版本增加了新的迷雾地图模式、全新的战队赛、5人排位赛、新英雄、新装备等。游戏的核心玩法和快速迭代,也决定了测试同学需要使用全新的方式来解决测试过程中的一些难题。

自动化测试的特点

《王者荣耀》的更新迭代非常快,需要使用自动化来进行快速验证。中国有句话叫“上医治未病”,及时发现Bug并修复能够有效避免出现发布前的紧急修复和发布延迟的情况。自动化测试能够让测试人员更多的关注游戏功能性问题、游戏体验问题,以及将更多的时间用在问题总结之上。
基于CI的自动化测试,能够在游戏构建好之后,在1个小时左右收到当前版本的测试报告。在WeTest平台,一次测试能够覆盖Top 200的手机类型,也能更高效地发现兼容性问题。

《王者荣耀》测试过程中3大痛点

1.难以复现的同步问题
《王者荣耀》使用帧同步技术来实现实时的PVP对战。帧同步要求所有客户端基于相同的初始状态、输入及处理逻辑,最终有相同的输出,保证所有客户端的逻辑一致,服务器不做仲裁处理。这里可能因为不稳定的排序、随机数、浮点数、状态缺少检查等原因造成客户端不同步的问题。出现了不同步问题不可修复,一旦出现本局将直接作废,对玩家的影响是致命的。

下图是游戏早期测试阶段的一张图,同一局对战里面差不多同一时刻,敌我双方都出现了龙Buff。两边的人头数也相差巨大,右边这张图的玩家一个人13杀0 死,这种严重的不同步问题,已经脱离整个战局。

105547vbjfb2yyfx33oc24.png

帧不同步出现的概率极低,需要大量的人员来进行测试。部分不同步问题需要到体验服上才会暴露,最终修复问题。

2.Android手机的适配问题
Android手机碎片化非常严重,品牌、型号、分辨率种类繁多,适配问题难以验证。

105548p3p79rrt8zr3kn37.png

《王者荣耀》Android机型中,Top 10的机型用户占比为16%,Top 100的占比为56.2%,碎片化严重。但是,《王者荣耀》项目组对手游的Crash要求极高,现在线上的Crash在0.4%-0.6%之间。以前在功能测试过程中发现兼容问题,加之上线前ATC兼容实验室进行测试略显不足,功能测试覆盖的手机类型有限,ATC实验室往往需要排队预约,而且测试的次数有限。

举个例子:某个机型在5v5对战中更新抛出异常。单纯的人工测试和一次适配测试可能都无法发现类似的问题。自动化不断的去对战发现此类问题的概率较大。

105549ovwovmwx83068dyb.png

3.英雄数值平衡性验证

英雄是《王者荣耀》的生命线,如何验证英雄的平衡性是手游可持续发展的关键。一个新的英雄上线,需要大量人力和对局才能验证新英雄数值的合理性,目前使用的方式是英雄设计组+体验服的方式。需要更加详细的,英雄之间对比的数据报告。

构建自动化测试系统

《王者荣耀》的自动化测试,使用WeTest的GAutomator来完成,由WeTest平台和《王者荣耀》共同完成Bug的检验和发现工作。GAutomator框架主要完成5V5 PVP的战斗的测试工作,WeTest平台主要负责收集Crash信息、日志信息、性能数据等,《王者荣耀》通过检测上报发现“不同步问题”。

自动化测试用例

105550d4h5txte5ziir6w4.png

自动化测试的主要过程包括,登录->选区->弹出框处理->5V5 匹配->英雄选择->英雄集合->技能学习,装备购买->团战->对战结束退出。

为了能够更好的发现不同步问题并测试性能,需要10个英雄尽可能进行团战。团战需要更多的同步数据,也往往是性能的瓶颈所在。

105551q8afrwrywjyrwjff.png

比如,英雄选择代码如下,V12版本需要优先选择亚瑟和安妮:

105551pqsa1s37ts4sm6bk.png105553yp29x5z45p12pc5m.png105554mdmww9vw2lmzxvji.png


选区代码如下:

105554mw30khu0h02030r1.png

构建自动化云测系统

测试用例构建完毕并在本地执行通过之后,就需要能够在平台上运行自动化测试用例,并选择所需要测试的机型种类和数量。

105555s59lvmm95ufizfrl.png

项目组通过CI构件好客户端后,可以直接通过Python脚本提交到WeTest平台。WeTest平台根据上传的测试脚本和选择的机型执行自动化测试用例。在执行自动化测试用例的过程中会检测Crash、性能数据、采集图片和手机日志信息。所有的手机全部执行完毕后,会输出一份测试报告。测试报告由测试外包同学负责整理,并提交Bug给开发。不同步问题由测试人员,根据服务器记录的日志信息分析,获取不同步产生的过程还原问题。

自动化测试效果

V12版本总共发现了5次低概率的不同步问题,检测出了10种C#异常,1种屏幕渲染问题,1种机型适配问题。至少能够减少1次体验服的发布次数,Bug能够提前暴露约5天。

最后分享一下GDOC(腾讯游戏内部开发交流大会)上比较集中的QA:

Q:如何发现不同步问题?
A:在5V5自动化测试过程中,《王者荣耀》服务器会记录每个客户端上报的日志。可以通过日志对比检测,10个客户端中哪些客户端与其他客户端日志不一致。从不同步的客户端日志中能够找到,不同步发生的原因。

Q:如何获取英雄的战斗数据?
A:自动化框架无法获取英雄的战斗数据,GAutomator仅仅负责进入战斗,由开发者通过日志等其他方式记录战斗数据。然后再有独立的系统,对战斗数据进行解析验证。目前这部分内容尚未,正式投入应用,正在开发之中。

Q:自动化测试用例人力投入如何?需要多少时间?
A:《王者荣耀》包括5V5 PVP,PVE,开房间打电脑,迷雾模式,1V1,3v3总共代码在500行多。投入人力7天左右。

Q:脚本的维护性如何,是否支持录制?
A:已经开发出基于控件的录制方式,玩一遍游戏之后能够尽可能的回放。

Q:GAutomator支持的游戏引擎类型?
A:目前仅支持Unity引擎。

目前GAutomator自动化测试框架正在开放内测中,想了解更多技术细节可以报名内测。截止至2016年12月31日总计送出20个免费内测名额。报名请访问Unity官方中文社区论坛活动版块置顶贴自助申请,或联系腾讯WeTest助手(QQ:800024531)。

申请内测报名地址:http://forum.china.unity3d.com/thread-21636-1-1.html



Unity, WeTest, 王者荣耀, 腾讯, 自动化测试锐亚教育

锐亚教育 锐亚科技 unity unity教程