一种服务器压力测试方法及装置与流程

文档序号:11432174阅读:209来源:国知局
一种服务器压力测试方法及装置与流程

本发明涉及服务器压力测试领域,具体涉及一种基于有限状态机的服务器压力测试方法及相应的装置。



背景技术:

网络游戏中会有成千上万的玩家同时对游戏服务器进行访问,服务器可能由于负载压力过大而导致响应迟缓、宕机等情况,严重影响玩家的游戏体验。因此,在网络游戏开发过程中,服务器压力测试是一个非常重要的环节。目前,网络游戏服务器压力测试主要是通过压力测试脚本来模拟玩家的操作,在同一时刻对游戏服务器发起访问,以此来估算服务器可以承载的同时访问的压力峰值,并定位服务器的性能瓶颈。

现有的压测工具(“压测”即压力测试)通常是对各个业务逻辑或子逻辑分别单独地进行测试,测试不同的功能时需要不同的压测脚本。此类设计主要有以下缺点:

1)可扩展性不强。当游戏功能扩展后,压测脚本需要大范围迭代才能满足新的压测需求;

2)难以获取压测机器人的实时运行状态。现有的压测机器人主要分为带有服务器答复检查和不带服务器答复检查两种。其中,不带服务器答复检查的压测机器人,无法获取其实际运行状态;而带有服务器答复检查的机器人,也只能获取其某个操作的执行情况,不便于查看压测机器人实际所处的状态(例如在进行组队压力测试时,压测机器人收到组队命令后一直处于未组队状态。如果采用现有的压测方法去查看压测机器人组队失败究竟是由于请求发送失败、服务器没有应答还是其他原因,需要查看大量日志才能明确压测机器人所处的实时状态)。如果在压测过程中服务器发生故障,不便于故障排查。



技术实现要素:

本发明的主要目的是提出一种基于有限状态机而设计的服务器压力测试方法,以解决现有的服务器压力测试方法存在的可扩展性不足、无法灵活适应游戏更新以及无法实时查看压测机器人运行状态的技术问题。

本发明为解决上述技术问题所提供的技术方案如下:

一种服务器压力测试方法,用于游戏服务器的压力测试,包括以下步骤:

步骤1、针对一独立的服务器压力测试任务,提取压测机器人的多个状态,用于构建一有限状态机;

步骤2、根据测试需求,定义状态之间的跳转关系,以及定义压测机器人进入各状态时需要执行的操作;

步骤3、将单个状态与进入该单个状态时需要执行的操作进行绑定,以形成一逻辑分支;

步骤4、对步骤1中所提取的所有状态均分别执行步骤3,从而形成多个逻辑分支;其中,所述多个逻辑分支基于所述跳转关系而连接形成所述有限状态机;

步骤5、根据所述跳转关系执行所述有限状态机中的所述多个逻辑分支,即实施压测机器人访问服务器的行为;

步骤6、同时启动多个压测机器人执行步骤5,以进行服务器压力测试。

本发明提供的上述服务器压力测试方法,针对某一独立的测试任务(对应于游戏中的某一功能模块),将在该游戏功能中玩家(在测试中以压测机器人来模拟玩家)所涉及的所有离散的状态集中起来,并通过定义状态之间的跳转关系和进入每个状态时需要执行的操作,根据跳转关系将这所有的离散状态及其跳转行为描述为有限状态机,只要触发有限状态机进行状态跳转,压测机器人即开始执行对应的所述操作,模拟玩家的行为访问服务器,便可进行服务器压力测试。

与现有的服务器压力测试方法相比,本发明基于有限状态机的服务器压力测试方法具有以下有益效果:

1)由于有限状态机中集中了玩家的所有状态,因此能够对所有可能的玩家行为进行服务器压力测试,具有全面覆盖的优点;

2)由于各状态是离散的,当游戏更新例如增加或减少某个业务环节时,相应的测试环节也要改变,此时只需增加/删除有限状态机中的相应状态及其对应操作即可;而现有的方法,需要对测试脚本作出大量的迭代、更新;

3)由于压测机器人在既定的各个状态之间跳转,某一时刻压测机器人的状态是固定且唯一的,这对于查询压测过程中压测机器人的实时状态非常方便,而现有技术的通过脚本进行测试的方式,无法查看目前运行到哪个状态。

更优选地,在步骤1之前还包括步骤0:

步骤0、依据游戏的不同功能,将服务器压力测试拆分为多个独立的服务器压力测试任务,针对每个独立的服务器压力测试任务来分别构建对应的有限状态机。

更优选地,步骤1中提取压测机器人的多个状态具体包括:基于唯一性进行最小粒度状态划分,枚举出在所述服务器压力测试任务中压测机器人所处的所有离散状态。

更优选地,还包括采用试错法进行状态遗漏测试,以防止进行所述枚举时状态遗漏。

