专栏首页优测Utest优测优分享 | 游戏的UI自动化测试可以这样开展
原创

优测优分享 | 游戏的UI自动化测试可以这样开展

对于目前的两大游戏引擎cocos-2dx、unity3D,其UI自动化测试的技术方案都已经实现。可以获取、设置UI对象的各个属性,并且可以调用UI对象及引擎的一些方法接口,实现基于引擎的UI驱动能力。有了这些能力之后,从技术上来说已经可以实现基于引擎的游戏UI自动化测试。但是单纯的UI驱动能力还不足以实施一个游戏的UI自动化测试。

UI自动化测试一般需要满足几个条件:UI相对稳定、操作过程及结果可预期、产品生命周期长。

UI相对稳定:

是指UI元素及布局在各个版本间变动不大,各个UI元素的关键属性(特别是用于唯一标识该UI元素的属性)保持稳定,其他属性可以根据需要发生变化。因为测试脚本是直接操作这些UI元素的,如果UI不够稳定,测试脚本就无法定位UI元素,也无法有效的操控UI元素。

操作过程及结果可预期:

是指交互的过程及预期结果是明确的,比如以QQ的发送文本消息功能为例,其交互过程及预期结果都是相对明确的,即使有操作分支也是有限的,可以很容易遍历。这样测试脚本的设计就比较简单,基本是线性往下执行。如果交互过程及预期结果不明确,有太多的随机性,会大大增加脚本的逻辑复杂度。过于复杂的脚本逻辑对于测试人员的能力要求高,而且会提高测试脚本的后期维护成本。

产品生命周期长:

因为UI自动化测试脚本的开发、维护成本都比较高,如果被测产品的生命周期太短,或者只发几个版本,就会导致自动化测试的投入产出比太低。

基于上述UI自动化测试的要求,我们来看看游戏的情况,一般的游戏往往不具备上述条件,常常是:UI不稳定:UI酷炫,各种特效,每个版本都会更新UI。

操作过程及结果很难预期:

游戏战斗过程充斥着各种随机性和玩家操作的不确定性,导致预期结果需要复杂的实时计算才可以得出,无法提前预期。

生命周期短:

很多游戏只有短短几个月的生命周期。这些因素都导致了游戏的UI自动化测试成本太高。

确实很多游戏不适合做UI自动化测试,但是对于一些生命周期长、收入高的游戏投入人力做UI自动化测试还是很有价值的。而且随着测试人员技能及测试工具能力的提升,一些普通游戏也可以开展部分UI自动化测试。

下面就如何开展游戏UI自动化测试简单谈谈一些个人的想法。

做任何UI自动化测试都要考虑投入产出比,我们就按投入产出比来从高到低来探讨下游戏的UI自动化测试如何开展。

1、功能逻辑明确模块UI自动化

游戏中一般只有战斗模块的功能逻辑各种不确定,其他辅助模块的功能逻辑都是比较明确的,比如登录、商城、背包、设置、社区等都跟普通的商业软件没有什么区别。

针对这些模块可以很方便的实施UI自动化测试,而且这些辅助模块占游戏的全部UI功能的比例也很高,实现UI自动化测试具有很高价值。

对于这些相对功能逻辑明确的UI模块,实施自动化测试成本是最低的,几乎不需要改动游戏代码,只需要在引擎一级简单修改就可以实现UI自动化测试。

2、简单状态机实现兼容测试UI自动化

目前针对游戏的兼容性测试有:简单的monkey test、事件录制回放。但是这两种方式有明显的不足:

简单的monkey test:

只是随机的点击UI,没有UI元素属性获取能力,更没有UI驱动能力,无法做逻辑判断,覆盖的UI深度是有限的。连简单的登录都登录不了,更不要说更深的UI。

事件录制回放:

通过事件录制、回放来实现简单hardcode的UI自动化,也不具备UI元素属性获取能力,只要UI发生简单变化就会导致自动化失败。

针对这两种方式的不足,利用基于引擎的UI驱动能力,可以开启一个子线程实时检测当前UI状态,根据不同的UI状态在主线程中执行适用于当前状态的功能脚本即可实现相对稳定的UI兼容性测试。

举个简单的例子:以UI状态来划分一般游戏中会有登录、公告、主界面、对局、结算等UI状态。

如果子线程检测到当前UI是登录,则主线程执行登录相关脚本;

如果子线程检测到当前UI是公告,则主线程执行公告相关脚本;

如果子线程检测到当前UI是主界面,则执行启动对局相关脚本;

如果子线程检测到当前UI是对局,则执行对局相关脚本(或monkey test或回放录制的脚本);

如果子线程检测到当前UI是结算,则执行结算相关脚本。

利用基于引擎的UI驱动能力,可以获取、操作UI元素,再结合一定的的逻辑判断就可以覆盖更多/更深的UI,非常适合兼容性测试。

