游戏服务器的测试方法、客户端、服务器及系统与流程

文档序号:12363400阅读:574来源:国知局
游戏服务器的测试方法、客户端、服务器及系统与流程

本发明涉及计算机系统的测试领域,尤其涉及一种游戏服务器的测试方法、客户端、服务器及系统。



背景技术:

模糊测试是一种通过向目标系统提供非预期的输入并监视异常结果的方法,常常用于检测软件安全漏洞。通常,模糊测试包括如下的过程:自动或半自动的生成随机数据输入到一个程序中,然后监视程序异常,如崩溃、断言失败等,得到测试结果并存储和显示。

在现有的对于游戏服务器的模糊测试中,由于无法获得游戏协议结构,导致模糊测试只适用于自主研发的游戏应用程序,限制了模糊测试的应用范围。此外,模糊测试采用对游戏协议数据进行完全随机的填充方式,由于游戏协议中包含多个异常值,游戏服务器需要对这多个异常值进行检查才能做出响应,并且,当游戏服务器宕机后,无法从多个异常值中确定使得游戏服务器宕机的那个异常值,从而导致测试效率较低。



技术实现要素:

有鉴于此,本发明提供了一种游戏服务器的测试方法、客户端、服务器及系统,能够提升测试效率和准确度。

本发明的技术方案是这样实现的:

本发明提供了一种游戏服务器的测试方法,测试服务器查找得到游戏客户端所基于的协议的函数,并根据函数获得协议的协议基础结构;测试客户端每次进行测试时,执行如下处理:从测试服务器拉取协议基础结构,根据 协议基础结构生成合法游戏协议包;对所生成的合法游戏协议包进行异常值填充,得到异常游戏协议包;及,通过向游戏服务器发送异常游戏协议包和合法游戏协议包,测试得到游戏服务器的状态。

本发明还提供了一种测试客户端,包括:拉取模块、生成模块、异常值填充模块、发送模块、接收模块、判断模块;其中,测试服务器查找得到游戏客户端所基于的协议的函数,并根据函数获得协议的协议基础结构;每次进行测试时:拉取模块,用于从测试服务器拉取协议基础结构;生成模块,用于根据拉取模块拉取的协议基础结构生成合法游戏协议包;异常值填充模块,用于对生成模块生成的合法游戏协议包进行异常值填充,得到异常游戏协议包;发送模块,用于向游戏服务器发送异常游戏协议包和合法游戏协议包;接收模块,用于接收游戏服务器的反馈;及,判断模块,用于根据接收模块接收的反馈,判断得到游戏服务器的状态。

本发明又提供了一种测试服务器,包括:查找模块,用于查找得到游戏客户端所基于的协议的函数;解析模块,用于根据查找模块得到的函数,解析获得协议的协议基础结构;存储模块,用于存储解析模块得到的协议基础结构;其中,在每次测试时,测试客户端从测试服务器拉取协议基础结构,根据协议基础结构生成合法游戏协议包,对合法游戏协议包进行异常值填充,得到异常游戏协议包,并通过向游戏服务器发送异常游戏协议包和合法游戏协议包,测试得到游戏服务器的状态。

本发明还提供了一种测试系统,包括:游戏服务器、测试客户端和测试服务器;其中,测试服务器,用于查找得到游戏客户端所基于的协议的函数,并根据函数获得协议的协议基础结构;测试客户端,用于,每次进行测试时,从测试服务器拉取协议基础结构,根据协议基础结构生成合法游戏协议包,对所生成的合法游戏协议包进行异常值填充,得到异常游戏协议包,并通过向游戏服务器发送异常游戏协议包和合法游戏协议包,测试得到游戏服务器的状态。

与现有技术相比,本发明提供的测试方法不仅适用于自主研发的游戏程序,也适用于所代理的第三方的游戏程序,能够避免传统测试中随机填充多个异常值导致测试效率低的问题,更快地发现游戏服务器程序漏洞的速度,提升测试效率和准确度。

附图说明

图1为本发明实施例所涉及的实施环境示意图;

图2为依据本发明一实施例的测试方法的流程示意图;

图3为依据本发明一实施例的测试方法的协议基础结构的示意图;

图4为依据本发明另一实施例的测试方法的流程示意图;

图5为依据本发明一实施例的测试方法的注入界面示意图;

图6为依据本发明一实施例的测试方法的原生协议数据的内容示意图;

图7为依据本发明一实施例的测试方法的异常值配置文件的示意图;

图8为依据本发明一实施例的测试方法的时序图;

图9为依据本发明又一实施例的测试方法的流程示意图;

图10a为依据本发明一实施例的测试方法的用户界面示意图;

图10b为依据本发明一实施例的测试方法的测试执行界面示意图;

