CN114185773A - 程序测试方法、装置、电子设备和计算机可读存储介质 - Google Patents
程序测试方法、装置、电子设备和计算机可读存储介质 Download PDFInfo
- Publication number
- CN114185773A CN114185773A CN202111399342.1A CN202111399342A CN114185773A CN 114185773 A CN114185773 A CN 114185773A CN 202111399342 A CN202111399342 A CN 202111399342A CN 114185773 A CN114185773 A CN 114185773A
- Authority
- CN
- China
- Prior art keywords
- function
- game operation
- game
- editor
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Pinball Game Machines (AREA)
Abstract
本申请实施例公开了一种程序测试方法、装置、电子设备和计算机可读存储介质;在本申请实施例中,获取游戏操作,将实现所述游戏操作的函数封装进预设数据包协议中,所述游戏操作的函数为所述终端上的虚幻引擎的属性***的函数;当基于测试指令,通过所述虚幻引擎的编辑器运行所述游戏程序时,将所述预设数据包协议发送至所述编辑器;通过所述编辑器对所述预设数据包协议进行解析,得到所述游戏操作的函数;通过所述编辑器调用所述游戏操作的函数,执行所述游戏操作,得到操作结果;基于所述操作结果确定针对所述游戏程序的测试结果。本申请实施例可以不用重新进行编译,较为方便。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种程序测试方法、装置、电子设备和计算机可读存储介质。
背景技术
为了保证游戏的正常运行,一般会对游戏进行测试。目前,通常采用测试工具对游戏进行测试。
当采用测试工具对游戏进行测试时,如果需要测试游戏新的功能,则需要在测试工具中添加代码,并进行编译,导致每次游戏增加新的功能时,都需要进行重新编译,比较麻烦。
发明内容
本申请实施例提供一种程序测试方法、装置、电子设备和计算机可读存储介质,可以解决需要重新编译,比较麻烦的技术问题。
一种程序测试方法,包括:
获取游戏操作,将实现上述游戏操作的函数封装进预设数据包协议中,上述游戏操作的函数为上述终端上的虚幻引擎的属性***的函数;
当基于测试指令,通过上述虚幻引擎的编辑器运行上述游戏程序时,将上述预设数据包协议发送至上述编辑器;
通过上述编辑器对上述预设数据包协议进行解析,得到上述游戏操作的函数;
通过上述编辑器调用上述游戏操作的函数,执行上述游戏操作,得到操作结果;
基于上述操作结果确定针对上述游戏程序的测试结果。
相应地,本申请实施例提供一种程序测试装置,包括:
获取模块,用于获取游戏操作,将实现上述游戏操作的函数封装进预设数据包协议中,上述游戏操作的函数为上述终端上的虚幻引擎的属性***的函数;
发送模块,用于当基于测试指令,通过上述虚幻引擎的编辑器运行上述游戏程序时,将上述预设数据包协议发送至上述编辑器;
解析模块,用于通过上述编辑器对上述预设数据包协议进行解析,得到上述游戏操作的函数;
调用模块,用于通过上述编辑器调用上述游戏操作的函数,执行上述游戏操作,得到操作结果;
确定模块,用于基于上述操作结果确定针对上述游戏程序的测试结果。
可选地,上述预设数据包协议包括第一字段和第二字段;
相应地,上述获取模块具体用于执行:
将上述游戏操作的函数的名称存储于上述第一字段中;
将调用完上述游戏操作的函数的结果存储于上述第二字段中。
可选地,上述获取模块具体用于执行:
若上述游戏操作的函数为静态函数,则将上述游戏操作的函数的名称、上述游戏操作的函数对应的类名、上述游戏操作的函数对应的类的包名以及上述操作游戏的函数的输入值存储于上述第一字段中。
可选地,上述获取模块具体用于执行:
若上述游戏操作的函数为非静态函数,则将上述游戏操作的函数的名称、上述游戏操作的函数的对象名以及上述游戏操作的函数的输入值存储于上述第一字段中。
可选地,上述第一字段为数组;
相应地,调用模块具体用于执行:
若上述游戏操作的函数包括至少两个函数,则通过上述编辑器按照上述游戏操作的函数在上述数组中的存储顺序,依次调用上述游戏操作的函数,执行上述游戏操作,得到操作结果。
可选地,发送模块具体用于执行:
当基于测试指令,通过上述虚幻引擎的编辑器运行上述游戏程序时,将目标命令字段和上述预设数据包协议发送至上述编辑器;
相应地,解析模块具体用于执行:
若接收到上述目标命令字段,则通过上述编辑器对上述预设数据包协议进行解析,得到上述游戏操作的函数。
可选地,该程序测试装置还包括:
标记模块,用于若虚幻引擎的属性***没有包括上述游戏操作的函数,则采用预设的宏对上述游戏操作的函数进行标记;
存储模块,用于将标记后的游戏操作的函数存储至上述虚幻引擎的属性***中。
此外,本申请实施例还提供一种电子设备,包括处理器和存储器,上述存储器存储有计算机程序,上述处理器用于运行上述存储器内的计算机程序实现本申请实施例提供的程序测试方法。
此外,本申请实施例还提供一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序适于处理器进行加载,以执行本申请实施例所提供的任一种程序测试方法。
此外,本申请实施例还提供一种计算机程序产品,包括计算机程序,上述计算机程序被处理器执行时实现本申请实施例所提供的任一种程序测试方法。
在本申请实施例中,先获取游戏操作,将实现游戏操作的函数封装进预设数据包协议中,游戏操作的函数为终端上的虚幻引擎的属性***的函数。然后当基于测试指令,通过虚幻引擎的编辑器运行游戏程序时,将预设数据包协议发送至编辑器。接着通过编辑器对预设数据包协议进行解析,得到游戏操作的函数。其次通过编辑器调用游戏操作的函数,执行游戏操作,得到操作结果。最后基于操作结果确定针对游戏程序的测试结果。
即在本实施例中,由于虚幻引擎的属性***的反射功能,虚幻引擎的编辑器可以直接调用虚幻引擎的属性***的函数,而游戏操作的函数为虚幻引擎的属性***的函数,因此,如果需要测试游戏程序,则可以直接将游戏程序的游戏操作的函数封装在预设数据包协议中。然后当编辑器对预设数据包协议进行解析得到游戏操作的函数时,可以直接从虚幻引擎的属性***中调用游戏操作的函数,执行游戏操作,得到操作结果,最后基于操作结果确定游戏程序的测试结果,无需进行编译,较为方便。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的程序测试过程的场景示意图;
图2是本申请实施例提供的程序测试方法的流程示意图;
图3是本申请实施例提供的预设数据包协议的示意图;
图4是本申请实施例提供的另一种预设数据包协议的示意图;
图5是本申请实施例提供的另一种程序测试方法的流程示意图;
图6是本申请实施例提供的控制点击控件的示意图;
图7是本申请实施例提供的测试结果的示意图;
图8是本申请实施例提供的测试报告的示意图;
图9是本申请实施例提供的另一种程序测试方法的流程示意图;
图10是本申请实施例提供终端中的Python客户端和终端中的编辑器的交互示意图;
图11是本申请实施例提供的程序测试装置的结构示意图;
图12是本申请实施例提供的电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种程序测试方法、装置、电子设备和计算机可读存储介质。其中,该程序测试装置可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备。
其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、网络加速服务(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。
并且,多个服务器可组成为一区块链,而服务器为区块链上的节点。
终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能家电以及车载终端等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
本申请实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通以及辅助驾驶等。
例如,参见图1,以程序测试装置集成在终端中为例,终端可以获取游戏操作,将实现游戏操作的函数封装进预设数据包协议中,游戏操作的函数为终端上的虚幻引擎的属性***的函数;当基于测试指令,通过虚幻引擎的编辑器运行游戏程序时,将预设数据包协议发送至编辑器;通过编辑器对预设数据包协议进行解析,得到游戏操作的函数;通过编辑器调用游戏操作的函数,执行游戏操作,得到操作结果;基于操作结果确定针对游戏程序的测试结果。
另外,本申请实施例中的“多个”指两个或两个以上。本申请实施例中的“第一”和“第二”等用于区分描述,而不能理解为暗示相对重要性。
以下分别进行详细说明。需要说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
在本实施例中,将从程序测试装置的角度进行描述,该程序测试装置具体可以集成在服务器或终端等设备中,为了方便对本申请的程序测试方法进行说明,以下将以程序测试装置集成在终端中进行详细说明,即以终端作为执行主体进行详细说明。
请参阅图2,图2是本申请一实施例提供的程序测试方法的流程示意图。该程序测试方法可以包括:
S201、获取游戏操作,将实现游戏操作的函数封装进预设数据包协议中,游戏操作的函数为终端上的虚幻引擎的属性***的函数。
游戏操作包括但不限于游戏程序中的角色的移动、开枪以及跳跃等。实现游戏操作的函数以及游戏操作的函数的个数可以通过实际情况进行设置。比如,游戏操作为获取目标角色的位置,则实现获取目标角色的位置的函数可以包括 OpGetWorld、GetPlayerCharacter以及K2_GetActorLocation等。
虚幻引擎是一种跨平台的游戏引擎,可用于开发Windows、MacOS、Linux 平台的单机游戏,或是iOS、Android移动设备的游戏。对于虚幻引擎的版本可以根据实际情况进行选择,比如,选择虚幻引擎4(Unreal Engine 4,UE4)作为本实施例中的虚幻引擎。
如果虚幻引擎的属性***没有包括游戏操作的函数,则可以采用预设的宏对游戏操作的函数进行标记,将标记后的游戏操作的函数存储至虚幻引擎的属性***中。
当虚幻引擎为虚幻引擎4时,预设的宏可以为UFUNCTION。采用预设的宏对游戏操作的函数进行标记指将预设的宏添加在游戏操作的函数的前面。
将实现游戏操作的函数封装进预设数据包协议中,指将实现游戏操作的函数的属性信息封装进预设数据包协议中,函数的属性信息包括函数的名称、函数对应的类的名称、函数的输入值以及函数的对象名等。
另外,终端可以通过脚本语言客户端获取游戏操作,并通过脚本语言客户端将实现游戏操作的函数封装进预设数据包协议中。对于脚本语言客户端的具体类型,用户可以根据实际情况进行设置,比如,选择Python客户端或java客户端作为本实施例中的脚本语言客户端,本实施例在此不做限定。
在一些实施例中,预设数据包协议包括第一字段和第二字段。相应地,将实现游戏操作的函数封装进预设数据包协议中,包括:
将游戏操作的函数的名称存储于第一字段中;
将调用完游戏操作的函数的结果存储于第二字段中。
比如,第一字段可以为ops,第二字段可以为out。即此时,该预设数据包协议的格式可以为JSON格式。
可选地,若游戏操作的函数为静态函数,则将游戏操作的函数的名称、游戏操作的函数对应的类名、游戏操作的函数对应的类的包名以及操作游戏的函数的输入值存储于第一字段中。
游戏操作的函数对应的类名指游戏操作的函数所属的类的名称。游戏操作的函数对应的类的包名指游戏操作的函数的类路径。即第一字段中可以包括各个第一子字段,各个第一子字段分别用来存储游戏操作的函数的名称、游戏操作的函数对应的类名、游戏操作的函数对应的类的包名以及操作游戏的函数的输入值。
比如,第一字段包括第一子字段static、第一子字段package、第一子字段 class、第一子字段function和第一子字段parms。第一子字段static用于存储true, true表示游戏操作的函数为静态函数,第一子字段class用于存储游戏操作的函数对应的类名,第一子字段function用于存储游戏操作的函数的名称,第一子字段parms用于存储操作游戏的函数的输入值。
可选地,若游戏操作的函数为非静态函数,则将游戏操作的函数的名称、游戏操作的函数的对象名以及游戏操作的函数的输入值存储于第一字段中。
比如,第一字段可以包括第一子字段static、第一子字段object、第一子字段function和第一子字段parms。第一子字段static用于存储false,false表示游戏操作的函数为非静态函数,第一子字段object用于存储游戏操作的函数的对象名,第一子字段function用于存储游戏操作的函数的名称,第一子字段parms用于存储操作游戏的函数的输入值。
需要说明的是,当游戏操作的函数包括多个函数时,则第一字段可以同时存储各个游戏操作的函数的名称,即此时,对于同一个游戏操作,预设数据包协议中可以只采用一个第一字段来存储游戏操作的函数。并且,此时第二字段只存储调用完最后一个游戏操作的函数的结果。
下面详细描述将实现游戏操作的函数封装进预设数据包协议中的过程。
比如,游戏操作为获取目标角色的位置信息,实现游戏操作的函数包括OpGetWorld、GetPlayerCharacter以及K2_GetActorLocation。OpGetWorld用于获取目标角色所在的游戏程序的世界信息,游戏程序的世界信息包括游戏程序的地图信息、游戏程序的角色信息以及游戏程序的装备信息等。 GetPlayerCharacter用于获取目标角色,K2_GetActorLocation用于获取目标角色的位置信息。
其中,OpGetWorld和GetPlayerCharacter均为静态函数, K2_GetActorLocation为非静态函数。此时,预设数据包协议可以如图3所示。此时,第一字段ops还包括第一子字段name,第一子字段name用于存储游戏操作的函数获取的信息的名称,比如,OpGetWorld的获取的世界信息名称为world。 GetPlayerCharacte的获取的信息的名称为character。
并且,由于该游戏操作的函数存在三个,因此,前面的游戏操作的函数的执行结果可以作为后面的游戏操作的函数的输入值。比如,如图3所示, GetPlayerCharacter中的第一子字段parms存储的是OpGetWorld的执行结果“#world”。
又比如,游戏操作为控制目标角色跳跃,实现游戏操作的函数包括 OpGetWorld、GetPlayerCharacter和Jump。此时,预设数据包协议可以如图4所示。
S202、当基于测试指令,通过虚幻引擎的编辑器运行游戏程序时,将预设数据包协议发送至编辑器。
在终端将实现游戏操作的函数封装进预设数据包协议之后,当终端接收到测试指令时,可以基于测试指令,先启动虚幻引擎的编辑器,然后通过虚幻引擎的编辑器运行游戏程序。最后,在运行游戏程序的过程中,将预设数据包协议发送至编辑器中。
可选地,终端可以先通过脚本语言客户端获取游戏程序的测试用例,测试用例包括启动虚幻引擎的编辑器指令,运行游戏程序指令、登录指令、预设数据包协议以及存储游戏程序的测试结果等。
然后当终端接收到测试指令时,在脚本语言客户端运行该测试用例,在运行测试用例的过程中,通过脚本语言客户端启动编辑器,在编辑器中运行游戏程序,并将预设数据包协议发送至编辑器中。
此时,可以在编辑器的测试工具中添加两个命令行,一个命令行用于当接收到运行游戏程序指令时,运行游戏程序,另外一个命令行用于启动监听功能,即启动Socket端口,以便可以通过Socket端口监听到预设数据包协议。可选地,可以基于该Socket端口,通过测试工具监听到将预设数据包协议。
测试工具可以为Gautomator或Poco。GAutomator或Poco是一种手游客户端自动化测试框架。
应注意,由于当***弹出其他弹窗后,编辑器会暂停运行游戏程序,因此,可以设置预设时间间隔置顶编辑器窗口或持续置顶编辑器窗口。并且,可以通过运行窗口置顶程序的方式将编辑器窗口置顶。
比如,如图5所示,通过脚本语言客户端启动编辑器,然后编辑器启动监听功能,运行游戏程序,并且运行窗口置顶程序,持续置顶编辑器窗口。在运行游戏程序时,播放游戏程序中的地图,并对游戏操作进行测试,得到测试结果,基于测试结果生成测试报告。
S203、通过编辑器对预设数据包协议进行解析,得到游戏操作的函数。
终端在将预设数据包协议发送至编辑器后,再通过编辑器对预设数据包协议进行解析,以便编辑器得到游戏操作的函数。
由于一些游戏操作可以通过操作编辑器的界面上的控件实现,无需通过游戏操作的函数实现,比如,当游戏操作为点击操作或长按操作时,可以通过界面上的控件实现。因此,在一些实施例中,将预设数据包协议发送至编辑器,包括:
将目标命令字段和预设数据包协议发送至编辑器;
相应地,通过编辑器对预设数据包协议进行解析,得到游戏操作的函数,包括:
若接收到目标命令字段,则通过编辑器对预设数据包协议进行解析,得到游戏操作的函数。
在本实施例中,当通过编辑器接收到目标命令字段时,表明接收到的是预设数据包协议,是通过调用预设数据包协议中的游戏操作的函数实现游戏操作,则需要对预设数据包协议进行解析。
如果通过编辑器接收到的是初始命令字段,表明是通过编辑器的界面(在编辑器上运行游戏程序时,编辑器的界面即为游戏程序的界面)上的控件实现游戏操作,无需通过函数实现游戏操作,则可以通过编辑器在界面上查找初始命令字段对应的控件,然后通过界面的交互接口,操作控件实现游戏操作。
在本实施例中,通过编辑器不但可以测试游戏程序的界面,而且可以测试游戏程序中的其他游戏操作。使得可以在编辑器阶段对游戏程序进行冒烟测试,验证游戏程序的游戏操作,发现游戏程序的问题,以便测试人员解决问题,从而提升游戏程序的测试效率,提高导出游戏程序的安装包的成功率。
另外,当通过游戏操作的函数实现游戏操作时,有时也同时需要通过编辑器的界面上的控件实现游戏操作,即同时通过游戏操作的函数和界面上的控件实现游戏操作。
同时通过游戏操作的函数和界面上的控件实现游戏操作的过程可以为:终端通过编辑器在调用游戏操作的函数的过程中,调用控件对应的响应函数,从而控制控件,实现游戏操作。
比如,如图6所示,当游戏操作为控制目标角色跳跃时,在调用跳跃函数 (Jump)的过程中,调用控件的响应函数,从而控制点击控件,实现目标角色跳跃。
并且,在相关技术中,每当增加一个游戏操作,则需要设置该游戏操作对应的字段,以便通过该字段确定调用测试工具中的哪段代码,从而使得增加的游戏操作越多,字段也增加地越多。
而在本实施例中,只需要设置一个目标命令字段,然后当接收到目标命令字段时对预设数据包协议进行解析,即当收到目标命令字段时,调用测试工具中的解析功能模块对预设数据包协议进行解析,即使预设数据包协议中的游戏操作的函数的不相同,由于解析过程是相同的,因此,可以只用一个目标命令字段。
S204、通过编辑器调用游戏操作的函数,执行游戏操作,得到操作结果。
编辑器得到游戏操的函数之后,通过编辑器调用游戏操作的函数,以便执行游戏操作,从而得到操作结果。
可选地,可以通过编辑器中的测试工具调用游戏操作的函数。并且,通过编辑器得到操作结果之后,可以将操作结果发送至脚本语言客户端。
在一些实施例中,如果游戏操作的函数包括多个函数,则第一字段可以为数组,相应地,通过编辑器调用游戏操作的函数,执行游戏操作,得到操作结果,包括:
若游戏操作的函数包括至少两个函数,则通过编辑器按照游戏操作的函数在数组中的存储顺序,依次调用游戏操作的函数,执行游戏操作,得到操作结果。
比如,如图3所示,游戏操作的函数分别为OpGetWorld、GetPlayerCharacter 以及K2_GetActorLocation,在数组ops中,OpGetWorld的存储顺先于 GetPlayerCharacter的存储顺序,GetPlayerCharacter的存储顺序先于 K2_GetActorLocation的存储顺序,因此,在通过编辑器调用游戏操作的函数的过中,先调用OpGetWorld,接着调用GetPlayerCharacter,最后再调用 K2_GetActorLocation。
并且,存储顺序在先的游戏操作的函数的执行结果可以作为存储顺序在后的游戏操作的函数的输入值。
S205、基于操作结果确定针对游戏程序的测试结果。
终端在得到操作结果后,再基于操作结果确定游戏程序的测试结果。需要说明的是,终端可以在得到游戏程序的所有的游戏操作的操作结果后,再基于所有的游戏操作的操作结果确定游戏程序的测试结果。最后可以基于测试结果生成测试报告。
比如,测试结果可以如图7所示,其中,有19个游戏操作执行成功,1个游戏操作执行失败,2个游戏操作没有执行。测试报告可以如图8所示,测试报告中包括了游戏操作、执行游戏操作的开始时间,执行游戏操作耗费的时间、游戏操作的执行结果以及游戏操作对应的链接。
由以上可知,在本申请实施例中,先获取游戏操作,将实现游戏操作的函数封装进预设数据包协议中,游戏操作的函数为终端上的虚幻引擎的属性***的函数。然后当基于测试指令,通过虚幻引擎的编辑器运行游戏程序时,将预设数据包协议发送至编辑器。接着通过编辑器对预设数据包协议进行解析,得到游戏操作的函数。其次通过编辑器调用游戏操作的函数,执行游戏操作,得到操作结果。最后基于操作结果确定针对游戏程序的测试结果。
即在本实施例中,由于虚幻引擎的属性***的反射功能,虚幻引擎的编辑器可以直接调用虚幻引擎的属性***的函数,而游戏操作的函数为虚幻引擎的属性***的函数,因此,如果需要测试游戏程序,则可以直接将游戏程序的游戏操作的函数封装在预设数据包协议中。然后当编辑器对预设数据包协议进行解析得到游戏操作的函数时,可以直接从虚幻引擎的属性***中调用游戏操作的函数,执行游戏操作,得到操作结果,最后基于操作结果确定游戏程序的测试结果,无需进行编译,较为方便。
根据上述实施例所描述的方法,以下将举例作进一步详细说明。
本实施例程序测试装置集成在终端为例,请参阅图9,图9为本申请实施例提供的程序测试方法的流程示意图。该程序测试方法流程可以包括:
S901、终端通过Python客户端获取游戏操作,若虚幻引擎4的属性***没有包括游戏操作的函数,则采用UFUNCTION对游戏操作的函数进行标记;将标记后的游戏操作的函数存储至虚幻引擎4的属性***中。
游戏操作包括但不限于游戏程序中的角色的移动、开枪以及跳跃等。实现游戏操作的函数以及游戏操作的函数的个数可以通过实际情况进行设置。比如,游戏操作为获取目标角色的位置,则实现获取目标角色的位置的函数可以包括 OpGetWorld、GetPlayerCharacter以及K2_GetActorLocation等。
采用UFUNCTION对游戏操作的函数进行标记指将UFUNCTION添加在游戏操作的函数的前面。
S902、若游戏操作的函数为静态函数,终端则通过Python客户端将游戏操作的函数的名称、游戏操作的函数对应的类名、游戏操作的函数对应的类的包名以及操作游戏的函数的输入值存储于预设数据包协议的第一字段中。
游戏操作的函数对应的类名指游戏操作的函数所属的类的名称。游戏操作的函数对应的类的包名指游戏操作的函数的类路径。即第一字段中可以包括各个第一子字段,各个第一子字段分别用来存储游戏操作的函数的名称、游戏操作的函数对应的类名、游戏操作的函数对应的类的包名以及操作游戏的函数的输入值。
比如,第一字段包括第一子字段static、第一子字段package、第一子字段 class、第一子字段function和第一子字段parms。第一子字段static用于存储true,true表示游戏操作的函数为静态函数,第一子字段class用于存储游戏操作的函数对应的类名,第一子字段function用于存储游戏操作的函数的名称,第一子字段parms用于存储操作游戏的函数的输入值。
S903、若游戏操作的函数为非静态函数,终端则通过Python客户端将游戏操作的函数的名称、游戏操作的函数的对象名以及游戏操作的函数的输入值存储于预设数据包协议的第一字段中。
比如,第一字段可以包括第一子字段static、第一子字段object、第一子字段function和第一子字段parms。第一子字段static用于存储false,false表示游戏操作的函数为非静态函数,第一子字段object用于存储游戏操作的函数的对象名,第一子字段function用于存储游戏操作的函数的名称,第一子字段parms用于存储操作游戏的函数的输入值。
需要说明的是,当游戏操作的函数包括多个函数时,则第一字段可以同时存储各个游戏操作的函数的名称,即此时,对于同一个游戏操作,预设数据包协议中可以只采用一个第一字段来存储游戏操作的函数。并且,此时第二字段只存储调用完最后一个游戏操作的函数的结果。
S904、终端通过Python客户端将调用完游戏操作的函数的结果存储于预设数据包协议的第二字段中。
即此时,该预设数据包协议的格式可以为JSON格式,预设数据包协议包括第一字段和第二字段,第一字段可以为ops,第二字段可以为out。
S905、终端通过Python客户端获取游戏程序的测试用例,当接收到测试指令时,在Python客户端上运行测试用例。
测试用例包括编辑器的启动指令,运行游戏程序指令、登录指令、预设数据包协议、目标命令字段、初始命令字段以及存储游戏程序的测试结果等。
S906、在运行测试用例的过程中,终端通过Python客户端,基于Socket端口将测试用例中的编辑器的启动指令发送至编辑器,基于编辑器的启动指令启动编辑器。
S907、终端通过Python客户端,基于Socket端口,将测试用例中的游戏程序的启动指令发送至编辑器,基于游戏程序的启动指令,通过编辑器运行游戏程序。
S908、终端通过Python客户端,基于Socket端口,将目标命令字段和预设数据包协议发送至编辑器,终端则过编辑器中的测试工具对预设数据包协议进行解析,得到游戏操作的函数。
S909、终端通过编辑器的测试工具调用游戏操作的函数,执行游戏操作,得到操作结果。
如果游戏操作的函数包括多个函数,则第一字段可以为数组。终端通过编辑器的测试工具按照游戏操作的函数在数组中的存储顺序,依次调用游戏操作的函数,执行游戏操作,得到操作结果。
比如,如图3所示,游戏操作的函数分别为OpGetWorld、GetPlayerCharacter 以及K2_GetActorLocation,在数组ops中,OpGetWorld的存储顺先于 GetPlayerCharacter的存储顺序,GetPlayerCharacter的存储顺序先于 K2_GetActorLocation的存储顺序,因此,在通过编辑器调用游戏操作的函数的过中,先调用OpGetWorld,接着调用GetPlayerCharacter,最后再调用 K2_GetActorLocation。
并且,存储顺序在先的游戏操作的函数的执行结果可以作为存储顺序在后的游戏操作的函数的输入值。
S9010、终端通过编辑器对操作结果进行序列化,并将序列化后的操作结果返回至Python客户端。
S9011、终端通过Python客户端,基于Socket端口,将初始命令字段发送至编辑器,终端通过编辑器在界面上查找初始命令字段对应的控件。
S9012、终端通过编辑器的界面的交互接口,操作初始命令字段对应的控件,实现游戏操作,得到操作结果,并将操作结果返回至Python客户端。
S9013、终端通过Python客户端基于操作结果确定游戏程序的测试结果,并基于测试结果生成测试报告。
在本实施例中,在运行测试用例的过程中,通过Python客户端将测试用例中的编辑器的启动指令、游戏程序的启动指令、目标命令字段、初始命令字段和预设数据包协议发送至虚幻引擎4的编辑器。比如,如图10所示。通过Python 客户端,基于Socket端口,将测试用例中的编辑器的启动指令、游戏程序的启动指令、目标命令字段、初始命令字段和预设数据包协议发送至虚幻引擎4的编辑器。
可选地,终端可以通过虚幻引擎4的编辑器中的测试工具监听到测试用例中的指令、命令字段和预设数据包协议。
应注意,在通过过虚幻引擎4的编辑器中的测试工具监听测试用例中的指令、命令字段和预设数据包协议之前,可以先在编辑器的测试工具中添加两个命令行,一个命令行用于当接收到运行游戏程序指令时,运行游戏程序,另外一个命令行用于启动监听功能,以便可以通过监听功能监听到试用例中的指令、命令字段和预设数据包协议。
测试工具可以为Gautomator或Poco。应注意,由于当***弹出其他弹窗后,编辑器会暂停运行游戏程序,因此,可以设置预设时间间隔置顶编辑器窗口或持续置顶编辑器窗口。并且,可以通过运行窗口置顶程序的方式将编辑器窗口置顶。
在本实施例中,由于虚幻引擎4的属性***的反射功能,虚幻引擎4的编辑器可以直接调用虚幻引擎4的属性***的函数,而游戏操作的函数为虚幻引擎4 的属性***的函数,因此,如果需要测试游戏程序,则可以直接将游戏程序的游戏操作的函数封装在预设数据包协议中。然后当编辑器对预设数据包协议进行解析得到游戏操作的函数时,可以直接从虚幻引擎4的属性***中调用游戏操作的函数,执行游戏操作,得到操作结果,最后基于操作结果确定游戏程序的测试结果,无需进行编译,较为方便。
并且,在相关技术中,每当增加一个游戏操作,则需要设置该游戏操作对应的字段,以便通过该字段确定调用哪段代码,从而使得增加的游戏操作越多,字段也增加地越多。
而在本实施例中,只需要设置一个目标命令字段,然后当接收到目标命令字段时对预设数据包协议进行解析,即当收到目标命令字段时,调用测试工具中的解析功能模块对预设数据包协议进行解析,即使预设数据包协议中的游戏操作的函数的不相同,由于解析过程是相同的,因此,可以只用一个目标命令字段。
再者,在本实施例中,在本实施例中,通过编辑器不但可以测试游戏程序的界面,而且可以测试游戏程序中的其他游戏操作。使得可以在编辑器阶段对游戏程序进行冒烟测试,验证游戏程序的游戏操作,发现游戏程序的问题,以便测试人员解决问题,从而提升游戏程序的测试效率,提高导出游戏程序的安装包的成功率。
为便于更好的实施本申请实施例提供的程序测试方法,本申请实施例还提供一种基于上述程序测试方法的装置。其中名词的含义与上述程序测试方法中相同,具体实现细节可以参考方法实施例中的说明。
例如,如图11所示,该程序测试装置可以包括:
获取模块1101,用于获取游戏操作,将实现游戏操作的函数封装进预设数据包协议中,游戏操作的函数为终端上的虚幻引擎的属性***的函数;
发送模块1102,用于当基于测试指令,通过虚幻引擎的编辑器运行游戏程序时,将预设数据包协议发送至编辑器;
解析模块1103,用于通过编辑器对预设数据包协议进行解析,得到游戏操作的函数;
调用模块1104,用于通过编辑器调用游戏操作的函数,执行游戏操作,得到操作结果;
确定模块1105,用于基于操作结果确定针对游戏程序的测试结果。
可选地,预设数据包协议包括第一字段和第二字段;
相应地,获取模块1101具体用于执行:
将游戏操作的函数的名称存储于第一字段中;
将调用完游戏操作的函数的结果存储于第二字段中。
可选地,获取模块1101具体用于执行:
若游戏操作的函数为静态函数,则将游戏操作的函数的名称、游戏操作的函数对应的类名、游戏操作的函数对应的类的包名以及操作游戏的函数的输入值存储于第一字段中。
可选地,获取模块1101具体用于执行:
若游戏操作的函数为非静态函数,则将游戏操作的函数的名称、游戏操作的函数的对象名以及游戏操作的函数的输入值存储于第一字段中。
可选地,第一字段为数组。
相应地,调用模块1104具体用于执行:
若游戏操作的函数包括至少两个函数,则通过编辑器按照游戏操作的函数在数组中的存储顺序,依次调用游戏操作的函数,执行游戏操作,得到操作结果。
可选地,发送模块1102具体用于执行:
当基于测试指令,通过虚幻引擎的编辑器运行游戏程序时,将目标命令字段和预设数据包协议发送至编辑器;
相应地,解析模块1103具体用于执行:
若接收到目标命令字段,则通过编辑器对预设数据包协议进行解析,得到游戏操作的函数。
可选地,该程序测试装置还包括:
标记模块,用于若虚幻引擎的属性***没有包括游戏操作的函数,则采用预设的宏对游戏操作的函数进行标记;
存储模块,用于将标记后的游戏操作的函数存储至虚幻引擎的属性***中。
具体实施时,以上各个模块可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块的具体实施方式以及对应的有益效果可参见前面的方法实施例,在此不再赘述。
本申请实施例还提供一种电子设备,该电子设备可以是服务器或终端等,如图12所示,其示出了本申请实施例所涉及的电子设备的结构示意图,具体来讲:
该电子设备可以包括一个或者一个以上处理核心的处理器1201、一个或一个以上计算机可读存储介质的存储器1202、电源1203和输入单元1204等部件。本领域技术人员可以理解,图12中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器1201是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器1202内的计算机程序和/ 或模块,以及调用存储在存储器1202内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器1201可包括一个或多个处理核心;优选的,处理器1201可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1201中。
存储器1202可用于存储计算机程序以及模块,处理器1201通过运行存储在存储器1202的计算机程序以及模块,从而执行各种功能应用以及数据处理。存储器1202可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的计算机程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器1202可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器1202还可以包括存储器控制器,以提供处理器1201对存储器1202的访问。
电子设备还包括给各个部件供电的电源1203,优选的,电源1203可以通过电源管理***与处理器1201逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。电源1203还可以包括一个或一个以上的直流或交流电源、再充电***、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入单元1204,该输入单元1204可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器1201会按照如下的指令,将一个或一个以上的计算机程序的进程对应的可执行文件加载到存储器1202中,并由处理器1201 来运行存储在存储器1202中的计算机程序,从而实现各种功能,比如:
获取游戏操作,将实现游戏操作的函数封装进预设数据包协议中,游戏操作的函数为终端上的虚幻引擎的属性***的函数;
当基于测试指令,通过虚幻引擎的编辑器运行游戏程序时,将预设数据包协议发送至编辑器;
通过编辑器对预设数据包协议进行解析,得到游戏操作的函数;
通过编辑器调用游戏操作的函数,执行游戏操作,得到操作结果;
基于操作结果确定针对游戏程序的测试结果。
以上各个操作的具体实施方式以及对应的有益效果可参见上文对图像处理方法的详细描述,在此不作赘述。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过计算机程序来完成,或通过计算机程序控制相关的硬件来完成,该计算机程序可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种程序测试方法中的步骤。例如,该计算机程序可以执行如下步骤:
获取游戏操作,将实现游戏操作的函数封装进预设数据包协议中,游戏操作的函数为终端上的虚幻引擎的属性***的函数;
当基于测试指令,通过虚幻引擎的编辑器运行游戏程序时,将预设数据包协议发送至编辑器;
通过编辑器对预设数据包协议进行解析,得到游戏操作的函数;
通过编辑器调用游戏操作的函数,执行游戏操作,得到操作结果;
基于操作结果确定针对游戏程序的测试结果。
以上各个操作的具体实施方式以及对应的有益效果可参见前面的实施例,在此不再赘述。
其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该计算机可读存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种程序测试方法中的步骤,因此,可以实现本申请实施例所提供的任一种程序测试方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
其中,根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述程序测试方法。
以上对本申请实施例所提供的一种程序测试方法、装置、电子设备和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (11)
1.一种程序测试方法,其特征在于,应用于终端,包括:
获取游戏操作,将实现所述游戏操作的函数封装进预设数据包协议中,所述游戏操作的函数为所述终端上的虚幻引擎的属性***的函数;
当基于测试指令,通过所述虚幻引擎的编辑器运行所述游戏程序时,将所述预设数据包协议发送至所述编辑器;
通过所述编辑器对所述预设数据包协议进行解析,得到所述游戏操作的函数;
通过所述编辑器调用所述游戏操作的函数,执行所述游戏操作,得到操作结果;
基于所述操作结果确定针对所述游戏程序的测试结果。
2.根据权利要求1所述的程序测试方法,其特征在于,所述预设数据包协议包括第一字段和第二字段;
相应地,所述将实现所述游戏操作的函数封装进预设数据包协议中,包括:
将所述游戏操作的函数的名称存储于所述第一字段中;
将调用完所述游戏操作的函数的结果存储于所述第二字段中。
3.根据权利要求2所述的程序测试方法,其特征在于,所述将所述游戏操作的函数的名称存储于所述第一字段中,包括:
若所述游戏操作的函数为静态函数,则将所述游戏操作的函数的名称、所述游戏操作的函数对应的类名、所述游戏操作的函数对应的类的包名以及所述操作游戏的函数的输入值存储于所述第一字段中。
4.根据权利要求2所述的程序测试方法,其特征在于,所述将所述游戏操作的函数的名称存储于所述第一字段中,包括:
若所述游戏操作的函数为非静态函数,则将所述游戏操作的函数的名称、所述游戏操作的函数的对象名以及所述游戏操作的的函数的输入值存储于所述第一字段中。
5.根据权利要求2所述的程序测试方法,其特征在于,所述第一字段为数组;
相应地,所述通过所述编辑器调用所述游戏操作的函数,执行所述游戏操作,得到操作结果,包括:
若所述游戏操作的函数包括至少两个函数,则通过所述编辑器按照所述游戏操作的函数在所述数组中的存储顺序,依次调用所述游戏操作的函数,执行所述游戏操作,得到操作结果。
6.根据权利要求1所述的程序测试方法,其特征在于,所述当基于测试指令,通过所述虚幻引擎的编辑器运行所述游戏程序时,将所述预设数据包协议发送至所述编辑器,包括:
当基于测试指令,通过所述虚幻引擎的编辑器运行所述游戏程序时,将目标命令字段和所述预设数据包协议发送至所述编辑器;
相应地,所述通过所述编辑器对所述预设数据包协议进行解析,得到所述游戏操作的函数,包括:
若接收到所述目标命令字段,则通过所述编辑器对所述预设数据包协议进行解析,得到所述游戏操作的函数。
7.根据权利要求1所述的程序测试方法,其特征在于,在所述通过所述编辑器调用所述游戏操作的函数,执行所述游戏操作,得到操作结果之前,还包括:
若虚幻引擎的属性***没有包括所述游戏操作的函数,则采用预设的宏对所述游戏操作的函数进行标记;
将标记后的游戏操作的函数存储至所述虚幻引擎的属性***中。
8.一种程序测试装置,其特征在于,应用于终端,包括:
获取模块,用于获取游戏操作,将实现所述游戏操作的函数封装进预设数据包协议中,所述游戏操作的函数为所述终端上的虚幻引擎的属性***的函数;
发送模块,用于当基于测试指令,通过所述虚幻引擎的编辑器运行所述游戏程序时,将所述预设数据包协议发送至所述编辑器;
解析模块,用于通过所述编辑器对所述预设数据包协议进行解析,得到所述游戏操作的函数;
调用模块,用于通过所述编辑器调用所述游戏操作的函数,执行所述游戏操作,得到操作结果;
确定模块,用于基于所述操作结果确定针对所述游戏程序的测试结果。
9.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有计算机程序,所述处理器用于运行所述存储器内的计算机程序,以执行权利要求1至7任一项所述的程序测试方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于处理器进行加载,以执行权利要求1至7任一项所述的程序测试方法。
11.一种计算机程序产品,其特征在于,所述计算机程序产品存储有计算机程序,所述计算机程序适于处理器进行加载,以执行权利要求1至7任一项所述的程序测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111399342.1A CN114185773A (zh) | 2021-11-19 | 2021-11-19 | 程序测试方法、装置、电子设备和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111399342.1A CN114185773A (zh) | 2021-11-19 | 2021-11-19 | 程序测试方法、装置、电子设备和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114185773A true CN114185773A (zh) | 2022-03-15 |
Family
ID=80541343
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111399342.1A Pending CN114185773A (zh) | 2021-11-19 | 2021-11-19 | 程序测试方法、装置、电子设备和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114185773A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117234935A (zh) * | 2023-09-28 | 2023-12-15 | 重庆赛力斯新能源汽车设计院有限公司 | 基于虚幻引擎的测试方法、装置、电子设备及存储介质 |
-
2021
- 2021-11-19 CN CN202111399342.1A patent/CN114185773A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117234935A (zh) * | 2023-09-28 | 2023-12-15 | 重庆赛力斯新能源汽车设计院有限公司 | 基于虚幻引擎的测试方法、装置、电子设备及存储介质 |
CN117234935B (zh) * | 2023-09-28 | 2024-05-14 | 重庆赛力斯新能源汽车设计院有限公司 | 基于虚幻引擎的测试方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108154197B (zh) | 实现虚拟场景中图像标注验证的方法及装置 | |
CN109359003B (zh) | 游戏服务器压力测试方法、装置及设备 | |
CN109324857B (zh) | 一种用户引导实现方法、装置和存储介质 | |
CN108038398B (zh) | 一种二维码解析能力测试方法、装置及电子设备 | |
CN111831538A (zh) | 调试方法、装置以及存储介质 | |
CN112732576B (zh) | 基于用户界面的自动化测试方法、装置及设备 | |
CN111341315B (zh) | 语音控制方法、装置、计算机设备和存储介质 | |
CN111481939B (zh) | 游戏账号控制方法、装置、介质及电子设备 | |
CN111258913A (zh) | 算法自动测试方法、装置、计算机***及可读存储介质 | |
CN112882930B (zh) | 自动化测试方法、装置、存储介质及电子设备 | |
CN111084991A (zh) | 一种基于游戏的聊天方法、装置、终端及存储介质 | |
CN111298434B (zh) | 业务处理方法、装置、设备及存储介质 | |
CN112214405A (zh) | 一种软件测试方法、装置、电子设备和可读存储介质 | |
CN114185773A (zh) | 程序测试方法、装置、电子设备和计算机可读存储介质 | |
CN108874658A (zh) | 一种沙箱分析方法、装置、电子设备及存储介质 | |
CN113448730A (zh) | 服务的处理方法、装置、计算机设备及存储介质 | |
CN104750553B (zh) | 应用运行方法和装置 | |
CN110737900B (zh) | 网页功能测试方法及装置、服务器和计算机可读存储介质 | |
CN115712571A (zh) | 一种交互服务测试、装置、计算机设备及存储介质 | |
CN112799956B (zh) | 资产识别能力测试方法、装置及***装置 | |
EP2775414A1 (en) | Role clearing method, device and system for emulator game | |
CN109782925B (zh) | 一种处理方法、装置及电子设备 | |
CN113117340A (zh) | 游戏运行方法、装置、存储介质及电子设备 | |
CN113468069A (zh) | 应用测试方法、装置、计算机设备及存储介质 | |
CN113973060A (zh) | 一种物联网模拟方法、装置、***及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |