数据接收、发送方法及装置,测试系统,存储介质与流程

文档序号:14897514发布日期:2018-07-08 09:08阅读:379来源:国知局

本发明涉及游戏领域,具体而言,涉及一种数据接收、发送方法及装置,测试系统,存储介质。



背景技术:

网络游戏开发过程中,测试人员测试服务器功能时一定要覆盖到多客户端同时登录游戏时的各种随机并发操作行为,游戏服务器在多客户端操作下确保逻辑稳健性是测试的重要环节。测试人员常规的执行多客户端测试服务器功能时普遍采用的是本地工作环境下手动启动多个客户端连接服务器进行操作,这种测试手段能同时操作的客户端数量有限,各客户端手动操作的频率也很难真实反映多客户的操作的并发性,许多临界异常情况的测试点用手动测试方式很难覆盖到。

现有的服务器多客户端测试辅助手段一般都是用免客机器人代替真实客户端测试服务器。所谓免客机器人,就是搭建一个移植真实游戏客户端的网络等核心基础模块的应用进程,运行时创建大量虚拟客户端按照真实游戏客户端的网络连接方式和收发包协议去连接服务器、登录进游戏、按照测试用例执行测试行为和服务器进行网络收发包交互。但现有的技术实现方案中免客机器人在对服务器进行测试时大多都是按照类似开发游戏客户端逻辑代码的思路在机器人代码架构里实现测试代码,测试代码通过调用测试行为涉及的网络发包协议发包、对服务器收包按协议解包处理来操控每个机器人与服务器的交互。其中,各虚拟客户端对测试行为的判断和自身相关信息的更新主要是依靠对服务器网络包的处理,由于服务器和客户端间通信的网络协议有很多,且解包逻辑与游戏代码关联性大,许多游戏项目组在开发免客机器人实现过程都会大比例的移植游戏客户端的逻辑代码到机器人代码架构中。

上述免客机器人执行测试行为的代码实现都耦合在机器人架构代码里,与游戏开发紧密联系,很多测试用例的代码需要开发人员实现,不方便测试人员快速配置出各种不同的测试用例行为,在使用实践上不符合逻辑与配置分离的软件开发原则。并且机器人代码中移植过多游戏代码逻辑时,会导致机器人代码与游戏逻辑相关性过高,一旦游戏逻辑迭代频繁,机器人基础代码也需要时常维护,不利于机器人使用稳定。

针对上述的问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种数据接收、发送方法及装置,测试系统,存储介质,以至少解决相关技术中游戏数据获取时依赖于游戏逻辑的技术问题。

根据本发明实施例的一个方面,提供了一种数据接收方法,包括:在测试用例运行过程中,通过远程过程调用rpc节点向游戏服务器发送查询请求;其中,查询请求用于请求向游戏服务器获取测试用例运行过程中所需的游戏数据;通过rpc节点接收游戏服务器返回的游戏数据;其中,游戏数据从游戏服务器中与查询请求对应的数据查询接口获取的。

根据本发明实施例的一个方面,提供了一种数据发送方法,包括:在虚拟客户端运行测试用例的过程中,接收虚拟客户端通过远程过程调用rpc节点发送的查询请求,其中,查询请求用于请求向游戏服务器获取测试用例运行过程中所需的游戏数据;根据查询请求在本地查找与查询请求对应的数据查询接口;根据查找到的数据查询接口获取游戏数据以及将获取的游戏数据发送给虚拟客户端。

根据本发明实施例的另一方面,还提供了一种测试系统,包括:游戏服务器和虚拟客户端;其中,游戏服务器中部署有数据查询管理器,数据查询管理器维护有一个或多个数据查询接口;虚拟客户端,用于在测试用例运行过程中,通过远程过程调用rpc节点向数据查询管理器发送查询请求,其中,查询请求用于请求获取测试用例运行过程中所需的游戏数据;数据查询管理器,用于在接收到查询请求后,从一个或多个数据查询接口中查找与查询请求对应的数据查询接口,根据查找到的数据查询接口获取游戏数据以及将获取的游戏数据发送给虚拟客户端。

根据本发明实施例的另一方面,还提供了一种数据接收装置,包括:发送模块,用于在测试用例运行过程中,通过远程过程调用rpc节点向游戏服务器发送查询请求;其中,查询请求用于请求向游戏服务器获取测试用例运行过程中所需的游戏数据;接收模块,用于通过rpc节点接收游戏服务器返回的游戏数据;其中,游戏数据从游戏服务器中与查询请求对应的数据查询接口获取的。

根据本发明实施例的另一方面,还提供了一种数据发送装置,包括:接收模块,用于在虚拟客户端运行测试用例的过程中,接收虚拟客户端通过远程过程调用rpc节点发送的查询请求,其中,查询请求用于请求向游戏服务器获取测试用例运行过程中所需的游戏数据;查找模块,用于根据查询请求在本地查找与查询请求对应的数据查询接口;获取模块,用于根据查找到的数据查询接口获取游戏数据;发送模块,用于将获取的游戏数据发送给虚拟客户端。

根据本发明的又一个实施例,还提供了一种存储介质,存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。

在本发明实施例中,采用在测试用例的运行过程中通过rpc节点向游戏服务器中发送查询请求,通过游戏服务器中与查询请求对应的数据查询接口获取测试用例运行过程所需的游戏数据的方式,通过rpc节点调用游戏服务器中的数据查询接口,以主动访问的方式来获取测试用例运行过程所需的游戏数据,达到了减轻游戏数据获取时依赖游戏逻辑的目的,从而实现了减少与游戏逻辑耦合性的技术效果,进而解决了相关技术中游戏数据获取时依赖于游戏逻辑的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例提供的数据接收方法的流程示意图;

图2是根据本发明实施例提供的数据发送方法的流程示意图;

图3是根据本发明实施例提供的测试系统的流程示意图;

图4是根据本发明实施例提供的数据接收装置的结构示意图;

图5是根据本发明实施例提供的数据发送装置的结构框图;

图6是根据本发明优选实施例免客机器人相关功能模块的程序结构示意图;

图7是根据本发明优选实施例提供的虚拟客户端内相关功能模块的程序结构示意图;

图8是根据本发明优选实施例提供的行为树测试用例编辑器相关功能模块的一个结构示意图;

图9是根据本发明优选实施例提供的利用免客机器人对游戏服务器进行测试的一个实施流程示意图;

图10是根据本发明优选实施例提供的行为树测试用例通过rpc节点从游戏服务器获取游戏相关数据的一个实施流程示意图;

图11是根据本发明优选实施例提供的行为树执行rpc节点后行为树从挂起到恢复过程的一个实施流程示意图;

图12是根据本发明优选实施例提供的一个行为树测试用例中玩家获取周围可攻击目标进行攻击的一个行为树分支结构图。

具体实施方式

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

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本发明实施例,提供了一种数据接收的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1是根据本发明实施例提供的数据接收方法的流程示意图,如图1所示,该方法包括如下步骤:

步骤s102,在测试用例运行过程中,通过远程过程调用rpc节点向游戏服务器发送查询请求;其中,所述查询请求用于请求向所述游戏服务器获取所述测试用例运行过程中所需的游戏数据;

步骤s104,通过所述rpc节点接收所述游戏服务器返回的所述游戏数据;其中,所述游戏数据从所述游戏服务器中与所述查询请求对应的数据查询接口获取的。

通过上述步骤,采用在测试用例的运行过程中通过rpc节点向游戏服务器中发送查询请求,通过游戏服务器中与查询请求对应的数据查询接口获取测试用例运行过程所需的游戏数据的方式,通过rpc节点调用游戏服务器中的数据查询接口,以主动访问的方式来获取测试用例运行过程所需的游戏数据,达到了减轻游戏数据获取时依赖游戏逻辑的目的,从而实现了减少与游戏逻辑耦合性的技术效果,进而解决了相关技术中游戏数据获取时依赖于游戏逻辑的技术问题。