图10c为依据本发明一实施例的测试方法的测试结果界面示意图;

图11为依据本发明一实施例的测试客户端的装置结构示意图;

图12为依据本发明又一实施例的测试客户端的装置结构示意图;

图13为依据本发明一实施例的测试客户端的设备结构示意图;

图14为依据本发明一实施例的测试服务器的装置结构示意图;

图15为依据本发明一实施例的测试服务器的设备结构示意图;

图16为依据本发明一实施例的测试系统的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例所涉及的实施环境示意图。参见图1,该测试系统包括:游戏服务器101、游戏客户端102、测试客户端103和测试服务器104。其中,游戏服务器101和游戏客户端102进行数据交互,为用户提供网络游戏等服务。游戏客户端102提供图形用户界面以便用户进行输入操作,同时播放各种场景、动作与特效等。游戏服务器101的功能包括实现与游戏客户端102之间的通信、验证、数据处理等。

此外,测试客户端103和测试服务器104进行数据交互,完成对游戏服务器的测试。其中,测试客户端103以注入的方式将自己的程序注入到游戏客户端102中,使得测试客户端103能够访问游戏客户端102的所有内存空间,便于后续直接调用游戏客户端的相关函数,完成发送游戏协议包等测试工作。测试服务器104用于存储相关的协议数据结构、协议数据以及测试结果等。

本发明中,测试服务器104可以通过网络和测试客户端103进行通信,也可以和测试客户端103进行本地通信。

上述游戏客户端可以是单独的游戏播放和输入设备,也可以是任一具有数据计算处理功能的设备,包括但不限于台式计算机、智能手机、掌上电脑、平板电脑等。

图2为依据本发明一实施例的测试方法的流程示意图。参见图2,该方法包括:

步骤201、测试服务器查找得到游戏客户端所基于的协议的函数,并根据该函数获得协议的协议基础结构。

在一实施例中,测试服务器通过对游戏客户端所基于的协议的函数进行解析,得到协议基础结构,并进行存储。

例如,可以从游戏客户端所基于的协议函数的参数(例如,函数的原型)中得到协议原始结构,然后测试服务器用脚本以递归的方式将协议原始结构解析为协议基础结构。

在一实施例中,上述游戏客户端所基于的协议可以为传输控制协议(TCP)或者用户数据报协议(UDP)。游戏客户端根据所基于的协议定义了一个或多个函数以完成相应的游戏功能。

图3为依据本发明一实施例的测试方法的协议基础结构的示意图,其中包括协议函数的标识ID、协议函数名称以及解析后的协议基础结构。每个协议基础结构包含一个或多个基础数据结构。例如,对于协议函数ID为1时,其对应的协议基础结构包含两个基础数据结构:布尔型bool和整数型int。

测试服务器将协议函数的标识ID、协议函数名称以及解析后的协议基础结构保存到数据库中,以便测试时为测试客户端提供该协议基础结构。

测试客户端每次进行测试时,执行如下步骤202、203和204。

步骤202、测试客户端从测试服务器拉取协议基础结构,根据协议基础结构生成合法游戏协议包。

在一实施例中,测试客户端从测试服务器拉取解析后得到的协议基础结构,在内存中为该协议基础结构构造相应的缓冲区(buffer),即在内存中构造存放该协议基础结构的一块连续内存数据块。

进一步地,测试客户端从测试服务器拉取原生协议数据,使用原生协议数据对所构造的协议基础结构对应的缓冲区进行数值填充,从而得到了合法游戏协议包。

步骤203、测试客户端对所生成的合法游戏协议包进行异常值填充,得到异常游戏协议包。

步骤204、测试客户端通过向游戏服务器发送异常游戏协议包和合法游 戏协议包,测试得到游戏服务器的状态。

游戏服务器在收到异常游戏协议包后,对其进行处理。若游戏服务器处理完该异常游戏协议包后,仍能正常工作,但不做任何响应,那么测试客户端将无法获知该游戏服务器状态是否异常。因此,测试客户端向游戏服务器发送异常游戏协议包之外,还发送合法游戏协议包,若游戏服务器处理完异常游戏协议包后状态为正常,其在收到合法游戏协议包后,会向测试客户端反馈对应于该合法游戏协议包的确认响应,从而使得测试客户端获知游戏服务器的状态。

在本发明实施例中,通过测试服务器查找得到游戏客户端所基于的协议的函数,并获得协议基础结构,使得该测试方法不仅适用于自主研发的游戏程序(一般能够获得游戏协议源码),也适用于所代理的第三方的游戏程序(通常无法获得游戏协议源码);通过测试客户端从测试服务器拉取协议基础结构,根据协议基础结构生成合法游戏协议包,对所生成的合法游戏协议包进行异常值填充,得到异常游戏协议包,通过向游戏服务器发送异常游戏协议包和合法游戏协议包,测试得到游戏服务器的状态,能够避免传统测试中随机填充多个异常值导致测试效率低的问题,更快地发现游戏服务器程序漏洞的速度,减少测试时间,提升测试效率。

