一种通用的服务器压力测试方法及装置的制造方法

文档序号:9727242阅读:682来源:国知局
一种通用的服务器压力测试方法及装置的制造方法
【技术领域】
[0001]本申请涉及计算机网络技术领域,尤其涉及一种通用的服务器压力测试方法及装置。
【背景技术】
[0002]在网络游戏开发过程中,服务器压力测试是其中的一个重要环节。网络游戏压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。这里所指的“压力”即是不断地增加游戏里面的玩家。压力测试中的玩家,可以是真实的玩家,也可以是专用测试软件模拟出的“虚拟玩家”,这些虚拟玩家也被称为压测机器人。在同一客户端设备中可以实现大量压测机器人,采用压测机器人进行服务器压力测试,相对于由真实玩家进行压力测试,使服务器压力测试的周期及费用大大缩短,因此得到越来越广泛的应用。
[0003]现有技术中,游戏开发团队通常自行开发与项目配套的压测机器人,机器人需要依赖项目客户端或者服务器的网络包模块,耦合性强。同时不同游戏项目的压测机器人采用的开发语言也不同,有C++,java,C#等。对于一个项目开发的压测机器人无法给其他项目使用,不具备通用性。一家成规模的游戏公司往往有多个网络游戏项目在研,每个项目都需要从头实现一遍压测机器人的底层基础架构,这也是资源的一种浪费。

【发明内容】

