腾讯优测优分享 | 游戏的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自动化测试。
抛砖引玉,欢迎拍砖!
加入腾讯优测官方群:214483489 与大咖们分享技术与时讯!
文/ 腾讯 方李志
_______________________________________________________________________________________
腾讯优测是专业的移动云测试平台,为应用、游戏、H5混合应用的研发团队提供产品质量检测与问题解决服务。不仅在线上平台提供自动化兼容性测试、云手机远程租用与调试、漏洞分析、自动化测试工具Xtest等多种质量检测工具,更为VIP客户配备了专家团队提供定制化综合测试解决方案。
腾讯优测优分享 | 游戏的UI自动化测试可以这样开展的更多相关文章
- 腾讯优测-优社区干货精选 | 那些年,我们在Android机型适配上遇到的坑之Camera拍照时快门咔嚓声
文/腾讯优测研发工程师 吴宇焕 优测小优有话说: android机型适配的坑自然是不少,不想掉坑快来优测优社区~ 现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相时快门声音很响,想 ...
- 腾讯优测-优社区干货精选 | android开发在路上:少去踩坑,多走捷径(下)
文/腾讯公司 陈江峰 优测小优有话说: android开发的坑自然是不少,不想掉坑快来优测优社区~ 6.Android APP开发中其它需要提醒的问题 android4.4在UI线程无法进行网络操作. ...
- 优测优社区干货精选|老司机乱谈编辑器之神——vim
文 / 腾讯 吴双 前言 优测小优 有话说: 腾讯优测只有应用测试大神?不不不,我们还有各种研发大牛! *** vim 是一种信仰,我自从2004年有了这个信仰,已经12个年头了.本文介绍了学习vim ...
- 腾讯优测优分享 | Android性能测试工具化实现
腾讯优测专业的移动云测试平台,自动化测试提供性能测试数据,云真机实时输出性能数据,让测试更简单! 1.Android性能测试介绍 提到Android性能测试,我们总免不了俗地要首先介绍下Android ...
- 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
腾讯优测是专业的android自动化测试平台,拥有上千款真机,彻底解决android碎片化问题! 这里我要说的不是闪光灯的硬件特征,也不是说底层驱动的原理,我只是跟大家聊一聊在项目中遇到的一些关于闪光 ...
- 腾讯优测优分享 | 这些年,我们追过的 fiddler
腾讯优测是专业的移动云测试平台,提供全面兼容性测试,远程真机租用,漏洞分析等多维度的测试服务,旗下优分享提供大量的移动研发及测试相关的干货! 一.fiddler原理简介 fiddler是目前最强大最好 ...
- 腾讯优测优分享 | 探索react native首屏渲染最佳实践
腾讯优测是专业的移动云测试平台,旗下的优分享不定时提供大量移动研发及测试相关的干货~ 此文主要与以下内容相关,希望对大家有帮助. react native给了我们使用javascript开发原生app ...
- 【腾讯优测干货分享】安卓专项测试之GPU测试探索
本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ffdc0569a1191bce8a63 作者:章未哲——腾讯SNG质 ...
- 【腾讯优测干货分享】如何降低App的待机内存(四)——进阶:内存原理
本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/3FTPFvZRqyAQnU047kmWJQ 1.4进阶:内存原理 在 ...
随机推荐
- Java 找不到主类错误
Eclipse 运行java 程序,突然出现错误:没有或找不到主类. 在网上找了好多办法,都不行. jdk环境配置啊-->这个一般不会出错,因为以前都不会出现这种问题. 查看项目配置啥的--&g ...
- C学习
\a:警报 1.exit(),提前结束程序.include <stdlib.h> 2.getch()无缓存.getchar()有缓存,多条连用时注意末尾换行符否则始终.putchar(). ...
- js图片拖放原理(很简单,不是框架,入门基础)
<html> <meta> <script src='jquery-1.8.3.min.js'></script> <script> /* ...
- Leetcode_实现zigzag的转换_20161228
#include<iostream> //#include<valarray> #include<vector> #include<string> us ...
- c语言问卷调查
你对自己的未来有什么规划?做了哪些准备? 找一家公司实习积攒创业基金.努力学习专业知识,从各方面完善自身,参与各项活动如辩论赛,竞赛等锻炼自己. 2.你认为什么是学习?学习有什么用?现在学习动力如何? ...
- 配置指定使用tcc编译器编译nim程序
1.前言 nim是什么? nim是一门静态编译型语言,语法类似python,nim的代码被翻译成C代码再被C编译器编译成可执行文件.因此nim的可执行文件比较小,性能应该也不错. 最简单的nim程序就 ...
- script标签里的defer属性
入职新公司,看代码的时候注意到有的script标签中有一个defer属性,查了一下.在这里分享出来. 需要注意的有三点,其中前两点是在错误中分辨出来的: 错误来源:http://www.w3schoo ...
- 从angularJS改道Vue.js,趟过第一个坑!
vue采用 new vue()初始化,显然vue内部没有类似jquery ready函数的机制,在文档加载完成后再执行初始化. 今天新学习vue,由于vue采用es5的特殊机制更新UI,我不确定ipa ...
- Frame动画实战
Android动画分为Tween动画和Frame动画,Tween动画主要包括图片的放大缩小.旋转.透明度变化.移动等等操作:Frame动画则简单得多了,就是把一张张的图片连续播放产生动画效果. 本节主 ...
- Windows7+VS2010下OpenGL的环境配置
http://johnhany.net/2014/01/environment-for-opengl-with-vs2010/ OpenGL(Open Graphics Library)是一个开放的. ...