通过简单状态级实现兼容测试UI自动化也几乎不需要改动游戏代码,只在引擎一级简单修改就可以实现。

3、结合接口实现实时性要求比较低的游戏的UI自动化

对于一些卡牌类游戏或者实时性要求不高的游戏,由于UI比较简单,战斗交互不复杂,实时性要求并不高。结合开发人员或者测试人员实现的一些接口,再加上基于引擎的UI驱动能力就可以实现功能测试的UI自动化。

如果有了关卡数据获取接口,通过该接口在进入战斗前获取到关卡数据,再结合战斗过程中的UI表现,通过一定的逻辑判断就可以实现战斗过程的UI自动化。

如果有了结算数据获取接口,通过该接口在战斗结束后获取该局的结算数据,再获取结算UI显示数据即可以验证结算结果UI显示是否正确。

这种方式只需要游戏提供接口,可能会需要改动游戏代码,如果通过协议截获的方式对游戏程序影响最小,那么对UI的驱动基本不需要改动游戏代码,只在引擎一级简单修改即可实现。

4、结合AI实现实时性要求很高的游戏的UI自动化

对于一些复杂的,对实时性要求很高的动作类游戏,比如格斗、射击类游戏,则建议结合AI来实现UI自动化测试。AI实现对实时性要求很高的战斗过程的自动化,并对外提供接口用以获取战斗数据。

利用基于引擎的UI驱动能力实现其他模块的自动化,结合AI实现战斗模块的自动化,从而实现整个游戏的UI自动化测试。

可能会有人认为:既然有了AI,就可以完全用AI实现自动化测试。

但是UI自动化测试不仅仅需要UI驱动能力,还需要自动化测试框架提供调度、执行、统计、展示等功能,这些功能显然不适合让AI来实现。AI最适合实现战斗的驱动及对外提供游戏数据获取接口。AI一般集成在游戏内部,显然不适合用来完成整个游戏的自动化测试功能。

结合AI实现的UI自动化成本是最高的,需要开发AI代码,好在一般具有一定规模的游戏开发团队也都会自己开发AI来做一些开发自测或者作为内挂提供游戏托管功能,所以只需要在这些已有的AI上扩展一些功能即可,成本也是可控的。

以上就是我对游戏UI自动化测试的一些想法,各个游戏可以根据各自项目的情况有选择性的实施投入产出比可控的UI自动化测试。

抛砖引玉,欢迎拍砖!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android碎片化之屏幕适配

    现如今,因Android系统的开放性,市场上出现了不同厂商出厂的各种android版本、分辨率、型号等设备。那对我们开发来说,碎片化绝对是一个让人头脑炸裂的问题...

    优测utest
  • 优测优分享 | 这样做测试用例评审更高效

    最近的用例评审让我感受颇深,以下是我对于测试用例评审的一些感受,发出来供大家讨论学习。

    优测utest
  • 测试人员必看-做好自动化测试的7大技能

    随着敏捷和DevOps等新时代项目开发方法逐渐取代旧的瀑布模型,测试需求在业界不断增长。测试人员现在正在与开发人员一起工作,自动化测试在许多方面极大地取代了手动...

    优测utest
  • 想在小公司混的如鱼得水,我来告诉你

    自从土哥推出「 粉丝问答 」系列文章之后,效果出乎我的意料,粉丝特别买账,原本只是在帮助粉丝解决困惑的同时,写文记录下土哥的职场生活。没想到却成了意外收获,导致...

    闰土大叔
  • 前端-现代 js 框架存在的根本原因

    我曾见过很多很多人盲目地使用(前端)框架,如 React,Angular 或 Vue 等等。这些框架提供了许多有意思的东西,然而通常人们(自以为)使用框架是因为...

    grain先森
  • UI初学者的弯路,你走过几条?

    对于初学UI设计的人而言,可能对UI具体是做什么,或者自己是否能顺利转行胜任这样的岗位存在一定的顾虑,今天我们就来重点说说UI是做什么的,以及学UI到有哪些需要...

    宇相
  • 论UI设计师的素养

    image.png 我是个产品经理,作为UI Designer的长期合作伙伴,我觉着一个合格的UI是这样的: 01 视觉过关很重要 不好看还要UI干什么,产品...

    BestSDK
  • Xcode 7 自动测试XCTestCase

    rectinajh
  • 你不知道的秘密:UI设计行业内幕!

    在2015年的时候,UI火爆了!月薪万元以下的UI设计师似乎已经难觅踪迹,很多公司开出20-30K的月薪仍然难以挖到心仪的UI人才,很多人纷纷投入设计行业。我们...

    宇相
  • Unity-Optimizing Unity UI(UGUI优化)03 Fill-rate,Canvas and Input

    随着UI shader的逐渐标准化,最大的问题是过高的填充率。这个问题是由于大量的重叠的UI元素和UI元素的相乘占据屏幕的主要部分。这些问题可能导致额外的高频率...

    祝你万事顺利

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动