图4为依据本发明另一实施例的测试方法的流程示意图;

步骤401、测试客户端将自身注入到游戏客户端中。

此处的注入是指将测试客户端的程序加载到游戏客户端的内存中,使得测试客户端能够访问游戏客户端的所有内存空间,便于后续执行测试工作时能够直接获取到游戏客户端的相关函数。

图5为依据本发明一实施例的测试方法的注入界面500的示意图。参见图5,在注入界面500中,在启动注入程序时,将在启动配置窗口501中根据用户的输入完成相关的配置。具体如下:

首先,用户登陆游戏,然后打开注入程序,显示注入界面500和启动配 置窗口501。用户在方框502中输入或者选择游戏进程名,同时在方框503中显示用户所选择的游戏进程名的当前版本,这样就确定了要注入到的游戏客户端对应的游戏。在方框504中用户输入需要注入的测试客户端的程序的动态链接库(DLL)文件路径,或者通过点击方框505在本地选择测试客户端的程序的DLL文件路径,这样也确定了需要注入的测试客户端的程序。用户点击方框506后启动注入程序,从而完成了测试客户端到游戏客户端的注入过程。

步骤402、测试客户端收集由注入到的游戏客户端产生的原生协议数据,将原生协议数据上传给测试服务器。这里,已注入的测试客户端会自动收集游戏客户端运行中产生的原生协议数据。

在执行完步骤401后,测试客户端能够访问游戏客户端的所有内存空间,可以收集由游戏客户端产生的原生协议数据。该原生协议数据可以为基于TCP或者UDP的数据。该原生协议数据可以包括原生协议请求数据,即游戏客户端希望从游戏服务器处理的请求数据,例如,拉取好友信息、创建房间、发送聊天消息等。

图6为依据本发明一实施例的测试方法的原生协议数据的内容示意图,其中包括该原生协议数据对应的协议函数名称、基础数据结构及对应的数据类型和取值。图6所示的原生协议数据是请求游戏服务器处理攻击的事务,包括攻击目标序号标识、攻击者序号标识、攻击结果、攻击类型等基础数据结构。

在具体应用时,一个游戏包括很多条协议,测试客户端可以收集在日常功能测试中触发的原生协议,将这些原生协议数据上传给测试服务器,并存储在数据库中。然后,在执行游戏服务器测试时,测试客户端再从测试服务器中拉取这些原生协议数据。

步骤403、测试客户端获得所注入到的游戏客户端的公共发包函数。

在执行完步骤401后,测试客户端能够访问游戏客户端的所有内存空间,可以获得游戏客户端的公共发包函数。该公共发包函数是指游戏客户端发送 所有的游戏协议都会调用的函数。

在一实施例中,游戏客户端的公共发包函数可以通过如下方式获得:利用调试工具通过游戏客户端的相关文件逆向找到游戏客户端的公共发包函数。例如,利用程序动态调试(OD)工具对游戏客户端的程序数据库(PDB)文件或者协议的可扩展标示语言(XML)文件进行逆向分析,从而找到游戏客户端公共发包函数。其中,PDB文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接。

步骤404、测试服务器根据游戏客户端的公共发包函数查找得到游戏客户端所有的协议函数,获得协议基础结构。

根据在步骤403中获得游戏客户端的公共发包函数的方法,测试服务器也可以事先得到该游戏客户端的公共发包函数,进而查找得到游戏客户端所基于的协议的所有函数。

在一实施例中,测试服务器可以利用分析工具查看游戏客户端的公共发包函数的调用关系,得到游戏客户端所基于的协议的函数。

例如,测试服务器通过调用反汇编静态分析(IDA)工具,利用IDA工具中的应用程序接口(API),查看游戏客户端的公共发包函数的调用关系,从而找到游戏客户端所基于的协议的所有函数。

步骤405、测试客户端从测试服务器拉取协议基础结构,在内存中构造相应的缓冲区。

步骤406、测试客户端从测试服务器拉取原生协议数据,使用原生协议数据对所构造的协议基础结构对应的缓冲区进行数值填充,得到合法游戏协议包。

在执行完步骤402后,测试服务器已经存储了原生协议数据。那么,测试客户端从测试服务器拉取原生协议数据,根据原生协议数据里的协议函数名称找到对应的协议基础结构,然后对所构造的协议基础结构对应的缓冲区进行初始化,即将原生协议数据填充到缓冲区中,就得到了包含相应协议基 础结构的合法游戏协议包。

