首页 > 其他分享 >游戏压力测试的设计和执行

游戏压力测试的设计和执行

时间:2024-02-12 22:33:05浏览次数:26  
标签:负载 游戏 玩家 测试 压力 服务器 执行

压力测试是一类测试手段的总体称谓。无论是压力测试(stress testing)还是负载测试(load testing)都可以统称为压力测试。但是不同类型的测试,有着各自不同的侧重点,最终这些侧重点会指导我们如何规划测试方案和执行手段。

压力测试(stress testing)的目的主要是在超负载、高并发的情况下,查看服务器程序运行情况和可恢复性。

负载测试(load testing)的目的主要是通过不断增加负载,最终找到一个既可以使服务器程序正常运行,又不会影响服务器硬件性能的平衡点。

数据容量测试的目的主要是查看在长期高并发或长期高负载的状态下,数据存储的事务存储瓶颈和对服务器磁盘存储、CPU使用、内存使用甚至是网络带宽占用的情况。

游戏压力测试的设计和执行

游戏都要做什么压力测试

我们把游戏可以看做是一个特殊类别的软件。那么针对游戏,我们可以分成这么几部分来看。

第一就是游戏本体,分为服务器程序、数据库和客户端程序三部分。

第二就是平台系统,比如帐号验证系统、付费系统、游戏后台系统、客服系统等等。

第三就是周边服务类内容,比如某些独立于游戏之外的页面运营活动等等。

根据这样的分类,我们可以大致做一下划分:

针对游戏本体,我们需要对服务器程序进行应用层级的压力测试,对数据库的消息、事务处理以及磁盘存储进行压力测试;

针对平台系统,我们需要对系统与游戏之间的接口进行压力测试;

针对周边内容,则要根据各自不同的内容单独设计测试方案。

一、如何设计压力测试方案

第一步,确定待测试系统的架构。不论是基于C/S的游戏本体,还是B/S的页面活动,作为一个测试,首先要深入了解待测试系统的架构组成,熟悉每个进程的功能和特点,理清各个进程之间的逻辑关系。

第二步,在基于对服务器功能和架构足够了解的基础上,对游戏场景进行拆解。比如帐号的登录与校验过程、支付交易过程、主线或支线任务流程、交互系统(好友、公会等)流程等等,因为不同的场景,会涉及到不同的服务器进程,针对每个进程进行单独压力测试,是我们进行压测的最重点工作之一。

第三步,在拆解出不同的玩家使用场景后,针对每个场景,分析出玩家的操作过程是什么?这里可以通过多种手段进行分析。比如画一个时序图,来确定消息处理的步骤;又比如说利用黑盒测试的方法,实际去跑一遍具体功能,来模拟玩家行为;或者是类比市场上同类型游戏的玩家的真实反馈;甚至还可以收集游戏在删档内测阶段的玩家数据或服务器日志来进行分析。总之,我们模拟的行为越接近玩家真实的行为,对于测试的结果则越为准确和有效。

第四步,对于流程有了清晰判断以后,自然也就可以找到压力可能会存在在什么地方了。当然,由于不同的语言特性不同,对CPU、内存的分配使用和回收机制都会有所不同,所以需要每个项目进行单独分析。除了利用自己的经验加以判断外,还需要和开发频繁沟通,确认我们的判断是否准确。另外要特别注意的一点是,所有的单点服务器都是压测的重点,往往是单点服务器在上线运营期间会产生大量性能问题。

第五步,找到了压力重点以后,我们要分析一下这个问题点的压力属于什么类别。一般来说,压力类别有两种:高并发和高负载。高并发的测试需要我们不断提高测试的QPS,最终找到压力阈值,但并不需要长时间测试;而高负载的测试则相反,它需要我们在一个相对稳定的压力情况下,持久的去执行测试用例(一般视功能来定,最长可能需要12小时以上),来查看系统在长时间运行下的服务器性能反馈。

第六步,在完成上述步骤后,就可以制定出有针对性的测试方案,并加以执行了。这里特别需要注意的是有两点:第一是测试环境必须真实,线上使用什么服务器配置,测试环境就要采用什么服务器配置,否则测试是没有任何意义的;第二是严禁闭门造车,一个人设计出来的测试方案也是没有任何意义的,一定要充分和开发、和策划进行沟通,确定你的方案的准确性和可靠性。

简单概述,就是要确定架构、模块拆解、分析流程、找出痛点、划分类别、制定方案。

二、常用的压力测试工具

商业化工具:有很多已经上线的商业化工具可以供我们使用。比如Loadrunner、Jmeter、Burp Suite等,还有像wetest平台提供的云性能测试等等,都可以在大部分非游戏场景顺利完成我们的压力测试工作。

开发提供的压测工具:但是由于游戏程序的特殊性,大部分情况下,游戏本身的程序,通过上面的商业化工具是不能够很好完成测试的。这时候就需要开发同学要单独写出一套压测工具(俗称robot,机器人工具),开玩笑的说,机器人工具更像是一套官方认证的外挂。它可以更为真实的模拟玩家的游戏行为,而且针对性更强,更容易发现服务器的压力问题。

自动化脚本:上面的机器人程序功能确实强大,但是开发成本很高,所以对于一些较为简单的场景,或者是接口测试,我们可以自行编写自动化脚本来替代机器人,这样效率更快。

人:如果上述工具还是无法准确找到问题,或者说对于开发已经解决的压力问题无法稳定复现,那么就有必要考虑通过真人测试的方式来解决了。我们可以借助公司内部的同事或者专门从事这方面工作的一些大型公会的力量,来完成这类型的测试。