[0004]本申请提供了一种通用的服务器压力测试方法及装置,对于不同项目的网络协议、网络包结构均能适用,从而缩短了压力测试的周期及成本。
[0005]本申请实施例提供了一种通用的服务器压力测试装置,该装置自下而上包括:收发模块、封装模块、字节解析模块、动作模块;
[0006]所述收发模块用于适配所要测试的服务器所采用的网络协议,将来自上层的网络数据包发送到服务器;或者接收来自服务器的网络数据包,并将所述网络数据包发送到上层;
[0007]封装模块,用于对来自下层的网络数据包进行解封装,将解封装得到的二进制码流发送到上层;或者对来自上层的二进制码流进行封装得到网络数据包,将所述网络数据包发送到下层;
[0008]字节解析模块,用于将来自下层的二进制码流还原成具体的网络包对象,并设置对象的属性值,同时将具体的网络包对象发送到上层,或者将来自上层的网络包对象转换成为二进制码流并发送到下层;
[0009]动作模块,用于定义虚拟用户发送每个特定网络包对象的动作,每个动作里面定义了该动作要发送的网络包对象,期望服务器返回的网络包对象,以及该动作接受的输入参数;动作模块通过输入参数以及玩家角色的属性值构造好要发送给服务器的网络包对象,并发送到下层;以及从下层接收返回的网络包对象,如果收到期望的网络包对象,认为该动作成功执行,否则认为这个动作执行不成功。
[0010]可选地,在封装模块之上,以及字节解析模块之下还包括加密解密模块,用于对来自上层的二进制码流加密,将加密后的二进制码流发送到下层,或者对来自下层的二进制码流进行解密,将解密后的二进制码流发送到上层。
[0011]可选地,所述字节解析模块所在的层进一步包括解析工具库,用于提供各种解析二进制码流的公共方法,以便字节解析模块调用。
[0012]可选地,所述收发模块包括多个收发单元,每个收发单元用于适配一种网络协议,根据服务器采用的网络协议,其中的一个收发单元处于使能状态并进行网络通信。
[0013]可选地,所述收发模块包括收发Socket单元、收发HTTP单元和收发WebSocket单
J L.ο
[0014]可选地,所述字节解析模块包括两个函数接口,一个函数接口用于通过网络包对象获得该网络包对象的二进制码流,另一个函数接口用于根据二进制码流设置网络包对象的属性值,所述函数接口采用与服务器无关的编程语言实现。
[0015]可选地,该装置进一步包括响应时间记录模块,用于记录从动作模块发送网络包对象到接收到期望服务器返回的网络包对象的时间,作为响应时间。
[0016]可选地,在动作模块之上进一步包括任务模块,用于定义虚拟用户的任务,所述任务由一系列动作组成,并加入了逻辑判断处理。
[0017]可选地,在任务模块之上,该装置进一步包括虚拟用户对象模块,用于设置虚拟用户对象的任务队列,并保存虚拟玩家角色的属性。
[0018]可选地,该装置进一步包括功能测试脚本模块和单元测试框架模块,
[0019]所述功能测试脚本模块用于存储测试所使用的用例脚本,按照用例脚本初始化虚拟用户对象,并和游戏服务器建立连接,登陆服务器并完成相应的测试任务,获取服务器返回的数据属性值,来校验服务器的功能是否正确;
[0020]单元测试框架模块用于组织功能测试。
[0021]可选地,该装置进一步包括调度模块,用于调用虚拟用户对象模块模拟出多个虚拟用户和服务器进行交互。
[0022]可选地,所述调度模块采用协程技术在多个虚拟用户的任务之间进行切换。
[0023]可选地,所述调度模块为每个虚拟用户分配执行时间段;
[0024]虚拟用户在对应的执行时间段内,处理服务器发来的消息队列包,发送心跳消息包给服务器,以及执行任务队列中的一个任务。
[0025]本申请实施例还提供了一种通用的服务器压力测试方法,
[0026]步骤Α、定义虚拟用户发送每个特定网络包对象的动作,每个动作里面定义了该动作要发送的网络包对象,期望服务器返回的网络包对象,以及该动作接受的输入参数;
[0027]步骤Β、通过输入参数以及玩家角色的属性值构造好要发送给服务器的网络包对象,将所述网络包对象转换成为二进制码流,并对所述二进制码流进行封装得到网络数据包,将所述网络数据包通过与服务器适配的网络协议发送到服务器;
[0028]步骤C、接收来自服务器的网络数据包,对所述网络数据包进行解封装,将解封装得到的二进制码流还原成具体的网络包对象,如果收到期望的网络包对象,认为动作成功执行,否则认为这个动作执行不成功。
[0029]可选地,步骤B对所述二进制码流进行封装之前进一步包括:对二进制码流加密;
[0030]步骤C所述将解封装得到的二进制码流还原成具体的网络包对象之前,进一步包括:对二进制码流进行解密。
[0031 ]可选地,该方法进一步包括:记录从发送网络包对象到接收到期望服务器返回的网络包对象的时间作为响应时间。
[0032]可选地,步骤A之前进一步包括:设置虚拟用户对象的任务队列,并保存虚拟玩家角色的属性,所述任务由一系列动作组成,并加入了逻辑判断处理。
[0033]可选地,该方法进一步包括:模拟出多个虚拟用户和服务器进行交互。
[0034]可选地,采用协程技术在多个虚拟用户的任务之间进行切换。
[0035]可选地,为每个虚拟用户分配执行时间段;
[0036]所述采用协程技术在多个虚拟用户的任务之间进行切换包括:
[0037]虚拟用户在对应的执行时间段内,处理服务器发来的消息队列包,发送心跳消息包给服务器,以及执行任务队列中的一个任务。
[0038]从以上技术方案可以看出,通过收发模块适配采用不同网络协议的游戏服务器,采用独立的封装以及重新实现网络包,从而摆脱不同项目对于网络包定义以及代码的依赖,同时辅助解析工具库,提高开发效率;为了支持服务器功能测试和压力测试,将虚拟用户发送的每个网络包设计成具体动作,将多个动作组合成了任务。动作层和任务层,支持了功能测试脚本的编写。同时也方便了压力测试调度程序进行调度。
[0039]在一些实施例中,通过采用协程技术,通过软件模拟线程,避免了机器人模拟大量用户加压时,多线程切换对物理机CPU的性能消耗。当虚拟用户没有收到期望返回的网络包时,虚拟用户会主动交出执行权,避免了为等待网络包返回而引起的执行阻塞问题。针对机器人调用,单个虚拟用户只能在分配给自己的时间片执行动作的问题,通过任务队列方式,将需要依次执行的任务放到一个队列里面,让虚拟用户按照队列进行调用。针对需要支持多人交互的压力测试场景问题,通过多人任务队列方式,将具体用户需要执行的具体任务,依次放到一个队列中,让虚拟用户按照队列进行调用。
【附图说明】
[0040]图1为本发明一个具体实施例中的压力测试装置的架构示意图;
[0041]图2为图1所示压力测试装置100通过调度虚拟用户完成压力测试的示意图;
[0042]图3为图1所示的压力测试装置100进行虚拟用户之间的切换调度的处理流程示意图;
[0043]图4为本申请实施例提供的解决多人逻辑交互的压力测试场景的实施方案示意图。
【具体实施方式】
[0044]为使本申请技术方案的技术原理、特点以及技术效果更加清楚,以下结合具体实施例对本申请技术方案进行详细阐述。
[0045]本申请实施例提供了一种通用的服务器压力测试装置,该装置自下而上包括
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1