例如,图3中协议函数ID为2时的协议函数名称与图6中示出的协议函数名称是相同的,即为“RequestProjectHit”,那么测试客户端将图6中基础数据结构的取值填充到图3中协议函数ID为2的协议基础结构对应的缓冲区中,从而得到了协议函数为“RequestProjectHit”的合法游戏协议包。

步骤407、测试客户端对所生成的合法游戏协议包进行异常值填充,得到异常游戏协议包。

测试客户端以基础数据结构为单位读取异常值配置文件中的异常值,对合法游戏协议包进行异常值填充,得到异常游戏协议包。

在一实施例中,在测试客户端中预先存储异常值配置文件。该异常值配置文件可以由专业测试人员根据测试经验制定,例如,针对不同的数值类型,主要包含了测试程序最容易出问题的边界值、异常值等。通过步骤401中将测试客户端注入到游戏客户端的过程,完成该异常值配置文件的加载。

图7为依据本发明一实施例的测试方法的异常值配置文件的示意图。参见图7,针对每个基础数据类型列出了所对应的异常值的各种可能数值。例如,对于整数型(int)(对应图7中基础数据类型ID为1),有异常值0、-1(代表负值)、2147483647(代表边界值)、-2147483649(代表边界值)等。对于字符串(string)类型(对应图7中基础数据类型ID为10),所对应的异常值的数值包括特殊字符、字符串长度、转译符号、结构化查询语言(SQL)等。

在进行异常值的填充时,对于每个合法游戏协议包的协议基础结构所包含的一个或多个基础数据结构(如图3所示),测试客户端以该基础数据结构为单位,根据该基础数据结构对应的基础数据类型读取异常值配置文件的异常值,然后将读取的异常值填充到基础数据结构中,得到一个异常游戏协议包。然后,逐个读取异常值依次填充到每个基础数据结构中,以生成多个异常游戏协议包。这样保证每次发出的异常游戏协议包中仅包含一个异常值, 游戏服务器在接收到该异常游戏协议包后,可以仅针对该一个异常值进行处理。

图6中所示的第一个基础数据结构“数据长度”为short类型,图7中第四个基础数据类型为short类型,那么从其对应的异常值中读取一个异常值,作为图6中所示的第一个基础数据结构“数据长度”的取值,从而完成了异常值的填充,将合法游戏协议包转换成异常游戏协议包。

步骤408、测试客户端调用游戏客户端的公共发包函数,向游戏服务器发送异常游戏协议包和合法游戏协议包,测试得到游戏服务器的状态。

通过步骤403的逆向分析找到了游戏客户端的公共发包函数,也就确定了公共发包函数的地址,同时保存此时数据寄存器的值。例如,该数据寄存器为ECX寄存器,是一种重复前缀指令和循环指令的内定计数器,在调用公共发包函数时该ECX寄存器中保存该公共发包函数所在对象的地址。因此,所保存的ECX寄存器的值即为游戏客户端的公共发包函数所属的对象的指针。

这样,既确定了游戏客户端的公共发包函数地址,也找到了游戏客户端负责处理发包的对象,就可以调用游戏客户端的公共发包函数了。具体在调用时,可以将该公共发包函数中表示发包内容的参数指针指向步骤405中已经构造好的游戏协议包所在的内存缓冲区,就可以按照游戏客户端发包的正常流程,对异常游戏协议包和合法游戏协议包进行数据加工处理、数据加密等操作,然后发送给游戏服务器。

游戏服务器在接收到异常游戏协议包后,对异常游戏协议包中的一个异常值进行处理。若测试客户端在预定时间间隔内收到游戏服务器反馈的对应于合法游戏协议包的确认响应,则判断游戏服务器的状态为正常;否则,若测试客户端在预定时间间隔内没有收到任何响应,表明游戏服务器在处理异常游戏协议包后出现错误或者宕机,则判断游戏服务器的状态为异常,此时测试客户端能够根据发送的异常协议游戏包,确定对应的协议函数以及基础 数据结构,分别作为异常协议和异常参数记录在测试结果中。

通过本发明的实施例,将测试客户端注入到游戏客户端中,使得测试客户端能够访问游戏客户端的所有内存空间,收集由所注入到的游戏客户端产生的原生协议数据,并且方便调用游戏客户端的公共发包函数用于异常游戏协议包和合法游戏协议包的发送,使得测试人员不需要在执行测试之前实现模拟游戏登陆流程中登录请求、拉取人物信息、任务信息、地图信息等等一系列步骤,解决了模糊测试中在执行测试之前所需的繁琐工作,提供了针对游戏服务器的一键自动化测试方案,降低了测试的时间成本和人工成本,提升了测试效率。

