压力测试介绍

压力测试

  • 什么是压力测试?

压力测试是给游戏进程增加并发量,强制其在高负载下运行,并观察进程性能的测试;其中游戏进程包括服务器和客户端进程。当游戏负载过高导致性能不足时,会造成进程卡顿或者崩溃,甚至是引发逻辑漏洞造成的产品损失。因此压力测试是游戏功能外放前非常重要的一个步骤,关系到玩家体验以及游戏口碑。

  • 压力测试的类型

压力测试分为四种类型:服务器压力测试、客户端压力测试、第三方服务测试和云游戏测试。

  1. 服务器压力测试

由于代码需要处理的数据量随着人数增加,因此同一时刻参与人数较多的玩法和功能容易引起服务器负载过高,如抢红包、登录排队、多人战斗等。当服务器负载高时会严重影响到玩家体验,甚至是引发逻辑错误问题。参与人数较多的重要模块外放前,对其进行服务器压力测试是必要的。

  1. 客户端压力测试

当同屏玩家数量较大,或者UI操作涉及的数据较多时,都可能引起客户端卡顿,需要模拟相应操作并进行客户端性能测试。具体玩家数量的阈值标准由游戏实际帧率情况决定。

  1. 第三方服务测试

游戏中的第三方服务是指部分通用功能的实现通过调用第三方接口完成。如充值。

  1. 云游戏测试

当云游戏平台压力过大时,可能造成排队资源无法释放、黑屏和连接服务器失败等问题。

  • 压测性能指标

压力测试时,需要关注的游戏性能数据。

  1. CPU、内存、IO和流量

当游戏并发操作数量提升时,服务器和客户端的CPU、内存、IO和网络流量都会随之增加,也可能成为游戏进程的性能瓶颈,因此需要重点关注。

  1. 游戏进程LOG信息

游戏LUA内存:LUA的collectgarbage(“count”)返回结果,如果测试过程中持续增大则说明有泄漏风险。

游戏在线人数:也是重要的性能指标,当服务器压力过大的时候可能导致玩家异常掉线。

游戏CPU:逻辑线程的CPU负载情况,数值越大则表示负载越高。

数据库待执行的查询请求数量:此数量如果一直增加,则说明当前游戏处理请求的能力跟不上请求速度,故请求会一直堆积;查询待执行越久则玩家等待越久,因此这个数量等于0或者保持在较低数值(<10)比较理想。

案例分析:在压测某个数据库操作频繁的玩法时,需要测试服务器对数据库请求的极限处理能力,以便于调整玩法 CD。一般操作是,逐步缓慢增加测试的并发数量,以保持数据库 LOG 的待执行查询数量在刚好等于 0,但是再增加并发则要排队的状态。实际操作发现难度系数较大,于是反其道而行之:让请求堆积到一定数量之后停止脚本,再根据两条 LOG 之间的变化值除以时间间隔,计算得出当前机器每秒处理数据库请求数量的上限值。

游戏DELAY:游戏逻辑推进时间落后真实时间的秒数,DELAY数值越大说明进程越卡;或者CPU虽然已经达到100%,但是DELAY一直保持较小(<1),则说明游戏可以承载当前的并发操作数量。

案例分析:
某次压测任务是,需要比较三种不同型号 CPU 处理游戏运算的性能情况。一开始的策略是,在每种型号的 CPU 上都跑相同并发数量的测试用例, 在没有 DELAY 的情况下比较 CPU 负载绝对值;但是测试结果与预期并不相符。经过分析发现,操作系统调度优化策略会导致在没有 DELAY 的情况下,CPU 负载绝对值高低并不能真实反映 CPU 性能。于是变更测试思路,改为测试在游戏出现DELAY 的情况下,比较相同时间和并发量时的 DELAY 增长幅度,最终测试结果符合预期,如图:

 

 

 

  1. 客户端帧率

对于客户端而言,帧率是最重要的性能指标。研究表明人眼可视帧数不超过30帧,因此当客户端帧率低于30帧的时候,则认为需要优化。

帧率记录最好可以覆盖多个变量,因为不同的机器配置、画面设置、可显示人数下,帧率会有比较大的差异。

  1. 游戏真实体验

真实体验也是非常重要的一环,某些问题不使用真实客户端体验可能会比较难以发现。

案例分析:在某游戏上线之前的一次登录模块压力测试中,服务器性能看起来非常良好,但是用客户端手动操作观察到,重登陆操作的队伍进度异常缓慢。分析服务器 LOG 发现,重登陆的次数远低于预期值。经过程序分析得知,是因为重登陆的请求都排队至同一个数据库连接导致。

  • 压测机器人

压力测试中普遍使用机器人模拟真实玩家进行操作,主要有两种:服务器机器人和客户端机器人。

(1)服务器机器人

是一种没有客户端的机器人,但是服务器端和正常玩家无异,通过PATCH登录流程中和客户端的交互部分创建。

优点:涉及的代码量比较少,维护方便;创建操作快捷方便,只需要一行指令;由于没有客户端,因此不需要额外的硬件资源。

缺点:1.缺少服务器和客户端进行交互的RPC操作,使得服务器负载会低于实际情况。

2.无法估计服务器和客户端通信的网络流量负载。

  3.只能通过服务器AI控制,对服务器性能有一定影响。

主要用途

  1. 客户端性能测试

涉及多玩家的外观测试,如玩家穿着特定材质时装、装备发光武器和挂饰等;或者涉及多玩家的UI界面性能测试。

  1. 服务器压力测试

多玩家参加的玩法。虽然服务器AI会占用服务器资源,但是由于AI一般运行在服务器负责逻辑计算的进程,因此可以用来压测其他服务器进程的性能,比如测试需要进行大量数据库操作的玩法。

  1. 客户端机器人

首先客户端机器人为了性能考虑,删除了非常耗费资源的渲染相关代码;其次对产品代码进行了修改,让一个客户端机器人进程里可以同时存在多个主角对象。

优点:更加真实,因为所有的客户端服务器交互部分都得以保留;由于可以用客户端AI控制,因此不会影响服务器性能。

缺点:改动的游戏代码比较多,需要一定维护成本;需要额外的硬件资源。客户端机器人目前主要用途是多人任务和战斗的服务器压力测试。

  • 压测执行

完整压力测试流程应该包括步骤为:沟通需求、明确方案、执行测试和撰写报告。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值