需要说明的是,通过上述rpc节点可以游戏服务器发送的涉及游戏逻辑的正常网络协议发包进行过滤处理,可以节省在免客机器人(预设应用程序)运行过程中网络解包cpu开销。

需要说明的是,上述游戏数据可以包括游戏内各游戏账号数据,但并不限于此。

需要说明的是,上述游戏数据可以是游戏服务器按照约定格式序列化,打成网络包通过测试协议号的方式返回,上述查询请求也可以是通过测试协议号的网络包的方式发送给游戏服务器的。

需要说明的是,上述数据查询接口由游戏服务器通过所述游戏服务器中的数据查询管理器进行维护。

在本发明的一个实施例中,上述测试用例由预设应用程序对行为树节点进行组合得到,其中,所述行为树节点从预先设置的行为树节点库中选取的,所述行为树节点通过对与游戏逻辑耦合的测试行为进行封装得到。通过将与游戏逻辑紧密联系的功能封装化为行为树节点,然后采用行为树节点进行组合来搭建测试用例,实现了测试用例的配置与逻辑分离的目的,测试用例配置可以尽量保持稳定;行为树节点可以根据需要不断扩展,测试用例行为可以不断丰富,行为树节点可以有很高的复用率,使得测试用例行为更加智能化,自动化。

需要说明的是,上述预设应用程序也可以称为上述免客机器人。

需要说明的是,上述预设应用程序还可以提供用户接口ui操作界面,其中,上述ui操作界面用于根据接收到的控制命令显示测试用例的测试用例对象。

需要说明的是,上述预设应用程序对行为树节点进行组合可以表现为,上述预设应用程序可以通过接收到的控制指令对行为树节点进行组合,但并不限于此。因而,也可以通过上述ui操作界面,基于接收到的控制指令对行为树节点进行组合。

通过上述ui操作界面提供可视化的界面,替代了直接通过指令进行编辑的方式,更好地提高了用户体验。并且可以通过上述ui操作界面修改行为树的结构以及重新配置测试用例。

需要说明的是,行为树是一个多叉树数据结构,节点类型按照规则可以划分为逻辑节点,条件节点和行为节点,各类型节点可根据测试用例需求不断丰富扩展。

需要说明的是,每一个测试用例对应一个独立的行为树配置文件,该行为树配置文件中记录测试用例对应的行为树组装信息,包括使用的行为树节点,行为树节点用到的参数以及各行为树节点间的层级和连接关系,上述行为树配置文件可以是xml或json格式,但并不限于于此。

需要说明的是,上述行为树节点库预先设置在所述预设应用程序中的测试用例管理器中,其中,所述测试用例管理器可以具有以下至少之一功能:支持新增测试用例,支持修改测试用例,支持删除测试用例,支持在所述测试用例运行过程中为所述虚拟客户端独立设置测试用例,支持在测试用例运行过程中为所述虚拟客户端独立切换测试用例,支持在测试用例运行过程中为所述虚拟客户端独立暂停运行测试用例。

需要说明的是,每一个虚拟客户端运行过程中都会有一个测试用例单元,该测试用例单元受上述测试用例管理器管理,测试用例单元运行时会按照预设的测试用例驱动虚拟客户端对游戏服务器执行测试行为。

在本发明的一个实施例中,在上述步骤s104之后,上述方法还包括:以变量方式将所述游戏数据存储在本地的动态数据管理器。通过变量表示方式将获取的游戏数据保存在本地内供访问使用,进而可以搭建出更符合玩家真实行为的人工智能自动测试用例。

需要说明的是,该动态数据管理器可以设置在上述测试用例单元中,该动态数据管理器可以保存测试用例执行过程中所产生的变量数据,该变量数据包括:上述游戏数据,行为树执行过程中用于参数传递、数值计算、赋值、条件判断等的变量数据,但并不限于此。动态数据管理器中的变量数据通过变量名访问、赋值、修改等,变量数据赋值和传递在行为树配置里,作为行为树节点的相关参数,测试用例运行过程中,行为树节点对变量参数(上述变量数据)的访问通过变量名去动态数据管理器中获取,对变量参数的赋值修改同样通过变量名去动态数据管理器中获取当前变量数据进行修改赋值。

为了避免测试用例运行时间过长影响其他客户端的测试用例运行而导致测试行为运行延迟、反应过慢的问题,因而在本发明的一个实施例中,在上述步骤s104之前,上述方法还可以包括:记录所述测试用例当前运行的位置(比如记录当前测试用例当前运行的行为树节点),并挂起所述测试用例;在上述步骤s104之后,或,在挂起所述测试用例的时长超过预定阈值的情况下,在挂起所述测试用例之后,上述方法还包括:恢复运行挂起的所述测试用例。即各个虚拟客户端在运行测试用例时以异步执行方式运行。

比如行为树rpc节点运行过程需要通过网络连接发送请求去服务器,并等待服务器返回数据,需要一定网络通信交互时间,类似这种节点运行时在发起网络请求后,记录本次行为树当前所运行的节点,挂起当前运行的测试用例,让出执行权给下一个虚拟客户端运行测试用例,并之后每一个逻辑帧测试用例单元都监听一次服务器数据返回结果,等待获取到服务器返回结果或等待异常超时后,被挂起测试用例才恢复运行,未完成运行的rpc节点继续完成运行逻辑,并返回节点运行结果。

需要说明的是,上述数据接收方法的执行主体可以是虚拟客户端,但并不限于此。上述虚拟客户端可以是上述预设应用程序运行时所创建的客户端,但并不限于此。

本发明优选实施例还提供了一种数据发送方法,图2是根据本发明实施例提供的数据发送方法的流程示意图,如图2所示,该方法包括:

步骤s202,在虚拟客户端运行测试用例的过程中,接收所述虚拟客户端通过远程过程调用rpc节点发送的查询请求,其中,所述查询请求用于请求向游戏服务器获取所述测试用例运行过程中所需的游戏数据;

步骤s204,根据所述查询请求在本地查找与所述查询请求对应的数据查询接口;

步骤s206,根据所述查找到的所述数据查询接口获取所述游戏数据以及将获取的所述游戏数据发送给所述虚拟客户端。

通过上述步骤,采用在测试用例的运行过程中接收虚拟客户端通过rpc节点发送的查询请求,通过本地与查询请求对应的数据查询接口获取测试用例运行过程所需的游戏数据的方式,即通过rpc节点调用游戏服务器中的数据查询接口,以主动访问的方式来获取测试用例运行过程所需的游戏数据,达到了减轻游戏数据获取时依赖游戏逻辑的目的,从而实现了减少与游戏逻辑耦合性的技术效果,进而解决了相关技术中游戏数据获取时依赖于游戏逻辑的技术问题。

需要说明的是,上述数据查询接口由游戏服务器通过所述游戏服务器中的数据查询管理器进行维护。即通过在游戏服务器中设置了一个数据查询管理器,支持访问游戏服务器运行过程中所有游戏内实时内存数据和数据游戏库数据,并提供外部远程查询调用接口,支持外部通过网络连接远程调用数据查询接口获取游戏数据。

在本发明的一个实施例中,上述测试用例由预设应用程序对行为树节点进行组合得到,其中,所述行为树节点从预先设置的行为树节点库中选取的,所述行为树节点通过对与游戏逻辑耦合的测试行为进行封装得到。通过将与游戏逻辑紧密联系的功能封装化为行为树节点,然后采用行为树节点进行组合来搭建测试用例,实现了测试用例的配置与逻辑分离的目的,测试用例配置可以尽量保持稳定;行为树节点可以根据需要不断扩展,测试用例行为可以不断丰富,行为树节点可以有很高的复用率,使得测试用例行为更加智能化,自动化。

需要说明的是,上述预设应用程序也可以称为上述免客机器人。

需要说明的是,上述预设应用程序还可以提供用户接口ui操作界面,其中,上述ui操作界面用于根据接收到的控制命令显示测试用例的测试用例对象。

需要说明的是,上述预设应用程序对行为树节点进行组合可以表现为,上述预设应用程序可以通过接收到的控制指令对行为树节点进行组合,但并不限于此。因而,也可以通过上述ui操作界面,基于接收到的控制指令对行为树节点进行组合。

通过上述ui操作界面提供可视化的界面,替代了直接通过指令进行编辑的方式,更好地提高了用户体验。并且可以通过上述ui操作界面修改行为树的结构以及重新配置测试用例。

需要说明的是,行为树是一个多叉树数据结构,节点类型按照规则可以划分为逻辑节点,条件节点和行为节点,各类型节点可根据测试用例需求不断丰富扩展。

需要说明的是,每一个测试用例对应一个独立的行为树配置文件,该行为树配置文件中记录测试用例对应的行为树组装信息,包括使用的行为树节点,行为树节点用到的参数以及各行为树节点间的层级和连接关系,上述行为树配置文件可以是xml或json格式,但并不限于于此。

需要说明的是,上述行为树节点库预先设置在所述预设应用程序中的测试用例管理器中,其中,所述测试用例管理器可以具有以下至少之一功能:支持新增测试用例,支持修改测试用例,支持删除测试用例,支持在所述测试用例运行过程中为所述虚拟客户端独立设置测试用例,支持在测试用例运行过程中为所述虚拟客户端独立切换测试用例,支持在测试用例运行过程中为所述虚拟客户端独立暂停运行测试用例。

需要说明的是,上述数据发送方法的执行主体可以是游戏服务器,但并不限于此。

本发明实施例还提供了一种测试系统,图3是根据本发明实施例提供的测试系统的流程示意图,如图3所示,该测试系统包括:游戏服务器32和虚拟客户端34;

其中,所述游戏服务器32中部署有数据查询管理器,所述数据查询管理器维护有一个或多个数据查询接口;

所述虚拟客户端34,用于在测试用例运行过程中,通过远程过程调用rpc节点向所述数据查询管理器发送查询请求,其中,所述查询请求用于请求获取所述测试用例运行过程中所需的游戏数据;

所述数据查询管理器,用于在接收到查询请求后,从所述一个或多个数据查询接口中查找与所述查询请求对应的所述数据查询接口,根据查找到的所述数据查询接口获取所述游戏数据以及将获取的所述游戏数据发送给所述虚拟客户端34。

通过上述测试系统,在测试用例的运行过程中虚拟客户端34通过rpc节点向游戏服务器32中发送查询请求,通过游戏服务器32中与查询请求对应的数据查询接口获取测试用例运行过程所需的游戏数据的方式,通过rpc节点调用游戏服务器32中的数据查询接口,以主动访问的方式来获取测试用例运行过程所需的游戏数据,达到了减轻游戏数据获取时依赖游戏逻辑的目的,从而实现了减少与游戏逻辑耦合性的技术效果,进而解决了相关技术中游戏数据获取时依赖于游戏逻辑的技术问题。

在本发明的一个实施例中,上述系统还包括:预设应用程序,其中,所述预设应用程序包括:虚拟客户端管理器和测试用例编辑器;其中,所述虚拟客户端管理器,用于创建一个或多个所述虚拟客户端;所述测试用例编辑器,用于为创建的一个或多个所述虚拟客户端配置所述测试用例。

需要说明的是,该预设应用程序可以称为上述免客机器人,但并不限于此。

需要说明的是,上述预设应用程序还可以包括:ui操作界面,其中,所述ui操作界面上集成有所述测试用例编辑器,所述测试用例编辑器还用于根据接收到的控制指令对从预先设置的行为树节点库中选取的行为树节点组合得到所述测试用例。

需要说明的是,所述预设应用程序还包括测试用例管理器,其中,所述测试用例管理器具有以下至少之一功能:支持新增测试用例,支持修改测试用例,支持删除测试用例,支持在所述测试用例运行过程中为所述虚拟客户端独立设置测试用例,支持在测试用例运行过程中为所述虚拟客户端独立切换测试用例,支持在测试用例运行过程中为所述虚拟客户端独立暂停运行测试用例。

在本发明的一个实施例中,上述虚拟客户端包括:测试用例单元和动态数据管理器,其中,所述测试用例单元,用于运行所述测试用例;所述动态数据管理器,用于以变量方式将所述游戏数据存储在所述虚拟客户端内的动态数据管理器。

需要说明的是,上述测试用例单元,还用于通过所述rpc节点接收所述游戏服务器返回的所述游戏数据之前记录所述测试用例当前运行的位置,并挂起所述测试用例,以及在通过所述rpc节点接收所述游戏服务器返回的所述游戏数据之后,或,在挂起所述测试用例的时长超过预定阈值的情况下,在挂起所述测试用例之后,恢复运行挂起的所述测试用例。

本发明实施例还提供了一种数据接收装置,图4是根据本发明实施例提供的数据接收装置的结构示意图,如图4所示,该接收装置包括:

发送模块42,用于在测试用例运行过程中,通过远程过程调用rpc节点向游戏服务器发送查询请求;其中,所述查询请求用于请求向所述游戏服务器获取所述测试用例运行过程中所需的游戏数据;

接收模块44,与上述发送模块42连接,用于通过所述rpc节点接收所述游戏服务器返回的所述游戏数据;其中,所述游戏数据从所述游戏服务器中与所述查询请求对应的数据查询接口获取的。

通过上述接收装置,采用在测试用例的运行过程中通过rpc节点向游戏服务器中发送查询请求,通过游戏服务器中与查询请求对应的数据查询接口获取测试用例运行过程所需的游戏数据的方式,通过rpc节点调用游戏服务器中的数据查询接口,以主动访问的方式来获取测试用例运行过程所需的游戏数据,达到了减轻游戏数据获取时依赖游戏逻辑的目的,从而实现了减少与游戏逻辑耦合性的技术效果,进而解决了相关技术中游戏数据获取时依赖于游戏逻辑的技术问题。

需要说明的是,通过上述rpc节点可以游戏服务器发送的涉及游戏逻辑的正常网络协议发包进行过滤处理,可以节省在免客机器人(预设应用程序)运行过程中网络解包cpu开销。

需要说明的是,上述游戏数据可以包括游戏内各游戏账号数据,但并不限于此。

需要说明的是,上述游戏数据可以是游戏服务器按照约定格式序列化,打成网络包通过测试协议号的方式返回,上述查询请求也可以是通过测试协议号的网络包的方式发送给游戏服务器的。

需要说明的是,上述数据查询接口由游戏服务器通过所述游戏服务器中的数据查询管理器进行维护。

在本发明的一个实施例中,上述测试用例由预设应用程序对行为树节点进行组合得到,其中,所述行为树节点从预先设置的行为树节点库中选取的,所述行为树节点通过对与游戏逻辑耦合的测试行为进行封装得到。通过将与游戏逻辑紧密联系的功能封装化为行为树节点,然后采用行为树节点进行组合来搭建测试用例,实现了测试用例的配置与逻辑分离的目的,测试用例配置可以尽量保持稳定;行为树节点可以根据需要不断扩展,测试用例行为可以不断丰富,行为树节点可以有很高的复用率,使得测试用例行为更加智能化,自动化。

在本发明的一个实施例中,上述装置还包括:存储模块,与上述接收模块44连接,以变量方式将所述游戏数据存储在本地的动态数据管理器。通过变量表示方式将获取的游戏数据保存在本地内供访问使用,进而可以搭建出更符合玩家真实行为的人工智能自动测试用例。

需要说明的是,该动态数据管理器可以设置在上述测试用例单元中,该动态数据管理器可以保存测试用例执行过程中所产生的变量数据,该变量数据包括:上述游戏数据,行为树执行过程中用于参数传递、数值计算、赋值、条件判断等的变量数据,但并不限于此。动态数据管理器中的变量数据通过变量名访问、赋值、修改等,变量数据赋值和传递在行为树配置里,作为行为树节点的相关参数,测试用例运行过程中,行为树节点对变量参数(上述变量数据)的访问通过变量名去动态数据管理器中获取,对变量参数的赋值修改同样通过变量名去动态数据管理器中获取当前变量数据进行修改赋值。

为了避免测试用例运行时间过长影响其他客户端的测试用例运行而导致测试行为运行延迟、反应过慢的问题,因而在本发明的一个实施例中,上述装置还包括:记录模块,与上述接收模块44连接,用于记录所述测试用例当前运行的位置(比如记录当前测试用例当前运行的行为树节点),挂起模块,用于挂起所述测试用例;,上述方法还包括:恢复模块,与上述挂起模块连接,用于恢复运行挂起的所述测试用例。即各个虚拟客户端在运行测试用例时以异步执行方式运行。

需要说明的是,上述数据接收装置可以位于虚拟客户端中,但并不限于此。上述虚拟客户端可以是上述预设应用程序运行时所创建的客户端,但并不限于此。

本发明实施例还提供了一种数据发送装置,图5是根据本发明实施例提供的数据发送装置的结构框图,如图5所示,包括:

接收模块52,用于在虚拟客户端运行测试用例的过程中,接收所述虚拟客户端通过远程过程调用rpc节点发送的查询请求,其中,所述查询请求用于请求向游戏服务器获取所述测试用例运行过程中所需的游戏数据;

查找模块54,与上述接收模块52连接,用于根据所述查询请求在本地查找与所述查询请求对应的数据查询接口;

获取模块56,与上述查找模块54连接,用于根据所述查找到的所述数据查询接口获取所述游戏数据;

发送模块58,与上述获取模块56连接,用于将获取的所述游戏数据发送给所述虚拟客户端。

通过上述装置,采用在测试用例的运行过程中接收虚拟客户端通过rpc节点发送的查询请求,通过本地与查询请求对应的数据查询接口获取测试用例运行过程所需的游戏数据的方式,即通过rpc节点调用游戏服务器中的数据查询接口,以主动访问的方式来获取测试用例运行过程所需的游戏数据,达到了减轻游戏数据获取时依赖游戏逻辑的目的,从而实现了减少与游戏逻辑耦合性的技术效果,进而解决了相关技术中游戏数据获取时依赖于游戏逻辑的技术问题。

需要说明的是,上述数据查询接口由游戏服务器通过所述游戏服务器中的数据查询管理器进行维护。即通过在游戏服务器中设置了一个数据查询管理器,支持访问游戏服务器运行过程中所有游戏内实时内存数据和数据游戏库数据,并提供外部远程查询调用接口,支持外部通过网络连接远程调用数据查询接口获取游戏数据。

需要说明的是,上述装置可以位于游戏服务器中,但并不限于此。