此外,在生成异常游戏协议包时,每个异常游戏协议包仅且只有一个异常值,游戏服务器在接收到该异常游戏协议包后,仅需要对该一个异常值进行处理,能够有效减少测试时间,同时在发现游戏服务器状态异常时,能够精准定位导致游戏服务器异常状态的异常函数以及异常参数。

图8为依据本发明一实施例的测试方法的时序图。如上所述,由于游戏服务器收到异常游戏协议包后不一定会给游戏客户端反馈响应,可以通过在测试客户端中添加监测线程,不间断地向服务器发送合法游戏协议包以请求游戏服务器反馈响应。参照图8,包括如下步骤:

步骤801、测试客户端的发送线程向游戏服务器发送第一异常游戏协议包。

步骤802、测试客户端的监测线程向游戏服务器发送合法游戏协议包。

在步骤801发送第一异常游戏协议包后,在第一预定时间间隔后测试客户端的监测线程向游戏服务器发送合法游戏协议包。例如,该第一预定时间间隔可以为50ms。

在具体应用中,该合法游戏协议包可以为游戏心跳包,一种专门用于客户端和服务器之间检测状态的数据包,其中不包含异常值。例如,遵循TCP协议中的心跳包机制,具有一定的心跳频率(即预定周期)。

步骤803、游戏服务器运行状态正常,向测试客户端反馈确认响应。

在步骤801游戏服务器收到了第一异常游戏协议包后,对其进行处理。若游戏服务器处理完该异常游戏协议包后,仍能正常工作,比如没有出现任何错误或者没有宕机,那么该游戏服务器在收到合法游戏协议包后,会向测试客户端反馈对应于该合法游戏协议包的确认响应。

例如,在具体应用中,游戏客户端向游戏服务器发送合法游戏协议包,请求购买物品,服务器返回确认响应,表示购买成功,游戏客户端收到表示购买成功的确认响应后,把请求购买的物品提供给游戏玩家使用。

步骤804、测试客户端在接收到游戏服务器反馈的确认响应后,判断该游戏服务器的状态为正常。

步骤805、测试客户端的监测线程通知测试客户端的发送线程,向游戏服务器发送下一个异常游戏协议包。

步骤806、测试客户端的发送线程向游戏服务器发送第二异常游戏协议包。

测试客户端的发送线程在收到测试客户端的监测线程发送的通知后,可以立即向游戏服务器发送第二异常游戏协议包。

其中,该第二异常游戏协议包和步骤801中发送的第一异常游戏协议包不同。例如,在具体应用时,第一异常游戏协议包可以包括登录协议;第二异常游戏协议包可以包括购买道具协议。并且,第一异常游戏协议包和第二异常游戏协议包所包含的异常值不同。

步骤807、测试客户端的监测线程向游戏服务器发送合法游戏协议包。

其中,设置第二预定时间间隔,测试客户端的监测线程可以在该第二预定时间间隔内按照预定周期依次发送多个合法游戏协议包,每次发送的合法游戏协议包可以是相同的。例如,该第二预定时间间隔可以为5s,该预定周期可以为50ms。

如图8所示,在步骤807a向游戏服务器发送合法游戏协议包后,在预定 周期内,若没有收到游戏服务器的任何反馈消息,那么按照该预定周期在步骤807b向游戏服务器继续发送合法游戏协议包,依次不断发送。

当然,测试客户端的监测线程可以在该预定时间间隔内只发送一个合法游戏协议包,然后等待游戏服务器的反馈。

步骤808、若在预定时间间隔内没有收到游戏服务器的反馈,测试客户端的监测线程判断游戏服务器状态为异常,并将测试结果写入测试日志。

其中,测试结果可以包括测试时间、服务器状态、该异常游戏协议包所包含的异常协议和异常参数等。

步骤809、测试客户端的监测线程向测试客户端的发送线程发送通知,告知游戏服务器状态为异常。

步骤810、测试客户端的监测线程将测试日志上传给测试服务器。

步骤811、测试服务器将接收到的测试日志进行存储。

在本发明实施例中,通过在测试客户端中添加监测线程,在测试客户端的发送线程发送异常游戏协议包后,能够不间断地向游戏服务器发送合法游戏协议包。通过能否接收到游戏服务器对合法游戏协议包做出的反馈能够及时获知游戏服务器的状态,从而有效定位游戏服务器是否出现异常,提高了测试方案发现问题的能力,提升测试效率。

图9为依据本发明又一实施例的测试方法的流程示意图。参见图9,该方法包括如下步骤:

步骤900、提供用户操作界面,并接收用户输入的操作。

在下面所述的步骤901至908中,通过步骤900提供的用户操作界面,接收用户输入的操作,显示测试过程和测试结果。

步骤901、将测试客户端注入到游戏客户端中。

此步骤和步骤401的描述相同,在此不再赘述。

步骤902、执行游戏服务器测试。

图10a为依据本发明一实施例的测试方法的用户界面1010示意图。如图 10a所示,用户可以点击执行测试按钮1011,测试客户端将自动执行上述步骤405-408所述的操作,在此不再赘述。

此外,在图10a中,方框1012显示出测试服务器的历史测试日志,包括收集测试结果的数目,上次测试的时间和结果等。

图10b为依据本发明一实施例的测试方法的测试执行界面1020示意图。如图10b所示,方框1021显示正在执行测试,方框1022显示正在执行的测试协议,即所发送的异常协议包所对应包含的协议函数,方框1023显示已执行测试的数量以及此时的测试时间,同时提供按钮1024暂停和按钮1025取消。其中,发送一次异常游戏协议包,并测试得到游戏服务器的状态被统计为一次测试。

步骤903、显示测试结果,写入测试日志,并将测试日志上传给测试服务器进行存储。

执行完测试后,提供用户界面,显示测试的测试结果。测试结果可以包括测试时间、游戏服务器的状态(正常或异常),所发送的异常游戏协议包所包含的异常协议和异常参数等测试结果记录在测试日志中。

图10c为依据本发明一实施例的测试方法的测试结果界面1030示意图。如图10c所示,在方框1037中显示了测试结果的详细信息。从中可以得知,导致服务器宕机的异常游戏协议包是依据异常协议SendMotionItemBuy,并且当“道具ID”这个异常参数的值等于-46982759(即在步骤407所填充的异常值)时,导致服务器宕机。

步骤904、查看历史测试日志。

测试结束后,测试人员可以通过历史测试日志查看近期的测试结果。如图10c所示,在方框1031中显示了历史测试日志,包括测试时间1032和测试结果1033。

步骤905、查看是否测试出游戏服务器异常。若是,执行步骤907;否则,执行步骤906。

步骤906、显示测试完成,游戏服务器状态正常。

步骤907、选择重新测试。

如图10c所示,若测试人员希望进一步检查某个异常测试结果,例如测试时间为10月15日11:30:13、测试结果为“服务器宕机”的测试结果,则点击详情1034,在方框1037中查看此时的异常协议和异常参数等。通过点击按钮1035,可以选择重新测试。

在一实施例中,在执行重新测试时,参照图8,测试客户端的监测线程无需发送合法游戏协议包,可以只由测试客户端的发送线程发送之前导致游戏服务器异常的那个异常游戏协议包,即第二异常游戏协议包,重新确认游戏服务器的状态。

当然,用户也可以选择按钮1036关闭此界面,不进行重新测试。

步骤908、显示测试完成,发现游戏服务器异常。

通过选择重新测试,测试人员再次确定游戏服务器异常,从而可以采取相关措施对游戏服务器进行修复。

在本发明实施例中,若通过测试得到游戏服务器状态异常,给测试人员提供用户界面,根据异常协议和异常参数等可以选择重新进行测试,对游戏服务器的状态进行再定位,重现异常情况,提供了精准监测游戏服务器出现异常的功能,方便测试人员的操作,提升了测试效率。

图11为依据本发明一实施例的测试客户端1100的装置结构示意图,包括拉取模块1110、生成模块1120、异常值填充模块1130、发送模块1140、接收模块1150以及判断模块1160;其中,测试服务器查找得到游戏客户端所基于的协议的函数,并根据函数获得协议的协议基础结构;

每次进行测试时:

拉取模块1110,用于从测试服务器拉取协议基础结构;其中,测试服务器查找得到游戏客户端所基于的协议的函数,并根据函数获得协议的协议基础结构;

生成模块1120,用于根据拉取模块1110拉取的协议基础结构生成合法游戏协议包;

异常值填充模块1130,用于对生成模块1120生成的合法游戏协议包进行异常值填充,得到异常游戏协议包;

发送模块1140,用于向游戏服务器发送异常游戏协议包和合法游戏协议包;

接收模块1150,用于接收游戏服务器的反馈;及,

判断模块1160,用于根据接收模块1150接收的反馈,判断得到游戏服务器的状态。

图12为依据本发明又一实施例的测试客户端1200的装置结构示意图,测试客户端1200在图11所示的测试客户端1100的基础之上,还包括:

注入模块1210,用于将测试客户端1100注入到游戏客户端中;

收集模块1220,用于收集由注入模块1210注入到的游戏客户端产生的原生协议数据;