更优选地,步骤2中的所述操作至少包含一次与游戏服务器的交互,所述交互包括向游戏服务器发送请求以及接收游戏服务器返回的应答。

更优选地,步骤3中通过散列的方式将单个状态与进入该单个状态时需要执行的操作进行绑定。

本发明另提出了一种服务器压力测试装置,置于一压测终端中,用于游戏服务器的压力测试,包括多个压测机器人、多个有限状态机以及用于控制所述多个有限状态机的中央控制单元;所述中央控制单元用于控制各所述有限状态机按预设的事件触发顺序进行状态跳转,以使各压测机器人根据所述状态跳转执行对应的操作,进行对服务器的访问;其中,所述操作是指根据游戏功能所定义的压测机器人进入各状态时需要执行的操作。

更优选地,各所述有限状态机分别各自连接至一控制模块,各所述控制模块具有触发接口;各所述控制模块用于接收所述中央控制单元发送的指令,并在接收到所述指令时通过调用所述触发接口来触发所述事件以驱动所述状态跳转。

更优选地,所述中央控制单元受人控制地或受定时器控制而定时地向各所述控制模块发送所述指令。

更优选地,所述中央控制单元存储预先定义的多个回调函数,并可通过回调函数触发所述事件实现所述状态跳转。

附图说明

图1是一个逻辑分支的示例图;

图2是一个有限状态机的示例图;

图3是本发明的服务器压力测试装置运行于测试终端上进行压力测试时的原理框图。

具体实施方式

下面结合附图和具体的实施方式对本发明作进一步说明。

名词解释:

压测机器人:通过压测脚本等代码逻辑控制,可以实现在远端游戏服务器上登录并模拟玩家行为的机器人。

游戏服务器的压力测试根据游戏功能的不同,包括很多测试任务,例如登录压力测试、组队压力测试、战斗压力测试等。在测试前,首先要将压测(压力测试)任务进行拆分(即分解成登录压力测试、组队压力测试、战斗压力测试等),然后针对每个独立的压测任务(例如组队压力测试任务),采用本发明提供的服务器压力测试方法(以下简称该测试方法)进行服务器压力测试。

本发明提供的服务器压力测试方法,主要用于对游戏服务器进行压力测试。该测试方法包括以下步骤1~6:

步骤1、针对一独立的服务器压力测试任务,提取压测机器人的多个状态,用于构建一有限状态机。在测试前将游戏服务器压力测试拆分为多个独立的压力测试任务之后,对每个独立的测试任务执行步骤1。提取压测机器人的多个状态具体方法例如可以是:基于唯一性进行最小粒度状态划分,枚举出在某一压测任务中压测机器人所处的所有离散状态,例如在战斗压力测试任务中,压测机器人可能处于助攻状态、死亡状态、休眠状态等。这样一来,就可以得到压测机器人的状态的集合。

步骤2、根据测试需求,定义状态之间的跳转关系,以及定义压测机器人进入各状态时需要执行的操作。针对步骤1中得到的集合中的状态,根据游戏规则,定义各状态之间存在的跳转关系以及进入各状态时要执行的操作,所述操作至少包含一次与游戏服务器的交互,所述交互包括向游戏服务器发送请求以及接收游戏服务器返回的应答。例如,定义压测机器人进入成为队长状态时需要执行的操作是向服务器发起成为队长的请求并接收该请求的应答,并在收到服务器的应答后加以队长头衔的操作。

步骤3、将单个状态与进入该单个状态时需要执行的操作进行绑定,以形成一逻辑分支。如图1所示,将状态s1以及进入状态s1时需要执行的操作a1绑定成为一个逻辑分支。

步骤4、对步骤1中所提取的所有状态均分别执行步骤3,从而形成多个逻辑分支;其中,所述多个逻辑分支基于所述跳转关系而连接形成所述有限状态机。

步骤5、根据所述跳转关系执行所述有限状态机中的所述多个逻辑分支。

步骤6、同时启动多个压测机器人执行步骤5,以进行服务器压力测试。

下面,以组队压力测试为例来详细说明该测试方法进行压力测试的过程。

针对组队压力测试任务,提取压测机器人在进行组队的过程中可能所处的所有状态s1、s2、s3、…,这些状态是离散的。在提取状态时,要保证状态划分到最小粒度且每个状态具有唯一性,例如在进行团队副本测试时,如果定义一个状态是“在副本中”,该状态包含一系列粒度更小的状态(这些更小的状态例如是:在副本中“移动”、“释放技能”、“死亡”等),因此“在副本中”并不能准确地体现机器人所处的状态,也就是说所定义的状态“在副本中”并不是最小粒度的划分,因此它也不符合唯一性。基于此种状态拆分,枚举出在组队压力测试任务中,压测机器人所涉及的所有状态,为避免有遗漏的状态未列出,可通过试错法进行测试和补充。