本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-onlymemory,简称为rom)、随机存取存储器(randomaccessmemory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。

本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。

可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

为了更好地理解本发明,以下结合优选的实施例对本发明做进一步解释。

针对相关技术的进行网络游戏服务器测试的免客机器人技术方案中测试用例与免客机器人代码逻辑与配置耦合,免客机器人代码稳定性易受游戏代码逻辑迭代影响的缺点,本发明优选实施例提供一种免客机器人技术实现方案,利用行为树配置方式进行测试用例搭建,将与游戏逻辑紧密联系的功能都进行底层封装、上层抽象化为行为树节点供测试人员配置调用,实现逻辑与配置有效分离;部署游戏服务器数据查询模块(相当于上述数据查询管理器,上述数据查询接口),数据查询模块提供远程访问可以给免客机器人查询各虚拟客户端在游戏服务器内的在线对象全量信息(相当于上述游戏数据),减轻免客机器人开发时信息获取过分依靠解析服务器网络收包带来的过分耦合游戏逻辑的缺点。

本发明优选实施例采用的装置包括:

可以在windowpc机或linux开发机上启动运行的免客机器人应用程序;其中,

免客机器人包含虚拟客户端管理器,在免客机器人运行过程中管理所有动态创建的虚拟客户端对象,包括:创建新的虚拟客户端;

免客机器人运行后会在主线程里运行一个主循环,主循环设定一定的逻辑帧率,每秒钟运行相应次数的逻辑帧,虚拟客户端管理器负责每一个逻辑帧为每一个客户端对象分配运行时间片,处理每个客户端响应用户输入指令、网络连接收发包、运行测试用例等操作;

免客机器人包含网络处理线程,为了确保所有虚拟客户端与服务器通信的网络包都能及时收发,免客机器人运行时独立启动一个网络线程,不间断地处理每一个虚拟客户端网络模块的收包和发包;

免客机器人包含用户指令监听线程,机器人运行过程中监听线程实时监测用户编辑输入指令,用户通过编辑输入指令可以实现的操作包括:创建一定数量的虚拟客户端、选择要执行后续命令操作的虚拟客户端、让特定虚拟客户端执行输入指令、让特定虚拟客户端执行\暂停执行\停止执行测试用例等等;

免客机器人主线程内每一个逻辑帧集中处理一次用户输入指令,用户指定虚拟客户端执行的指令也由客户端在每个逻辑帧里分配的运行时间片响应执行;

虚拟客户端可以执行的用户指令包括:发送网络协议包给服务器、登录进游戏、登出游戏、触发网络掉线等测试行为;

免客机器人包含测试用例管理器(相当于上述测试用例管理器),测试用例管理器支持测试人员新增、修改、删除测试用例,支持在运行过程中为每一个虚拟客户端独立设置、切换、暂停测试用例;

每一个虚拟客户端运行过程都会有一个测试用例单元(相当于上述测试用例单元),受测试用例管理器管理,测试用例单元相当于每一个虚拟客户端的ai,测试用例单元运行时按照设置的测试用例驱动虚拟客户端对服务器执行测试行为;

本发明优选实施例中测试用例的编辑与配置方式采用行为树的方式进行,测试用例管理器里预先设置可供编辑使用的行为树节点库,行为树是一个多叉树数据结构,节点类型按规则可以划分为逻辑节点、条件节点和行为节点,各类型节点可根据测试用例需求不断丰富扩展,用行为树来配置测试用例,具备的优势有:实现逻辑与配置分离,与游戏逻辑耦合比较紧密的测试行为可以封装为一个行为树节点,测试人员搭建测试用例都是在封装好节点上进行组装,测试用例配置可以尽量保持稳定;行为树节点可以根据需要不断扩展,测试用例行为可以不断丰富;行为树节点可以有很高的复用率,配置测试用例可以通过各行为树节点通过不同组合搭建出各式各样的测试行为;行为树在ai中有很广泛的运用,采用行为树配置测试用例,可以使测试用例行为更加智能化、自动化。

本发明优选实施例中每一个测试用例都对应一个独立的行为树配置文件,配置文件记录测试用例对应的行为树组装信息,包括使用的行为树节点、节点用到的参数以及各节点间的层级和连接关系,配置可以采用xml或json的格式。

免客机器人启动时会加载所有测试用例的行为树配置文件,并解析生成行为树数据结构,在运行过程中测试人员也可以通过测试用例管理器新增、修改和删除行为树配置,并导出重新加载,运行过程中动态更新测试用例。

相关技术中,运行行为树测试用例过程中,行为树许多测试行为节点的执行和条件判断都需要访问到虚拟客户端对应的游戏账号数据和在线游戏对象数据,比如测试用例通过行为树节点发包给服务器时,网络包信息和各自虚拟客户端游戏数据有紧密联系,网络游戏客户端获取游戏数据可以通过解析服务器发送给客户端的所有网络包,从中获取和实时更新游戏账号数据,这种方式需要在免客机器人代码架构中维护一个虚拟客户端游戏数据管理模块,并按照真实游戏客户端逻辑解析所有服务器发包的网络协议,这使得免客机器人代码过分依赖耦合游戏逻辑,不利于免客机器人代码架构稳定,因此本发明优选实施例中不采用这种方式获取虚拟客户端游戏数据。

本发明优选实施例采用免客机器人主动查询方式向服务器获取各虚拟客户端的对应游戏相关数据,具体实现方式包括:

游戏服务器(相当于上述游戏服务器)内搭建一个游戏数据查询管理器(相当于上述数据查询管理器),支持访问游戏服务器运行过程中所有游戏内实时内存数据和游戏数据库数据,并提供外部远程查询调用接口,支持外部通过网络连接远程调用数据查询接口(相当于上述数据查询接口)获取游戏内各游戏账号数据。

免客机器人行为树节点库中封装rpc(远程过程调用)节点,实现测试用例运行过程中通过rpc节点远程调用游戏服务器数据查询管理器中的数据查询接口,以主动访问方式获取测试用例运行过程中所需的游戏数据,而对游戏服务器发给游戏客户端涉及游戏逻辑的正常网络协议发包进行过滤处理,既可以节省免客机器人运行过程中网络解包cpu开销,又可以减少免客机器人代码结构和游戏逻辑耦合性。

每一个虚拟客户端的测试用例单元内置一个动态数据管理器,保存测试用例执行过程中产生的变量数据,变量数据存储内容包括行为树rpc节点从服务器访问获取的游戏数据、行为树执行过程中用于参数传递、数值计算、赋值、条件判断等的变量数据等,动态数据管理器中变量数据通过变量名访问、赋值、修改等,变量数据赋值和传递在行为树用例配置里,作为行为树节点的相关参数由测试人员进行编辑配置,行为树配置里以特殊格式区别变量参数与常量参数,测试用例运行过程中,行为树节点对变量参数的访问通过变量名去动态数据管理器中获取,对变量参数的赋值修改同样通过变量名去动态数据管理器中获取当前变量数据进行修改赋值。

测试用例运行过程中通过行为树组装测试行为、通过动态数据管理器提供动态数据、通过服务器数据查询管理器提供各虚拟客户端实时游戏数据,可以实现与游戏实时状态紧密互动的更符合人工智能的测试行为。

所有虚拟客户端的测试用例单元都是在免客机器人主线程逻辑中执行,每一个逻辑帧都会运行一次各虚拟客户端的行为树数据结构,由于各虚拟客户端的测试用例运行是按顺序执行,为了确保每一帧中各虚拟客户端都有稳定时间片可以运行测试用例且不会因为其他虚拟客户端的测试用例运行时间过长而导致测试行为运行延迟、反应过慢的问题,所有行为树节点的运行过程都按照不阻塞线程的原则开发,凡是需要持续一定时间才能获取运行结果的行为树逻辑都以异步执行方式设计,比如行为树rpc节点,运行过程需要通过网络连接发送请求去服务器,并等待服务器返回数据,需要一定网络通信交互时间,类似这种节点运行时在发起网络请求后测试用例单元就保存行为树运行栈,记录本次行为树当前所运行的节点,挂起当前运行的测试用例,让出执行权给下一个虚拟客户端运行测试用例,并之后每一个逻辑帧测试用例单元都监听一次服务器数据返回结果,等待获取到服务器返回结果或等待异常超时后,被挂起测试用例才恢复运行,未完成运行的rpc节点继续完成运行逻辑,并返回节点运行结果。

免客机器人在windowpc机上运行时提供ui操作界面(相当于上述实施例中的ui操作界面),免客机器人许多响应用户输入指令执行行为通过ui操作界面可以提供替代指令编辑的友好操作方式,包括创建虚拟客户端、选择待操作虚拟客户端、操作虚拟客户端登录、登出游戏、设置虚拟客户端执行测试用例等,ui界面还可以通过虚拟客户端列表,可视化查看各客户端相关游戏信息摘要。

本发明优选实施例中免客机器人ui界面上集成行为树测试用例编辑器,测试人员可以通过行为树编辑器可视化编辑配置行为树用例,在编辑器上可以从行为树节点库中选择各种节点进行布置组合、连线确定连接关系,组成一个行为树多叉树结构,并通过编辑器导出生成对应的行为树配置文件以及生成行为树测试用例对象,在ui界面上显示测试用例对象,并可被设置为虚拟客户端的执行用例;

如果要对已有的测试用例修改编辑,可通过行为树编辑器选择对应的测试用例,行为树编辑器通过解析配置文件,生成行为树结构图在编辑器界面上显示,用户可在界面上重新修改行为树结构,然后重新生成配置文件和测试用例。

本发明优选实施例中创建的每一个虚拟客户端与游戏服务器的网络连接、通信协议和网络包加解密方式都要按照真实游戏客户端和游戏服务器的网络通信方式开发设计,创建虚拟客户端后客户端登录进游戏内的账号验证登录流程也要按照真实游戏客户端登录流程实现,由于游戏网络通信协议和登录流程实现方式比较稳定,游戏开发过程一般不会迭代修改,因此免客机器人开发时可以直接移植游戏客户端网络模块和登录流程。

具体的,在本发明优选实施例实施时,需要在后台linux开发机上运行待测试的游戏服务器进程,进程上需要部署一个游戏数据查询管理器dataquerymng(相当于上述数据查询管理器),dataquerymng随游戏进程开启而启动,管理器内维护一系列用于外部访问获取在线客户端游戏数据的接口,dataquerymng提供网络连接方式接受外部远程查询请求,这里的网络连接方式可以是tcp、udp或http协议方式,本实施例实现时直接复用虚拟客户端与游戏服务器之间的tcp网络连接,虚拟客户端执行测试用例时通过测试协议发送给游戏服务器,游戏服务器转发请求给dataquerymng访问数据。

本优选实施例实施时,需要在windowpc机或linux开发机上启动运行至少一个免客机器人进程tcrobot,通过在进程上启动多个虚拟游戏客户端连接游戏服务器,各虚拟客户端通过执行测试人员输入指令手动发送网络包发送给服务器或执行测试用例,按照测试用例ai行为自动发送网络包给服务器等方式模拟多客户端测试游戏服务器相关测试功能点,其中机器人进程在pc机上运行时会附带启动ui操作界面,在linux开发机上启动时,相关ui操作界面可以屏蔽,只保留一个cmd窗口接受用户指令输入和调试信息输出。

tcrobot可以使用任何windows系统和linux系统支持的开发语言实现,本优选实施例采用python脚本语言实现,支持在windows和linux上运行python脚本启动进程,windows系统下通过pyqt库实现进程附带的ui操作界面。

tcrobot内包含虚拟客户端管理器vclientmng,负责管理所有虚拟客户端对象vclient,vclientmng内有虚拟客户端对象管理列表vclientlist,记录索引所有已创建的vclient;vclientmng负责响应用户输入创建单个账号id对应的vclient对象或指定账号id段内批量vclient对象;vclientmng负责响应用户选择操作,标记所有用于执行用户输入命令的vclient对象;vclientmng运行在主线程里,负责在每一个主线程逻辑帧里为每一个vclient分配运行时间片,确保每一个vclient在能在每一帧里能有及时处理网络收包、用户指令和测试用例行为更新。

tcrobot内包含一个网络处理线程netthread,线程随主进程启动而运行,netthread负责不间断发送和收取所有vclient与服务器通信的网络包,netthread有两个缓存队列负责与主线程进行数据交换,分别是发包缓存队列sendbuffer和收包缓存队列recvbuffer,其中sendbuffer用于存放主进程内所有vclient产生的待处理网络发包,recvbuffer用于存放netthread收取的所有等待主进程里所有vclient处理的网络收包。netthread在运行过程中只做两件事:不断轮询sendbuffer,有待处理的发包则进行网络包发送处理;不断遍历所有vclient对象的网络连接socket,尝试收取网络包,收到网络包就塞入recvbuffer供主线程处理。

tcrobot内包含一个用户指令监听线程cmdthread,线程随主进程启动而运行,cmdthread负责监听用户通过键盘等输入设备编辑输入的指令信息,cmdthread内置一个cmdbuffer,cmdthread监听到的用户输入指令信息都缓存在cmdbuffer里,主进程每一帧集中对cmdbuffer里的指令按顺序处理,主进程支持处理的用户指令包括:创建单个账号id对应vclient、批量创建一个账号id段内对应的vclient、单个/批量选择要执行后续命令操作的vclient、设置/切换被选择vclient要执行的测试用例、启动/暂停被选择vclient执行测试用例、命令被选择vclient网络连接/登录/登出/网络断开游戏服务器、命令被选择vclient发网络包给游戏服务器。

tcrobot内包含一个测试用例管理器tcmng,tcmng负责加载所有测试用例配置文件,转化为可运行的测试用例数据结构,通过测试用例列表保存索引所有测试用例;tcmng负责为每一个vclient设置测试用例,vclient默认无测试用例;tcmng负责在主进程每一帧里对设置了测试用例的vclient调用一次测试用例运行更新接口。

tcrobot内包含一个ui界面模块,进程只有在pc上运行时才会启动ui界面,在linux上运行时屏蔽相关模块,ui界面可以可视化提供用户很多便捷操作,包括:集成用户执行指令编辑窗口和进程运行日志输出窗口;vclientmng里vclientlist保存的所有已创建vclient通过可视化列表展示,并显示各vclient摘要数据(对应客户端账号id、游戏内玩家id、玩家登陆状态等等)方便用户查看;用户选择操作vclient的指令通过vclient可视化列表勾选框勾选实现;tcmng管理的所有测试用例通过可视化列表展示,用户通过可视化列表可为选中的vclient设置测试用例;用户操作被选中vclient执行诸如登陆、登出、暂停执行测试用例等指令操作都可以通过快捷按钮实现;ui界面上集成行为树测试用例编辑器。

图6是根据本发明优选实施例免客机器人相关功能模块的程序结构示意图,如图6所示,在本优选实施例中,实现对游戏服务器进行测试的载体是各个虚拟客户端vclient,每个vclient对服务器来说等价于一个真实的游戏客户端,每一vclient之间的运行都是互相独立的,每一个vclient在vclientmng内都有一个唯一标识进行索引,由于游戏客户端登陆进游戏时都会有一个唯一标识账号id,因此,本实施例在参见vclient时需要用户对各vclient确定一个账号id,并以此作为vclientmng内索引vclient的唯一标识,游戏账号id一般都会以一个无符号数字表示,本实施中用户创建vclient可以输入一个账号id创建一个vclient,也可以输入一个id段,批量创建对应id段内多个vclient。

每一个vclient对象创建后,内部包括的功能模块有:

网络客户端vnetclient,vclient的网络客户端负责实现与按真实游戏客户端的网络连接和通信方式实现和游戏服务器的连接与通信,所有vclient的网络包协议和加解密方式都要遵从真实游戏客户端的网络客户端的实现方式,一般网络游戏中网络连接方式常用tcp方式实现,本实施例中采用的网络连接也是tcp方式实现,其中所有vclient网络客户端在网络底层的收发包在netthread内实现,上层业务逻辑的发包请求和解包处理都在主线程逻辑帧内实现;

登陆状态管理器loginmng,vclient创建后vnetclient与游戏服务器处于未连接状态,vclient从网络连接游戏服务器到验证游戏账号信息成功登陆进游戏服务器的整个流程都在loginmng中实现,loginmng实现登陆过程按照真实游戏客户端登陆流程开发设计,主要实现流程功能包括:让vnetclient连接网络服务器;根据游戏登陆验证流程,发送vclient的账号id信息和验证所需的token信息(token信息获取方式可随机生成或事先本地保存各账号id的token配置)给服务器;根据服务器返回登录状态确定vclient是否成功登陆进游戏,成功登陆则设置登陆状态为已登陆,失败则断开网络连接;vclient根据用户指令主动断开网络连接时重置登陆信息和状态;vclient与服务器断开连接后根据vclient的自动重连设置自动为vclient重新执行网络连接和登陆流程;

测试用例单元tcunit,tcunit负责执行vclient的测试用例行为,tcunit内记录vclient所设置的测试用例数据结构、测试用例运行/暂停标记和测试用例运行过程中产生的动态数据,其中动态数据保存在动态数据管理器varmng内,varmng负责测试用例过程中按照用例行为对测试用例配置的变量名赋值变量数据,负责测试用例运行过程通过测试用例配置里的变量名索引到的对应变量数据,本实施例中,变量数据可以是python语法中各类数据结构格式,包括dict、list、tuple、string、int等;

tcunit还包括测试用例运行栈tcstack,因为本发明测试用例是行为树数据结构,测试用例运行时每一个逻辑帧开始执行行为树时都说是从行为树根节点往下一层逐层遍历执行,一直到最底层叶子节点为止,执行过程中是以节点作为执行单位,根据行为树的执行原理,父节点的执行结果需要等待子节点返回的执行结果才能执行完毕返回执行结果,因此,行为树节点运行过程顺序符合堆栈原理,即先入栈,后出栈,各层节点运行前先加入到堆栈tcstack里,栈顶节点必然是当前在运行中的节点,栈顶节点运行完返回结果时从tcstack中移除,父节点获取子节点运行结果后随即返回执行结果,并从栈顶移除,再返回更上一层父节点继续这个过程直到tcstack清空,则代表当前帧行为树执行结束,等待下一帧重新执行行为树;

本优选实施例中支持行为树测试用例执行过程运行中途执行挂起操作,即当前执行节点有执行行为需要有一定执行时长才能获取返回结果,比如向服务器发起rpc请求获取游戏数据时,当前运行行为树执行挂起,保留当前记录的tcstack,让出执行权给下一个vclient的tcunit执行,直到服务器返回rpc请求结果时才从tcstack中继续执行当前未完成执行的节点;

本优选实施例tcstack设计方式确保了各个tcunit执行行为树过程中,所有节点执行过程都是可以做到非阻塞运行,通过tcstack记录加行为树挂起方式达到行为树节点支持异步执行的功能。

图7是根据本发明优选实施例提供的虚拟客户端内相关功能模块的程序结构示意图,如图7所示,本优选实施例中的测试用例采用行为树实现方式进行配置和执行,测试用例管理器tcmng负责维护一个可供配置使用的行为树节点库,行为树测试用例配置格式采用json或xml方式表示,本实施例采用json数据格式保存配置,配置内容包括:组成行为树的行为树节点名和节点所需参数列表,参数类型可支持常量数据如字符串、数字、布尔值以及python常用数据结构list、dict等,也可支持动态变量,参数以标识为变量的变量名配置即可识别为变量,行为树节点中参数变量在实际运行时的访问会通过对应的varmng索引获取到实际变量数据内容;组成行为树的各个节点之间的层级关系以及同一个父节点下同层级子节点间的先后顺序。

本优选实施例中一个测试用例对应一个行为树配置,一个行为树配置独立保存在一个文件里,所有测试用例配置文件都保存在免客机器人工作目录下的固定配置文件夹里,进程启动执行初始化操作时,tcmng会加载配置文件夹下所有测试用例配置文件,解析成为行为树数据结构,并保存在测试用例列表里,用户通过测试用例列表可以给各vclient设置对应执行测试用例,本实施例支持各用户编辑配置间互相独立不干扰,因此各用户各自配置的测试用例文件可共享使用。

本优选实施例中测试用例配置可以用户手动编辑配置文件实现,也可以通过在进程在pc机上运行的ui界面中集成行为树编辑器,辅助用户可视化编辑行为树,本实施例中提供了图形化编辑的行为树编辑器辅助配置测试用例,编辑器包括:

用例配置解析模块,负责加载测试用例配置目录下所有配置文件,生成行为树节点树结构数据,并可视化展示在行为树编辑器图形界面内,通过图形界面编辑行为树,改变树结构数据内容;

用例配置导出模块,经过编辑修改的行为树结构数据,通过导出模块,重新生成行为树配置,配置可供tcmng加载生成行为树测试用例供vclient执行;

用例选择列表,负责展示当前配置目录下所有已有的配置,用户可通过选择列表选择要编辑的行为树配置,在用例列表里还可以新增删除用例配置;

行为树节点库,行为树节点库对应tcmng中维护的所有可配置使用的行为树节点,在编辑器内有相应列表展示和节点说明,编辑过程中可随时从节点库内选择节点进行配置;

行为树模块管理器,行为树配置过程中,会有相当多的一些节点组合成的树是可以作为一个子树在行为树整个配置结构里多次复用的,因此,本实施例中行为树编辑器支持将这些可重复利用的树结构作为一个整体当成一个模块,并赋予特殊标记为一个行为树模块节点类型,并在模块管理器内独立编辑管理,配置行为树时需要用到模块时,模块对应的树结构在编辑器内展示为一个特殊的行为树模块节点,相当于一个引用模块的功能,导出配置时,相应模块节点内容都会替换实际模块对应的树结构内容,模块在这里只起一个方便这些经常会多次复用树结构的管理、维护、编辑的效果。

图8是根据本发明优选实施例提供的行为树测试用例编辑器相关功能模块的一个结构示意图,图9是根据本发明优选实施例提供的利用免客机器人对游戏服务器进行测试的一个实施流程示意图,如图9所示,该步骤包括:

在pc机或linux开发机上部署好tcrobot和待测试游戏服务器的环境后,启动游戏服务器,配置tcrobot网络连接ip和端口为游戏服务器的网络监听ip和端口,整体测试流程包括以下步骤s101-步骤s104:

步骤s901:启动tcrobot进程,tcrobot内tcmng执行初始化操作,加载本地测试用例配置目录下所有测试用例配置,生成对应测试用用例行为树数据结构,并保存在测试用例列表里,通过用例名做索引,通过用例名展示在ui界面测试用例选择列表里;pc上运行的用户根据需要可以通过ui界面打开行为树编辑器编辑现有测试用例或新增、删除测试用例,用户更新行为树配置后,tcmng会重新加载行为树配置更新测试用例数据结构。

步骤s902:创建虚拟客户端,用户通过控制台输入指令或ui界面输入游戏账号id段,账号id数量大于等于1,执行创建操作,vclientmng就会根据账号id数量对应创建各账号id对应的虚拟游戏客户端vclient,并加入vclientlist管理,创建完毕后,可以通过ui界面里的虚拟客户端展示列表查看所有已创建的vclient和各vclient对应的摘要信息,linux下运行无ui界面也支持通过输入指令在控制台打印所有vclient信息列表。

步骤s903:选择要操作的虚拟客户端,用户通过执行指令或ui界面虚拟客户的展示列表里勾选要执行操作的vclient,vcliengmng标记被选中的vclient,用户所有针对vclient的操作都是基于选中的vclient,未被选中的vclient不会执行用户的输入指令和ui界面操作,vclient默认是未选中的状态。

步骤s904:用户通过ui界面或输入指令,批量操作被标记为选中状态的vclient,操作内容包括:操作vclient登录、登出游戏服务器,vclient登录登出流程处理都通过loginmng管理,并记录vclient登录状态,vclient未登录时会有部分操作受限,包括执行测试用例、网络发包等,执行登出后vclient与服务器断开网络连接,登录状态重置为未登录;

输入协议发包指令,操作vclient按用户输入网络包指令信息发送网络包给服务器,以手动交互方式实现vclinet模拟真实玩家操作测试服务器;

给vclient设置测试用例,vclient内tcunit索引标记对应测试用例的行为树数据结构,并通过tcmng在主线程每一帧内调用一次tcunit内行为树逻辑更新接口,行为树每一次运行逻辑更新接口的运行过程有两种情形:当前tcstack无节点记录,则从根节点开始运行一次行为树,直到行为树整体运行完返回或中途遇到挂起操作为止,如遇后者,将当前运行记录保存在tcstack内,待下一次执行逻辑更新接口时从当前运行节点恢复行为树运行;当前tcstack内有节点记录,继续根据tcstack记录继续执行上一次未运行完挂起的行为树,直到行为树整体运行完返回或继续遇到挂起操作为止。

给vclient设置测试用例后,vclient会根据行为树逻辑组合不间断地按照行为树逻辑模拟玩家行为对服务器发起测试,由于行为树在游戏领域中被广泛地应用于ai(人工智能)中,因此用行为树搭建出来的测试用例可以模拟丰富的真实玩家测试行为。

vclient执行测试用例过程中,用户可以随时通过ui界面或输入指令暂停vclient的用例执行,并将暂停标记记录在对应tcunit中,用户也可以随时恢复vclient的用例执行。

行为树要搭建出符合玩家真实逻辑行为的测试用例,行为树运行过程中需要能访问获取到游戏中实时信息,本实施例中游戏实时信息的获取通过行为树节点中提供rpc节点来运行实现,rpc节点实现的功能是通过虚拟客户端与服务器的网络连接远程访问游戏服务器内数据查询管理器dataquerymng的数据查询接口,数据查询接口获取相应数据,并通过服务器与客户端的网络连接返回相应数据给rpc节点,rpc节点将数据赋值到varmng中对应的变量数据,其他节点在运行过程中可以通过变量名在varmng中索引到此数据。

本实施例中行为树rpc节点与服务器dataquerymng的网络通信复用vclient与游戏服务器的网络连接,这里增加一个与正常游戏网络协议区分开的测试协议号作为rpc节点与dataquerymng通信的协议号。

图10是根据本发明优选实施例提供的行为树测试用例通过rpc节点从游戏服务器获取游戏相关数据的一个实施流程示意图,如图10所示,本优选实施例中运行行为树过程中执行rpc节点时,从rpc节点执行到服务器返回数据的整个流程包括以下步骤s1001-步骤s1004:

步骤s1001:rpc节点将用户配置时的接口名和参数列表,根据rpc约定格式打包进测试协议号携带的网络包,通过vclient的vnetclient发送网络包,netthread获取网络包后及时发送给游戏服务器。

步骤s1002:rpc节点执行网络发包后,rpc等待服务器返回数据的过程需要一定时间,当前行为树继续运行逻辑也需要等待rpc获取的数据,本实施例通过挂起当前行为树的方式来保证当前运行行为树能等待直到rpc返回数据后才继续执行,也确保等待过程不是阻塞主线程运行的方式,以免影响其他vclient的运行,行为树挂起到恢复的操作过程参见图11,其中,图11是根据本发明优选实施例提供的行为树执行rpc节点后行为树从挂起到恢复过程的一个实施流程示意图,流程步骤包括以下步骤s1101-步骤s1103:

步骤s1101:当前运行tcunit的rpc节点执行网络发包rpc请求后,不立即返回当前rpc节点的返回结果,节点保存在tcstack栈顶,tcunit保留当前未执行完成的tcstack,tcunit当前运行的行为树被标记为挂起状态,tcunit在当前主线程帧内的执行过程结束,tcmng继续调用下一个vclient的tcunit更新接口;

步骤s1102:从主线程下一帧起,每一帧内被挂起的tcunit都取tcstack中处于栈顶的rpc节点轮询一次向服务器rpc请求的数据返回结果,如果服务器尚未返回数据结果,则行为树继续挂起,tcunit依然保持rpc节点在栈顶;

步骤s1103:当rpc节点轮询到服务器已经返回结果,则表示当前运行rpc节点已经运行结束,根据返回结果判定并返回rpc节点运行结果,rpc节点从栈顶移除,tcunit根据tcstack记录继续执行未完成的节点,直到tcstack清空或继续遇到行为树挂起需求为止;

如果rpc节点发起rpc请求后,中途服务器遇到异常等情况导致无法返回rpc请求结果,为了防止被挂起tcunit轮询服务器返回结果变成死循环,本实施例对rpc节点的轮询次数设置上限,当轮询次数达到上限时,rpc节点判断为rpc执行异常,结束rpc节点运行,并返回false的运行结果,并在tcrobot日志输出控制台打印rpc失败信息,提示用户排查rpc访问失败原因。

步骤s1003:rpc节点发送rpc请求网络包到达游戏服务器后,游戏服务器收到测试协议号的网络包,根据rpc约定格式解析出接口名和参数列表,传送给dataquerymng,dataquerymng在外部查询访问接口列表中找到对应接口,调用接口传入参数列表的所有参数,获取到数据结果后将数据按约定格式序列化,打成网络包通过测试协议号发送回vclient;

本优选实施例约定dataquerymng所有数据访问接口获取数据后都以json数据格式表示,这样不仅方便数据序列化打包传输,而且支持以python常用数据结构表示数据,使用方便;

dataquerymng根据rpc请求正常调用接口如果获取到预期数据结果,则表示rpc请求成功,如果调用过程任何步骤有任何异常或校验不通过导致无法获取数据的情况,则表示rpc请求失败,dataquerymng无论调用接口成功或失败,都要向vclient返回rpc请求结果,本实施例中服务器给vclient返回的网络包中包含一个字段标记rpc访问成功或失败。

dataquerymng中接受外部rpc访问的数据查询接口根据需要可以不断扩展丰富,数据查询接口可以访问到游戏服务器实时运行过程中的内存信息和所有数据库数据,可以满足所有数据访问需求。

步骤s1004:服务器rpc返回结果网络包发送到vclient后,vclient解包获取访问成功/失败标记,如果访问成功,继续解析获取数据结果,失败则跳过这一步,网络解包后对应结果都缓存在tcunit内,等待tcunit执行rpc节点轮询服务器返回结果;

当rpc节点轮询到服务器rpc请求返回结果时,先判断访问标记,如果标记为成功,则继续获取数据结果,保存到varmng中作为变量数据,通过配置的变量名作为索引获取,rpc节点运行结束,返回结果为true,如果标记为失败,则rpc节点运行结束,返回结果为false。

本优选实施例中行为树节点库里除了上述介绍的rpc节点外,还有各种类型的节点,包括:用于基本逻辑操作的节点,如sequence、selector、not等逻辑节点分别代表对子节点执行与、或、取反的操作,此类节点的种类比较稳定,无需过多扩展;用于条件判断的节点,本实施例中行为树执行条件判断的节点主要行为是对从游戏服务器获取的变量数据进行判断,比如玩家是否获取到可攻击目标、玩家是否到达目的地、怪物是否死亡等判断;用于执行测试行为的节点,本实施例中行为树执行的测试行为最终的执行行为都是发送不同协议、不同内容的网络包给游戏服务器,模拟真实玩家执行的行为,根据不同行为可以结合游戏逻辑封装出各种不同类型的网络发包节点,比如玩家执行移动的节点、玩家攻击怪物的节点、玩家使用物品的节点等;用于条件判断和执行测试行为的节点可以由用户在行为树节点库里根据需求不断丰富扩展,特别是某些和游戏逻辑耦合比较紧密的行为,通过封装成行为节点方式给用户配置调用,可以有效降低测试用例配置与代码逻辑的耦合程度,有助于配置稳定和减轻游戏开发过程的迭代维护成本。

图12是根据本发明优选实施例提供的一个行为树测试用例中玩家获取周围可攻击目标进行攻击的一个行为树分支结构图,如图12所示,,vclient执行测试用例时运行到这个如图12所述的行为树分支的执行流程是:

1-1:rpc节点向服务器获取玩家可攻击怪物目标,成功获取到目标id保存在varmng对应变量中,继续执行1-2,获取不到目标或中途异常导致失败则节点返回false,行为树执行结束;

1-2:rpc节点继续向服务器获取玩家和目标id怪物之间的距离,距离值保持在varmng对应变量中,获取成功继续执行2-1-1获取失败则节点返回false,行为树执行结束;

2-1-1:条件判断节点判断玩家与目标距离值是否在攻击范围内,是则跳出当前分支执行2-2,否则继续执行后面分支2-1-2-1;

2-1-2-1:rpc节点向服务器获取玩家到目标之间的移动路径,获取成功则路径保存在varmng对应变量中,继续执行2-1-2-2,失败则返回false,行为树执行结束;

2-1-2-2:通过封装好的移动路径行为节点,访问varmng中保存的路径变量,执行相应网络发包给服务器,模拟玩家移动到目标位置的过程,移动结束后节点返回true,继续执行2-2;

2-2:通过封装好的攻击行为节点,通过网络发包模拟玩家攻击目标的行为,执行结束节点返回true,行为树执行完毕。

本发明优选实施例中提供用于游戏服务器测试的免客机器人技术实现方案和装置,利用行为树来配置玩家测试用例,所有与游戏逻辑耦合的行为都以封装为行为树节点,用户通过组装行为树节点,利用行为树实时运行过程主动向服务器rpc请求数据方式获取测试用例所需游戏数据,并通过变量表示方式保存在系统内供访问使用,可以搭建出符合玩家真实行为的人工智能自动测试用例,并通过启动多个虚拟客户端执行用例模拟多玩家同时对服务器执行批量并发测试行为。本发明提供方法不仅能通过行为树配置来实现测试行为逻辑与配置分离的程序设计理念,而且通过行为树节点主动rpc访问游戏服务器获取测试所需数据方式,代替在免客机器人内按照游戏逻辑对游戏服务器全量收包做解析处理的被动获取数据的处理方式,既减少了免客机器人代码架构和游戏逻辑过分耦合的缺点,也减轻了免客机器人运行过程中对服务器收包的解析开销,提高了免客机器人运行效率。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

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

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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