该内容已被发布者删除 该内容被自由微信恢复
文章于 2016年11月17日 被检测为删除。
查看原文
被用户删除
其他

《王者荣耀》首度公开PVP自动化测试方案:如何保证竞技游戏的基础体验?

2016-11-16 weien 游戏葡萄

《王者荣耀》测试过程中存在哪三大痛点?


本文由王者荣耀项目组高级测试工程师weien投稿,授权游戏葡萄发布


写在前面的话


不要期望自动化能帮你去找bug,不要觉得自动化做得越多越好,这里面的原因我相信大家或多或少都了解。本文主要是介绍王者荣耀项目,如何利用腾讯WeTest平台提供的GAutomator自动化测试框架,来解决王者荣耀项目研发测试过程中的几个痛点,从测试角度保证游戏基础体验,助力打造高品质手游。希望本文能够给大家提供一些思路。


我们遇到的问题


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


自动化测试特点


王者荣耀的更新迭代非常快,需要使用自动化来进行快速验证。中国有句话叫“上医治未病”,及时的发现bug并修复能够有效的避免发布前的紧急修复和发布延迟。自动化测试能够让测试人员更多的关注游戏功能性问题、游戏体验问题,以及将更多的时间用在问题总结之上。


基于CI的自动化测试,能够在游戏构建好之后,在1个小时左右收到当前版本的测试报告。在WeTest平台,一次测试能够覆盖Top200的手机类型,发现兼容性问题也更加的高效。


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


1. 难以复现的同步问题


王者荣耀使用帧同步技术来实现实时的PVP对战。帧同步要求所有客户端基于相同的初始状态,相同的输入,相同的处理逻辑,最终有相同的输出的同步方式,所有的客户端保证逻辑一致。服务器不做仲裁处理。这里可能因为不稳定的排序、随机数、浮点数、状态缺少检查等原因造成客户端不同步问题。


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



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


2. Android手机的适配问题


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




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


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



3. 英雄数值平衡性验证


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


构建自动化测试系统


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


自动化测试用例




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


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




比如,英雄选择看起来是这样子的,V12版本需要优先选择亚瑟和安妮。



选区的代码是这样子的:




构建自动化云测系统


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




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


自动化测试效果


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


GDOC(腾讯游戏内部开发交流大会)部分Q&A分享


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个免费内测名额。报名联系腾讯WeTest助手(QQ:800024531)或访问Unity论坛置顶活动贴自助申请。



关注微信公众号“游戏葡萄”,每天获取最前瞻的游戏资讯


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存