在完成上述的状态划分后,定义状态之间的跳转关系以及压测机器人进入每个状态时要执行的操作。根据游戏的功能,例如跳转关系包括s1→s2→s5→s3→s4→s5,s1→s3→s4→s5→s3→s4→s5;而进入每个状态时要执行的操作是这样定义的,进入状态s1时要执行操作a1(例如进入死亡状态要执行操作“血量减为0”),可以表示为s1(a1),同理有,s2(a2),s3(a3),s4(a4),s5(a5)。需要注意的是,进入某个状态时要执行的操作a1可以是一个操作,也可以是多个操作的集合,但应当至少包括一个与服务器交互的操作(例如:向游戏服务器发送请求以及接收游戏服务器返回的应答)。接着,将每个状态与其对应的操作分别都进行绑定(可通过散列的方式进行绑定),以分别形成一个逻辑分支,从而形成多个逻辑分支。一个逻辑分支的示例如图1所示,表示无论从其它哪个状态进入状态s1,都将执行操作a1。如图2所示,所形成的多个逻辑分支基于前述列举的跳转关系形成一个有限状态机m1,图中的e1、e2、e3、e4、e5、e6表示事件,例如将状态s1跳转到状态s2定义为事件e1,将状态s2跳转到状态s5定义为事件e2。更优选地,可以通过触发事件来实现相应的状态跳转,例如当触发事件e1时,状态从s1跳转到s2。

有限状态机可基于c、c++、java、python等多种形式实现,本发明的有限状态机实现方式可以采用但不限于以上任何一种。

本发明的测试方法可运行于一压测终端例如电脑上,以形成一压力测试装置,在电脑上进行服务器压力测试。该压力测试装置包括多个压测机器人(可简称“机器人”)、多个有限状态机p以及用于控制所述多个有限状态机的中央控制单元g;所述中央控制单元g用于控制各所述有限状态机p按预设的事件触发顺序进行状态跳转,以使各压测机器人根据所述状态跳转执行对应的操作,进行对服务器的访问;其中,所述操作是指根据游戏功能所定义的压测机器人进入各状态时需要执行的操作。需要说明,所述中央控制单元g具体是通过程序代码实现的一个用于宏观控制所述多个有限状态机进行状态跳转的类(class),并以操作窗口显示于压测终端上。

在一种实施例中,所述中央控制单元通过如下的方式实现对各有限状态机的控制:首先,各有限状态机分别各自连接至一控制模块c,各所述控制模块c均具有触发接口(例如trigger接口)。通过中央控制单元向各控制模块c发送指令,各控制模块c在接收到所述中央控制单元g发送的指令时,通过调用trigger接口来触发一事件以驱动所述状态跳转。每次所发送的指令是依据事件触发顺序而编写,以使所述触发接口能够按照事件触发顺序来触发相应的事件,从而使得有限状态机按照预设进行状态跳转。此处所述的控制模块具体是通过程序代码实现的一个类(class),主要作用是:中央控制单元g在控制有限状态机时可以通过该控制模块来进行事件的触发。如图3所示为一种压力测试示例的原理框图,在开始测试时可以同时启动多个进程(每个进程代表一个独立的压测任务),且每个进程包含多个线程(每个线程对应一个压测机器人),这样可以保证测试的并发性,提高测试效率。

以前述的组队压力测试任务为例:

在初始化时,所有机器人均已完成账号登录后,并处于登陆初始状态s1,此时向所有已登录机器人发起进行组队压力测试的任务,即触发一事件来驱动机器人开始进行状态跳转。具体地,在测试任务开始时,由中央控制单元g向所有连接于有限状态机的控制模块发送指令,以调用各控制模块的trigger接口来触发事件e1,驱动各状态机完成从状态s1到s2的跳转,同时机器人执行操作a2,进入状态s2。所述中央控制单元g受人控制地或受定时器控制而定时地向各所述控制模块发送所述指令。例如,根据预先设定的事件触发顺序(例如e1→e2→e6→e4→e5),每隔2秒,人为地通过中央控制单元向各控制模块发送一次指令,来驱动有限状态机进行状态跳转,从而形成机器人访问服务器的行为。也可以通过定时器让中央控制单元自动定时地发送所述指令。另外,还可通过回调函数实现状态的跳转,例如,当操作a1执行完毕后机器人处于状态s1,此时通过回调函数触发事件e1,实现状态s1到s2的跳转。

本发明实施例提供的测试方法和测试装置,就是通过有限状态机的状态跳转来控制机器人,使机器人模拟玩家进行对服务器的访问,从而进行服务器压力测试。当游戏有更新使得机器人的状态需要增加删除时,只需要增加/删除状态及其操作以及该状态与其他状态存在的跳转关系即可。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1