三、压力测试报告

任何测试的目的都不是制造问题,而是要定位并解决问题。

所以压力测试报告最重要的内容,就是要根据测试结果,分析出这一次测试的重点问题是什么?为什么会出现这样的bug?下一步应该建议开发同学做出哪些修改?哪些内容在系统设计上存在不合理性?最终向项目组给出结论:测试结果是否满足上线条件。

不过对于游戏来说,由于游戏迭代较快,内容变更几率更大,所以并不一定要开发修复掉所有压测问题,才能算是测试通过。我们还可以通过其他方式来解决问题。比如使用SLB负载均衡的方式解决单点服务器风险,提高服务器配置来应对上线的并发压力。

总的来说,压力测试报告,是要辅助项目组来定位重大问题、标明技术风险、提供解决方案的一部文档。

四、总结

如果说正常的游戏测试,是要验证程序的正确性和稳定性,那么压力测试恰恰相反,它是要找到服务器性能的瓶颈,以尽早把服务器压爆作为一种“乐趣”。

做压力测试,逆向思考极为重要,就是要培养自己冷静、“消极”的去看待自己眼前的待测目标。因为几乎每一位开发同学,都非常自信的认为自己写出来的代码是完美的。不过实际上并不存在完美的程序。任何完美的程序,仅仅是因为我们还没有测出它的问题。

标签:负载,游戏,玩家,测试,压力,服务器,执行
From: https://www.cnblogs.com/R-bear/p/18014208

相关文章

  • 【性能测试】Mysql之慢查询01
    一、Mysql常用监控指标慢查询SQL慢查询:指执行速度低于设置的阀值的SQL语句作用:帮助定位查询速度较慢的SQL语句,方便更好的优化数据库系统的性能1、开启MySQL慢查询日志参数说明:slow_query_log:慢查询日志开启状态[ON:开启,OFF:关闭]slow_query_log_file:慢查询日志存放位置......
  • Service Control Manager (SCM):Windows 自带的服务控制管理器(SCM)是一个命令行工具,用于
    ServiceControlManager(SCM):Windows自带的服务控制管理器(SCM)是一个命令行工具,用于安装、启动、停止、删除和查询系统中的服务。您可以使用sc命令来执行这些操作,以及查看服务的状态和配置。描述:    SC是用来与服务控制管理器和服务进行通信    的命令行程......
  • Maven执行Reimport命令报错:See logs for details
     参考:https://www.cnblogs.com/huanshilang/p/11557642.html参考2:https://blog.csdn.net/h2677lucy/article/details/120642945......
  • SQL语句执行顺序相关问题
    注意本文是SQL执行顺序,不是MySQLServer内部执行流程。MySQL并非像PostgreSQL(被认为是最接近SQL标准的数据库之一)一样严格按照SQL标准,MySQL执行引擎会根据查询的具体情况和优化策略来决定具体的执行顺序,所以SQL执行顺序是理论顺序。书写顺序select...from...join...on...wher......
  • FreeSWITCH在session上执行特定dialplan
    操作系统:CentOS7.6_x64 FreeSWITCH版本:1.10.9日常开发中,会遇到需要在已存在的session上执行特定拨号方案的情况,今天整理下这方面的内容,我将从以下几个方面进行描述:实验环境准备基于transfer实现基于execute_extension实现基于transfer和execute_extension实现......
  • 【数据库】postgressql设置数据库执行超时时间
    在这篇文章中,我们将深入探讨PostgreSQL数据库中的一个关键设置:SETstatement_timeout。这个设置对于管理数据库性能和优化查询执行时间非常重要。让我们一起来了解它的工作原理以及如何有效地使用它。什么是statement_timeout?statement_timeout是一个PostgreSQL服务器参数,用于设......
  • 为什么测试老是背锅。
    作为一名测试,没有背过锅的测试不是一名好测试!!!哈哈,这当然是一个玩笑话,不过也缺失反映出了很多问题。如果互联网是一个新型行业,那么测试就是互联网中的新型职业了!!!更新!!!测试在互联网中的地位呢,相信我不说大家也明白一个项目的四个环节:需求、开发、测试、运维开发无疑是重中之重了,测试......
  • 图上的游戏 题解
    「2020集训队论文」图上的游戏。算法\(1\):给定点集\(S\),\(|S|=n\),其中有\(m\)个好点。每次可以询问指定点集中是否存在好点,求所有好点。询问次数\(O(\min\{m\logn,n\})\)。对\(S\)分治,若当前不存在好点则退出。每个好点被询问\(\lceil\logn\rceil\)次,分治次......
  • celery 5.3.6在windows中运行收到任务不执行
    命令:```celery-Ayour_projectworker--concurrency=2-Peventlet-linfo```1.`celery`:这是用于管理Celery任务的命令行实用程序。2.`-Ajavdb`:指定Celery应用程序实例。3.`worker`:告诉Celery启动一个工作进程。4.`--concurrency=2`:设置工作进程的数量为2。根据......
  • 杀人游戏
    注意,在调查前应该有一个定下来的顺序,就是不管这张图是哪一种都按这个顺序进行调查由题意,这\(n\)个人当中一定有一个人是杀手那么就相当于有\(n\)张图,其中每张图都有且仅有一个黑点(剩余都是白点),且这些图的黑点都不同(黑点就是杀手)首先我们肯定要保证知道杀手,所以一定只会询问入度......