相应地,发送模块1140,进一步用于将收集模块1220收集的原生协议数据上传给测试服务器;

拉取模块1110,进一步用于从测试服务器拉取原生协议数据;

生成模块1120,用于根据拉取模块1110拉取的原生协议数据对协议基础结构进行填充,得到合法游戏协议包。

在一实施例中,图12所示的测试客户端1200还包括:

构造模块1230,用于在内存中为拉取模块1110拉取的协议基础结构构造相应的缓冲区;

相应地,拉取模块1110,进一步用于从测试服务器拉取原生协议数据;

生成模块1120,用于根据拉取模块1110拉取的原生协议数据对构造模块1230构造的缓冲区进行数值填充,得到合法游戏协议包。

在一实施例中,接收模块1150,用于接收游戏服务器响应于接收到的合 法游戏协议包而发送的反馈;

判断模块1160,用于根据接收模块1150接收的反馈,若在预定时间间隔内收到游戏服务器反馈的对应于合法游戏协议包的确认响应,则判断游戏服务器的状态为正常,否则,判断游戏服务器的状态为异常。

在一实施例中,图12所示的测试客户端1200还包括:

界面模块1240,用于提供用户操作界面,并接收用户输入的操作;

注入模块1210用于响应于用户操作,确定游戏进程名和测试客户端的文件路径;根据游戏进程名和测试客户端的文件路径,将测试客户端注入到游戏客户端中。

在一实施例中,图12所示的测试客户端1200还包括:

界面模块1240,用于提供用户操作界面,并接收用户输入的操作;

重新测试模块1250,用于若判断模块1160判断游戏服务器的状态为异常,响应于用户操作,重新进行至少一次测试。

图13为依据本发明一实施例的测试客户端1300的设备结构示意图。该测试客户端1300可包括:处理器1310,存储器1320,端口1330以及总线1340。处理器1310和存储器1320通过总线1340互联。处理器1310可通过端口1330接收和发送数据。其中,

处理器1310用于执行存储器1320存储的机器可读指令模块。

存储器1320存储有处理器1310可执行的机器可读指令模块。处理器1310可执行的指令模块包括:拉取模块1321、生成模块1322、异常值填充模块1323、发送模块1324、接收模块1325和判断模块1326。其中,

拉取模块1321被处理器1310执行时可以为:从测试服务器拉取协议基础结构;其中,测试服务器查找得到游戏客户端所基于的协议的函数,并根据函数获得协议的协议基础结构;

生成模块1322被处理器1310执行时可以为:根据拉取模块1321拉取的协议基础结构生成合法游戏协议包;

异常值填充模块1323被处理器1310执行时可以为:对生成模块1322生成的合法游戏协议包进行异常值填充,得到异常游戏协议包;

发送模块1324被处理器1310执行时可以为:向游戏服务器发送异常游戏协议包和合法游戏协议包;

接收模块1325被处理器1310执行时可以为:接收游戏服务器的反馈;及,

判断模块1326被处理器1310执行时可以为:根据接收模块1325接收的反馈,判断得到游戏服务器的状态。

在一实施例中,存储器1320存储的处理器1310可执行的指令模块还包括:注入模块1327、收集模块1328、构造模块1329、界面模块1301和重新测试模块1302。其中,

注入模块1327被处理器1310执行时可以为:将测试客户端1300注入到游戏客户端中;

收集模块1328被处理器1310执行时可以为:收集由注入模块1327注入到的游戏客户端产生的原生协议数据;

构造模块1329被处理器1310执行时可以为:在内存中为拉取模块1321拉取的协议基础结构构造相应的缓冲区;

界面模块1301被处理器1310执行时可以为:提供用户操作界面,并接收用户输入的操作;

重新测试模块1302被处理器1310执行时可以为:若判断模块1326判断游戏服务器的状态为异常,响应于用户操作,重新进行至少一次测试。

由此可以看出,当存储在存储器1320中的指令模块被处理器1310执行时,可实现前述各个实施例中拉取模块1321、生成模块1322、异常值填充模块1323、发送模块1324、接收模块1325、判断模块1326、注入模块1327、收集模块1328、构造模块1329和重新测试模块1301的各种功能。

图14为依据本发明一实施例的测试服务器1400的装置结构示意图。测 试服务器1400包括:

查找模块1410,用于查找得到游戏客户端所基于的协议的函数;

解析模块1420,用于根据查找模块1410得到的函数,解析获得协议的协议基础结构;

存储模块1430,用于存储解析模块1420得到的协议基础结构;

其中,在每次测试时,测试客户端从测试服务器1400拉取协议基础结构,根据协议基础结构生成合法游戏协议包,对合法游戏协议包进行异常值填充,得到异常游戏协议包,并通过向游戏服务器发送异常游戏协议包和合法游戏协议包,测试得到游戏服务器的状态。

