手游与App测试如何快速转型? —— 过来人科普手游与App测试四大区别
随着智能设备的普及和移动互联网的兴起,各家互联网巨头纷纷在往移动端布局和转型,同时初创的移动互联网公司也都盯着这个市场希望分一杯羹。在这个大环境下,互联网的重心已经慢慢从Web端转向了移动端,而移动端的软件测试也变得越来越重要了。
在移动端的软件里,手游又是其中非常大的一块。从下面的图可以看出,智能手机的普及和手游玩家的增长是密切相关的:
加入鹅厂前,笔者曾经长期从事手机App的测试开发工作。1年前加入鹅厂后转行做了手游测试工作,通过摸索实践,发现两者在相同的测试理论基础之上,其实有着非常不同的测试场景和测试需求。下面就为大家整理一下其中的基础部分,涵盖了两者在手工和自动化测试方面的不同,希望能帮到想从App测试转到手游测试的朋友们。
1 APP自动化测试完全不同于手游自动化测试
手机App和手游的开发技术不同,这导致了两者的自动化测试技术是截然不同的。
以安卓开发举例,手机App一般使用Android SDK开发,使用Java编写。通过Android提供的服务,我们可以获取App当前窗口的视图信息,进而查找和操作按钮等控件,以完成自动化测试,如Uiautomator。这个过程是标准化的,从技术上来说没有任何难度,因此各个公司各个App自动化测试的方法都大同小异。
但手游的开发却不是这样。手游一般使用引擎开发,现在著名的有cocos2d和unity3d。两者都是使用引擎自带的语言进行开发,主流的分别是c++和c#,虽然在开发过程中也有按钮等控件的概念,但当运行时由引擎渲染后就变成了一副简单的图片:
图:游戏中看到的只是一副简单的图片,按钮已经不是控件了
因此,我们就无法通过Android自带的服务来找出游戏中的按钮了,也就没法进行常规的自动化测试。
如果有人说自己的技术是基于Android原生控件识别的,那就一定做不了手游自动化测试。这个问题大家都在探索解决方案,我们现在通过注入引擎SDK到安装包反射出引擎层控件的方法进行自动化测试,实践下来具有很好的效果。
2 玩法不同导致功能测试更复杂
2.1 随机性
游戏的场景和过程是动态并且伴有随机要素的,这体现在两点。
- 你重复玩一个游戏关卡,很可能两次出现敌人以及游戏过程是不同的。
- 你玩一个手游的时候不进行操作,敌人和周围的场景也在时刻发生改变。
这两点对自动化测试带来了极大的挑战,如果测试脚本写的不够灵活,很容易导致上一次运行成功的脚本这一次就无法运行了。我们需要在测试脚本里适当的加入探索和自适应的功能。
App测试就没有这个问题,大部分App的使用方式都是静态且可以重复的。因此自动化测试可以完全按照测试脚本进行编写并执行。
2.2 探索性
手游和App的第二个玩法不同在于探索性。App一般都是功能性的,好的App需要把它的功能简单明了地告诉用户。而游戏重在娱乐性,需要给玩家一定的探索要素。因此在做手游测试的时候,我们需要测试游戏的用户帮助说明是否清晰,同时后续的游玩和探索过程和前面给出的说明之间是否有合理联系,规则的指示是否有足够的提示性。
2.3 难度测试
App希望做的越简单,用户的使用成本越低越好。而手游是有难度设置的。我们在做手游功能测试的时候,会把资源和等级调到最大以方便后期功能的执行,但当所有的功能测试都做完后,我们需要把自己的资源初始化,以“回归”一个普通玩家的水平,通过普通玩家的视角来查看游戏的难度提升是否合理,资源分配是否均匀。
2.4 关卡测试
App的使用是功能性的,一个功能的重复使用总是一样的。而手游具有关卡的概念,即便是同一种玩法,关卡和关卡之间也有细微的差别,前面的关卡测试正确了,并不表示后面的关卡一定是正确的。作者曾经碰到过一个手游的Bug,当游戏进行到某个后期关卡时,游戏一定会崩溃。而导致这个Bug的原因也很简单:这个关卡的图片资源在打包客户端的时候没有加入。因此当我们玩前面的关卡时并不会触发这个Bug,但一到后面的关卡就出错了。
这类Bug虽然原因简单,但确实非常难测试到。因为各个关卡的玩法虽然都一致,但一个游戏的关卡数却是非常多。如果我们要遍历所有的关卡走一遍,那耗费的人力成本将是非常大的。对于这类重复性的关卡测试,建议使用自动化脚本进行遍历。
2.5 PvP测试
App的使用普遍是单人的,而手游往往有玩家对战的PvP模式,好的手游更是具有实时的PvP模式。由于两个玩家实时进行游戏合作或者对战,因此网络延迟的测试就变得非常关键了。我们在测试中需要模拟不同的网络对游戏延迟的影响,观察两个玩家的状态和数据是否一致,同时体验网络延迟对游戏手感的影响,这在传统的App测试中是完全不需要的。
3 手游测试更看重商业类测试
3.1 支付测试
现在的手机App基本上以广告收入为主,并不会直接向用户收取费用。而手游的直接消费群体就是玩家,在游戏过程中伴随着玩家大量的支付操作。由于这类操作和玩家的金钱密切相关,因此支付类的测试在任何游戏中都要做最高优先级的保证。
我们需要在各种严格的环境下保证玩家的支付操作被正确执行或者得到了正确的失败提醒。例如当网络状况很差的时候,用户在支付界面的多次确认操作必须只能被执行一次。当用户在支付过程中断网,未收到货物时,游戏需要在玩家的网络恢复后第一时间补发货物,并作出明显的提示。另外支付操作需要在大量不同系统、不同型号的手机上进行适配操作,以降低出错的可能性。
3.2 安全测试
对于大多数非支付类App来说,安全并不是一个特别大的问题,只需要保证登录鉴权的安全性即可。App是一个方便用户的工具,没有人会在用自己的计算器App时候锁定内存,或者把加法操作变为乘法操作。
手游在这点上很不一样,手游与玩家在某种程度上具有“对抗”要素,玩家要战胜游戏关卡获得奖励,而游戏关卡要设置一定的难度阻止玩家。如果游戏的外挂横行,玩家不需要任何对抗就能获得胜利,一方面会对游戏的平衡性造成影响,使得某些玩家的资源大大超过别的玩家;另一方面从长远看会使得这个游戏变得无趣,从而造成玩家的离开。
对游戏进行安全测试的普遍方法为通过锁定/修改内存来锁定和修改游戏资源、通过修改游戏内存来改变游戏逻辑简化游戏流程等。
3.3 收益测试
一般的手游App没有付费用户的概念,所有的用户都是使用同一个功能。即便有付费用户,他们和普通用户的区别也非常明显:付费用户可以使用一些额外功能。手游的付费用户和非付费用户的界线并没有这么明显。手游里根据用户付费的多少分为非R用户,小R用户,大R用户等。我们需要在策划的时候就计算好这些付费用户的投入和回报,并在测试的过程中验证这些。举两个例子,如果一个大R用户获得的回报,非R用户只用很少的时间就能获得,那大R用户一定不满意,这个收费项目的设置就是不合理的;如果两个购买项的金额相同,而收益明显不同,那也会造成玩家的不满。
4 后台性能不同
虽然我们这里讨论App和手游主要是前端客户端,但其实两者的后台性能也有区别。相比一般的App,手游的在线人数明显更有规律性且更集中,一般在中午12点和晚上8点是两个明显的高峰。因此手游的性能测试就要贴合这种用户模型,能够处理极值情况下的服务器性能负载。当然,两者都会受到节假日较大的影响,这个对于App和手游来说是一致的。
也来谈下相似之处
除了上面提到的这么多手游测试和App测试的不同点,其实两者也有很多相似之处,在测试的时候都不能遗忘,例如手机来电、短信的中断测试,碎片化的兼容性测试(尤其是安卓),客户端运行在手机上的性能测试,网络较差或者网络频繁切换的弱网络测试,已经用户体验和UI测试等。
手游与App测试如何快速转型? —— 过来人科普手游与App测试四大区别的更多相关文章
- RHEL6.4 + Oracle 11g DG测试环境快速搭建参考
环境现状: 两台虚拟主机A和B: 1. A机器已安装ASM存储的Oracle 11g 实例 参考:http://www.cnblogs.com/jyzhao/p/4332410.html 2 ...
- 如何快速开发出一个高质量的APP——创业谈
[起] 今早,一个技术群里有人想快速做出一个app,然后询问技术方案,大概是这样, 拿到了200w投资,期望花20w两个月先做出一个app,包括iOS,Android, 先,呵呵,一下, 大概预估了一 ...
- 【创业积累】如何快速开发出一个高质量的APP
[起] 今早,一个技术群里有人想快速做出一个app,然后询问技术方案,大概是这样, 拿到了200w投资,期望花20w两个月先做出一个app,包括ios,android, 先,呵呵,一下, 大概预估了一 ...
- Java面向对象作业-用接口方式测试向下转型
Java面向对象作业-用接口方式测试向下转型 根据视频的里实例 我们直接修改Test2测试方法: package com.java1234.chap03.sec13; public class Tes ...
- 1-开发共享版APP(搭建指南)-快速搭建到自己的服务器
该APP安装包下载链接: http://www.mnif.cn/appapk/IotDevelopmentVersion/20190820/app-debug.apk 或者扫描二维码下载 注:该下载可 ...
- itest(爱测试) 4.3.0 发布,开源BUG 跟踪管理 & 敏捷测试管理软件
itest 简介:查看简介 test 开源敏捷测试管理,testOps 践行者.可按测试包分配测试用例执行,也可建测试迭代(含任务,测试包,BUG)来组织测试工作,也有测试环境管理,还有很常用的测试度 ...
- 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用
[源码下载] 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用 作者:weba ...
- 021-Spring Boot 测试,Junit方式使用,mock方式,Controller测试
一.概述 二.Junit方式使用 2.1.基本使用 eclipse在新建的类上,右键→new→Junit Test Case,修改一下Source folder,选择src/test/java,下一步 ...
- WEB测试应该注意哪些地方,怎样才能做好WEB测试
基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战.基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否 ...
随机推荐
- hibernate 一对多操作(级联操作)
一对多级联操作 1. 级联保存 复杂写法 Company company = new Company(); company.setcName("Hello"); company. ...
- (转)利用ant在Mac 下自动化打包签名Android程序
1.创建一个android项目 参数说明:-k /--package 为命名空间(包名)-a /--name 工程名-p /--path 项目 -t 为目标平台的版本编号 命令:./android c ...
- javax.management
软件包 javax.management 的描述 提供 Java Management Extensions 的核心类. Java Management Extensions (JMXTM) API ...
- C#委托与事件之观察者Observer设计模式
前言 委托: 委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针. 或委托可以看成一种表示函数的数据类型,类似函数指针. 事件是特殊的委托 观察者模式:两种角色:(1)Subj ...
- [SVG] Simple introduce for SVG
Just like create html page, you can create a svg tag by: <?xml version="1.0" encoding=& ...
- 基本SQL语句练习之SELECT
一.SQL Plus连接sqlplus:以命令行方式连接数据库sqlplusw:以窗口登录方式连接数据库conn sys/password as sysdba;show userselect * fr ...
- AlwaysON同步过程
<SQL Server 2012实施与管理实战指南>中指AlwaysON同步过程如下: 任何一个SQL Server里都有个叫Log Writer的线程,当任何一个SQL用户提交一个数据修 ...
- django: db howto - 2
继 django: db howto - 1 : 一 操作数据库的三种方式: [root@bogon csvt03]# python2.7 manage.py shell Python 2.7.5 ( ...
- hdu 1076
水题 AC代码: #include <iostream> using namespace std; int main() { int i,k,t,y,n; cin>>t; wh ...
- 读取oracle页面或者进程卡住不动(死锁)
oracle最坑爹的地方:你insert update delete之后 或者kill死锁的时候记得一定要提交事务不然就是死锁卡在那里了 记住 kill死锁也是要提交事务的 select * ...