浅谈如何做客户端性能测试
作为一名游戏测试工程师除了重点关注功能测试外,我们还需要关注弱网、性能、兼容、安全等其他的专项测试,最近所在项目组正在专项优化游戏客户端的性能表现,这里就简单分享下我在做客户端性能测试的一些方法。
1. 客户端性能不足的表现
游戏的性能测试包含服务器性能测试及客户端性能测试,服务器性能测试主要是在游戏上线前对服务器的承载能力做测试,也就是负载测试和压力测试,目的是为了发现服务器的性能瓶颈,确保游戏能在预设的并发下正常的进行游戏,而一款游戏是否能够流畅运行,除了服务端的支持外,客户端的性能表现也不容忽视,也许大家听到过游戏玩家激烈游戏中突然冒出一句“** 掉帧了”,这所说的就是客户端性能表现不足,严重影响游戏体验。
尤其是在竞技游戏中,如果没有一个稳定的帧率输出,那么游戏感受只能是让人奔溃,有的同学可能会问,游戏卡顿和帧率有什么关系,帧率指以帧称为单位的位图图像连续出现在显示器上的频率,也就是平均一秒内,游戏更新显示了多少张画面。
2. 游戏表现卡顿的原因
对于游戏而言,如果fps<30的话,游戏就会表现的不连贯,高的帧率可以得到更流畅更逼真的显示效果,一般来说30fps就不会感受到明显的卡顿,但如果能提升至60fps便可以明显提升画面的逼真程度,超过75fps就不会有明显的提升了,如果帧率超过屏幕刷新率只会浪费图形处理的能力,浪费资源,所以一般的手机游戏都会锁60帧。
上图引用prefdog中画面生成传递流程机制图,首先我们要明白frametime就是指两帧画面间隔耗时,也可简单认为单帧渲染耗时,玩家看到的是屏幕刷新间隔时间,不是GPU渲染完成间隔时间,从图中可看出画面B帧在GPU渲染耗时大于显示器刷新间隔,相当于一次画面没有刷新,当出现多次没有画面没有变化时,游戏的画面表现可能就会出现卡顿了。
了解了游戏卡顿的原因,那么作为游戏测试怎样提供测试数据供研发方优化游戏表现,这里简单谈谈我个人的一些经验。做游戏性能测试前首先需要了解我们需要关注的基础指标。
3. 测试需要关注什么
FPS帧率:应用程序每秒钟显示的帧数
CPU占用率:应用程序占用的CPU资源情况
内存:应用程序存放到系统内存中占用情况
GPU:占用率:应用程序占用GPU资源情况
流量:单位时间内通过网络端口传输的数据总量
电量:单位时间内应用程序消耗的电荷数量
现在市面上能采集这些数据的工具也非常多,常见的emmagee、gt、wetest、prefdog等等,经过对比使用,个人习惯用prefdog,优势是手机不需要root,数据完整,工具简单易用,能输出完整的性能报告且可读性高。
搜索prefdog下载工具,有windows和mac版本,windows平台下载好解压包,双击打开prefdog.exe应用程序
连接的方式有两种,一种是直接插usb链接,另一种是wifi链接,需要注意的是usb模式无法进行耗电量测试,因为连着usb一直也是充电状态,这个数值也没多大作用。
Prefdog会采集到jank(1s内卡顿次数)数据,因为帧率高也不能完全代表流畅或者不卡顿,比如fps40帧,前200ms只渲染了1帧,后800ms渲染了39帧,虽然帧率40但依旧会卡顿,上面画面生成传递流程机制图中有说到原理。
PerfDog Jank计算方法:
同时满足以下两条件,则认为是一次卡顿Jank.
当前帧耗时>前三帧平均耗时2倍。
当前帧耗时>两帧电影帧耗时(1000ms/24*2=84ms)。
跑完预先规划的场景后点击右上角暂停按钮会弹出保存框,点击确认后可在web云平台查询报告记录
在做客户端性能前需要准备高中低三档测试设备,每个项目在设立之初也会定义最低可支持的设备,在做性能测试时需要保证设定之初最低设备也能流畅运行,才能对后续良好运营打下基础。
需要注意的是,目前市面上机型众多,有的品牌会有自己的cpu,这里就需要针对性的进行测试。市面上最多的处理器应该是骁龙处理器,常见的还有华为自家的麒麟、联发科、苹果等。以多多自走棋为例在中低端处理器骁龙435机型上表现基本良好,但对标骁龙中高端处理器骁龙665和骁龙650的华为麒麟710和helio p20的表现却差了很多。cpu排行数据来自:(http://www.mydrivers.com/zhuanti/tianti/01/)。这时我们就需要针对不同的手机品牌处理器进行测试对比分析,将数据提供开发便于优化解决。
查验客户端性能也需要设置不同的场景,还是以自走棋为例,基本将游戏划分为局内和局外两种场景,局外主要是各个外围系统的功能,如商城,通行证,仓库等。局内主要就是战斗了,这也是对性能消耗较大的地方,我在做对比分析的时候会将主要信息粘贴至共享文档,便于快速对比分析,需要详细数据时在查看链接,近期所涉及的主要为局内操作场景,针对不同优化包进行同一个流程输出客户端性能报告,数据保存共享文档便于项目组查看。
作为一名游戏测试,不仅在版本设立之初或者性能专项优化时需要关注性能数据,在平时的版本迭代也需要计划性的做性能测试。比如每个大版本的迭代,或者有引擎升级,美术效果迭代等重大改动,性能测试就变得非常重要,能防止这些重大改动导致的性能偏差盲区,及时发现问题专项去解决优化。
PS:
我们是行者AI,我们在“AI+游戏”中不断前行。
如果你也对游戏感兴趣,对AI充满好奇,那就快来加入我们(hr@xingzhe.ai)。