在一实施例中,查找模块1410用于利用分析工具查看游戏客户端的公共发包函数的调用关系找到函数。

在一实施例中,存储模块1430进一步用于存储游戏客户端产生的原生协议数据;

其中,测试客户端从测试服务器1400拉取原生协议数据,根据原生协议数据对协议基础结构进行填充,得到合法游戏协议包。

上述装置实施例中,各个模块及单元实现自身功能的具体方法在方法实施例中均有描述,这里不再赘述。

另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

图15为依据本发明一实施例的测试服务器1500的设备结构示意图。该测试服务器1500可包括:处理器1510,存储器1520,端口1530以及总线1540。处理器1510和存储器1520通过总线1540互联。处理器1510可通过端口1530接收和发送数据。其中,

处理器1510用于执行存储器1520存储的机器可读指令模块。

存储器1520存储有处理器1510可执行的机器可读指令模块。处理器1510可执行的指令模块包括:查找模块1521、解析模块1522和存储模块1523。其中,

查找模块1521被处理器1510执行时可以为:查找得到游戏客户端所基于的协议的函数;

解析模块1522被处理器1510执行时可以为:根据查找模块1521得到的函数,解析获得协议的协议基础结构;

存储模块1523被处理器1510执行时可以为:存储解析模块1522得到的协议基础结构;

其中,在每次测试时,测试客户端从测试服务器1500拉取协议基础结构,根据协议基础结构生成合法游戏协议包,对合法游戏协议包进行异常值填充,得到异常游戏协议包,并通过向游戏服务器发送异常游戏协议包和合法游戏协议包,测试得到游戏服务器的状态。

由此可以看出,当存储在存储器1520中的指令模块被处理器1510执行时,可实现前述各个实施例中查找模块1521、解析模块1522和存储模块1523的各种功能。

图16为依据本发明一实施例的测试系统1600的结构示意图。测试系统1600包括:游戏服务器1610、游戏客户端1620、测试客户端1630以及测试服务器1640。其中,

测试服务器1640,用于查找得到游戏客户端所基于的协议的函数,并根据函数获得协议的协议基础结构;

测试客户端1630,用于,每次进行测试时,从测试服务器拉取协议基础结构,根据协议基础结构生成合法游戏协议包,对所生成的合法游戏协议包进行异常值填充,得到异常游戏协议包,并通过向游戏服务器1610发送异常游戏协议包和合法游戏协议包,测试得到游戏服务器的状态。

在一实施例中,测试客户端1630进一步将自身注入游戏客户端1620;

游戏客户端1620,用于加载被注入的测试客户端1630;

测试客户端1630收集由被注入了测试客户端1630的游戏客户端1620产生的原生协议数据,将原生协议数据上传给测试服务器1640,从测试服务器1640拉取原生协议数据,根据原生协议数据对协议基础结构进行填充,得到合法游戏协议包。

其中,测试客户端1630可以包括图12所示的各个模块,测试服务器1640可以包括图14所示的各个模块。

以下仅对涉及游戏服务器1610、游戏客户端1620、测试客户端1630以及测试服务器1640之间交互的操作进行说明。图16中仅示出了测试客户端1630和测试服务器1640中和交互相关的模块,具体如下:

注入模块1210,用于将测试客户端1630注入到游戏客户端1620中;

发送模块1140,用于向游戏服务器1610发送异常游戏协议包和合法游戏协议包;

发送模块1140,进一步用于将收集模块1220收集的原生协议数据上传给测试服务器1640,并存储到存储模块1430中;

接收模块1150,用于接收游戏服务器1610响应于接收到的合法游戏协议包而发送的反馈;

拉取模块1110,进一步用于从测试服务器1640中的存储模块1430拉取原生协议数据。

上述系统实施例中,各个模块及单元实现自身功能的具体方法在方法实施例中均有描述,这里不再赘述。

另外,本发明的每一个实施例可以通过由数据处理设备如计算机执行的数据处理程序来实现。显然,数据处理程序构成了本发明。此外,通常存储在一个存储介质中的数据处理程序通过直接将程序读取出存储介质或者通过将程序安装或复制到数据处理设备的存储设备(如硬盘和或内存)中执行。因此,这样的存储介质也构成了本发明。存储介质可以使用任何类型的记录 方式,例如纸张存储介质(如纸带等)、磁存储介质(如软盘、硬盘、闪存等)、光存储介质(如CD-ROM等)、磁光存储介质(如MO等)等。

因此,本发明还公开了一种存储介质,其中存储有数据处理程序,该数据处理程序用于执行本发明上述方法的任何一种实施例。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

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