CN106126423B - 游戏应用程序的测试方法、装置及系统 - Google Patents
游戏应用程序的测试方法、装置及系统 Download PDFInfo
- Publication number
- CN106126423B CN106126423B CN201610479033.8A CN201610479033A CN106126423B CN 106126423 B CN106126423 B CN 106126423B CN 201610479033 A CN201610479033 A CN 201610479033A CN 106126423 B CN106126423 B CN 106126423B
- Authority
- CN
- China
- Prior art keywords
- game
- test
- application
- virtual machine
- game application
- 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.)
- Active
Links
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)
Abstract
本发明公开了一种游戏应用程序的测试方法、装置及系统,属于计算机技术领域。所述方法可以应用于客户端中,所述客户端中存储有测试程序和游戏应用程序,所述方法包括:通过所述测试程序拦截游戏虚拟机的API,获取所述游戏虚拟机的实例,所述游戏虚拟机为所述游戏应用程序中用于解析游戏逻辑和渲染用户界面的组件;根据所述游戏虚拟机的实例,获取所述游戏应用程序的至少一种内部对象;通过所述测试程序,对所述至少一种内部对象进行测试。本发明通过拦截游戏虚拟机的API,实现对该游戏应用程序中内部对象的自动化测试,该测试过程无需获取和维护游戏画面的截图,测试成本较低,测试效率较高。本发明用于测试游戏应用程序。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种游戏应用程序的测试方法、装置及系统。
背景技术
应用程序开发完成后,需要通过测试平台对该应用程序的正确性、完整性、安全性和质量进行自动化测试。游戏应用程序由于其内部对象都是以图形绘制程序绘制而成的,而不是采用原生的标准控件编写的,因此一般无法采用常规的测试平台对游戏应用程序进行自动化遍历测试。
相关技术中,对游戏应用程序的测试一般是基于图像识别的方式来进行的。该测试的过程中需要不断获取游戏画面的截图,然后在该截图中获取按钮等内部对象的坐标位置,并将该坐标位置转换为客户端屏幕上的坐标,然后,使用安卓调试桥等方式来模拟点击屏幕上坐标的位置,从而实现对游戏应用程序的测试。
但是,上述针对游戏应用程序的测试方法,对于不同的操作系统或者不同分辨率的客户端,均需要独立维护一套图形源文件,使得测试成本较高,测试效率较低。
发明内容
为了解决相关技术中游戏类应用程序维护成本高,测试效率低的问题,本发明实施例提供了一种游戏应用程序的测试方法、装置及系统。所述技术方案如下:
第一方面,提供了一种游戏应用程序的测试方法,应用于客户端中,该客户端中存储有测试程序和游戏应用程序,该方法包括:
通过该测试程序拦截游戏虚拟机的应用程序编程接口(英文:ApplicationProgramming Interface;简称:API),获取该游戏虚拟机的实例,该游戏虚拟机为该游戏应用程序中用于解析游戏逻辑和渲染用户界面的组件;
根据该游戏虚拟机的实例,获取该游戏应用程序的至少一种内部对象;
通过该测试程序,对该至少一种内部对象进行测试。
可选的,在该通过该测试程序拦截游戏虚拟机的API之前,该方法还包括:
对该游戏应用程序的生命周期进行监测;
当监测到该游戏应用程序中的可执行文件被解密后,启动该测试程序。
可选的,该通过该测试程序,对该至少一种内部对象进行测试,包括:
控制该测试程序与该游戏类应用程序运行于同一进程中;
在该游戏类应用程序运行的过程中,分别通过该测试程序和该游戏虚拟机的实例运行预设的测试脚本,对该至少一种内部对象进行测试。
可选的,该通过该测试程序拦截游戏虚拟机的API,包括:
确定该游戏应用程序的游戏虚拟机的脚本数据类型;
根据该游戏虚拟机的脚本数据类型,查找该游戏虚拟机的API在进程中的内存地址;
通过该测试程序在该内存地址中修改该游戏虚拟机的API的函数头数据,以拦截该游戏虚拟机的API。
可选的,该对该游戏应用程序的生命周期进行监测,包括:
当接收到服务器端发送的测试指令时,对该游戏应用程序的生命周期进行监测,该测试指令用于指示启动对该游戏应用程序的测试操作。
第二方面,提供了一种游戏应用程序的测试装置,应用于客户端中,该客户端中存储有测试程序和游戏应用程序,该装置包括:
拦截模块,用于通过该测试程序拦截游戏虚拟机的应用程序编程接口API,获取该游戏虚拟机的实例,该游戏虚拟机为该游戏应用程序中用于解析游戏逻辑和渲染用户界面的组件;
获取模块,用于根据该游戏虚拟机的实例,获取该游戏应用程序的至少一种内部对象;
测试模块,用于通过该测试程序,对该至少一种内部对象进行测试。
可选的,该装置还包括:
监测模块,用于对该游戏应用程序的生命周期进行监测;
启动模块,用于当监测到该游戏应用程序中的可执行文件被解密后,启动该测试程序。
可选的,该测试模块,还用于:
控制该测试程序与该游戏类应用程序运行于同一进程中;
在该游戏类应用程序运行的过程中,分别通过该测试程序和该游戏虚拟机的实例运行预设的测试脚本,对该至少一种内部对象进行测试。
可选的,该拦截模块,还用于:
确定该游戏应用程序的游戏虚拟机的脚本数据类型;
根据该游戏虚拟机的脚本数据类型,查找该游戏虚拟机的API在进程中的内存地址;
通过该测试程序在该内存地址中修改该游戏虚拟机的API的函数头数据,以拦截该游戏虚拟机的API。
可选的,该监测模块,还用于:
当接收到服务器端发送的测试指令时,对该游戏应用程序的生命周期进行监测,该测试指令用于指示启动对该游戏应用程序的测试操作。
第三方面,提供了一种客户端,该客户端包括:处理器、存储器、总线和网络接口;该处理器,用于:
通过该测试程序拦截游戏虚拟机的应用程序编程接口API,获取该游戏虚拟机的实例,该游戏虚拟机为该游戏应用程序中用于解析游戏逻辑和渲染用户界面的组件;
根据该游戏虚拟机的实例,获取该游戏应用程序的至少一种内部对象;
通过该测试程序,对该至少一种内部对象进行测试。
该处理器还用于通过执行指令来实现上述第一方面所提供的的游戏应用程序的测试方法。
第四方面,提供一种游戏应用程序的测试系统,该系统包括:
服务器端和客户端;
该客户端包括如第二方面所示的游戏应用程序的测试装置;
该服务器端与该客户端建立有通信连接,该服务器端用于控制该客户端对游戏应用程序进行测试时的测试流程。
可选的,该服务器端还用于:
检测待测试的应用程序是否为游戏应用程序;
当该待测试的应用程序为游戏应用程序时,对该游戏应用程序进行解包操作;
根据测试程序的签名,对该游戏应用程序的签名进行重签名;
检测该游戏应用程序是否满足预设的安全扫描条件;
当该游戏应用程序满足该安全扫描条件时,向该客户端发送测试指令,该测试指令用于指示启动对该游戏应用程序的测试操作。
第五方面,提供一种游戏应用程序的测试系统,该系统包括:
服务器端以及如第三方面该的客户端;
该服务器端与该客户端建立有通信连接,该服务器端用于控制该客户端对游戏应用程序进行测试时的测试流程。
本发明实施例提供的技术方案带来的有益效果是:
本发明提供了一种游戏应用程序的测试方法、装置及系统,该方法可以应用于客户端中,该客户端中存储有测试程序和游戏应用程序,该方法可以通过游戏虚拟机的API获取游戏虚拟机的实例,进而获取该游戏应用程序的至少一种内部对象,因此可以通过测试程序,实现对该游戏应用程序中内部对象的自动化测试,该测试过程无需获取和维护游戏画面的截图,测试成本较低,测试效率较高。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1-1是本发明实施例提供的一种游戏应用程序的测试系统的结构示意图;
图1-2是本发明实施例提供的一种游戏应用程序的测试方法的流程图;
图2-1是本发明实施例提供的另一种游戏应用程序的测试系统的结构示意图;
图2-2是本发明实施例提供的一种服务器端的结构示意图;
图2-3是本发明实施例提供的一种测试程序拦截游戏虚拟机的API的方法流程图;
图3-1是本发明实施例提供的一种游戏应用程序的测试装置的结构示意图;
图3-2是本发明实施例提供的另一种游戏应用程序的测试装置的结构示意图;
图4是本发明实施例提供的一种客户端的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1-1是本发明实施例提供的一种游戏应用程序的测试系统的结构示意图,如图1-1所示,该测试系统可以包括客户端01和服务器端02,其中,服务器端02可以为是一台电脑,或者是一台服务器,该客户端02可以为智能手机、电脑或者电脑中的虚拟机等。该客户端01和该服务器端02可以通过有线或者无线网络建立连接。该服务器端02中可以存储有测试程序和多个应用程序,该多个应用程序中可以包括游戏应用程序。服务器端01用于对该多个应用程序进行检测和识别,当检测到该多个应用程序中存在游戏应用程序时,可以向客户端发送该游戏应用程序的安装包以及测试指令,客户端01可以根据该测试指令,启动对该游戏应用程序的测试操作。
图1-2是本发明实施例提供的一种游戏应用程序的测试方法的流程图,该方法可以应用于图1-1所示的客户端中,该客户端中存储有测试程序和游戏应用程序,参见图1,该方法流程可以包括:
步骤101、通过该测试程序拦截游戏虚拟机的应用程序编程接口API,获取该游戏虚拟机的实例,该游戏虚拟机为该游戏应用程序中用于解析游戏逻辑和渲染用户界面的组件。
步骤102、根据该游戏虚拟机的实例,获取该游戏应用程序的至少一种内部对象。
步骤103、通过该测试程序,对该至少一种内部对象进行测试。
综上所述,本发明提供了一种游戏应用程序的测试方法,该方法可以拦截游戏虚拟机的API,以获取游戏虚拟机的实例,并根据该游戏虚拟机的实例获取该游戏应用程序的至少一种内部对象,从而实现对该游戏应用程序的至少一种内部对象的自动化测试,该测试过程无需获取游戏画面的截图,测试成本较低,测试效率较高。
图2-1是本发明实施例提供的另一种游戏应用程序的测试方法的流程图,该方法可以应用于图1-1所示的测试系统中,如图2-1所示,该方法可以包括:
步骤201、服务器端检测待测试的应用程序是否为游戏应用程序。
在本发明实施例中,该服务器端中可以存储有多个待测试的应用程序,例如可以存储有该多个待测试的应用程序的安装包。该服务器端可以依次对该多个待测试的应用程序进行检测,并判断每个待测试的应用程序是否为游戏应用程序。示例的,该服务器端可以通过解析应用程序安装包的包名,扫描该应用程序的动态链接库(例如so库)中的函数是否包含游戏相关的API来检测待测试的应用程序是否属于游戏应用程序。
图2-2是本发明实施例提供的一种服务器端的结构示意图,如图2-2所示,该服务器端中可以设置有识别模块21,该服务器端可以通过该识别模块21检测待测试的应用程序是否为游戏应用程序。
步骤202、当该待测试的应用程序为游戏应用程序时,服务器端对该游戏应用程序进行解包操作。
当服务器端检测出该待测试的应用程序为游戏应用程序时,可以确定需要对该游戏应用程序执行测试操作,因此可以先对该游戏应用程序进行解包操作,即解压缩该游戏应用程序的安装包。示例的,如图2-2所示,该服务器端可以通过解包模块22对该游戏应用程序进行解包操作。
需要说明的是,当服务器端检测到待测试的应用程序不为游戏应用程序时,则服务器端可以确定能够采用常规测试平台对该应用程序进行自动化遍历测试,而无需采用该服务器端中存储的测试程序对该应用程序进行测试,因此可以结束对该待测试的应用程序的测试操作,并继续对下一个待测试的应用程序进行检测。
步骤203、根据测试程序的签名,对该游戏应用程序的签名进行重签名。
应用程序的签名是指在应用程序的特定字段写入的特定的标记信息。为了保证对该游戏应用程序的测试操作的顺利进行,需要对该游戏应用程序的签名进行重签名,使得该游戏应用程序的签名与该测试程序的签名保持一致。具体的,该服务器端可以在解压缩后的安装包数据中,删除该游戏应用程序的原始签名,然后通过Debug Key对该游戏应用程序进行重新签名,重签名完成后,该服务器端可以将该游戏应用程序重新压缩,打包生成新的安装包。示例的,如图2-2所示,该服务器端可以通过重签名模块23对该游戏应用程序执行重新签名的操作。
步骤204、检测该游戏应用程序是否满足预设的安全扫描条件。
在本发明实施例中,服务器端还可以对该游戏应用程序执行安全扫描操作,以检测该游戏应用程序是否满足预设的安全扫描条件,以保证该服务器端和客户端的安全性。其中,该预设的安全扫描条件可以包括:游戏应用程序的安装包中不包含病毒和游戏应用程序的安装包中不包含恶意代码中的至少一种。示例的,假设该预设的安全扫描条件为:游戏应用程序的安装包中不包含病毒和恶意代码,则当服务器端检测到游戏应用程序的安装包中不包含病毒且不包含恶意代码时,该服务器端即可确定该游戏应用程序满足预设的安全扫描条件。示例的,如图2-2所示,该服务器端可以通过安全扫描模块24对该游戏应用程序进行安全扫描。
步骤205、当该游戏应用程序满足该安全扫描条件时,服务器端向该客户端发送测试指令。
当服务器端检测到该游戏应用程序满足该安全扫描条件时,可以确定该游戏应用程序不会对服务器端和客户端的安全性造成影响,因此可以向该客户端发送测试指令,该测试指令用于指示启动对该游戏应用程序的测试操作。在实际应用中,服务器端向客户端发送测试指令时,还可以将该重新打包后的游戏应用程序的安装包、预设的测试脚本以及测试过程中需要加载的动态链接库等文件推送至该客户端中,客户端可以将其中的测试脚本以及测试过程中需要加载的动态链接库等文件存储在临时文件夹中。示例的,如图2-2所示,该服务器端可以通过通信模块25向客户端发送该测试指令、游戏应用程序的安装包和相关的测试文件。
当服务器端检测到该游戏应用程序不满足该安全扫描条件时,可以确定该游戏应用程序可能会对服务器端和客户端的安全性造成影响,因此可以结束对该游戏应用程序的测试操作。
需要说明的是,在实际应用中,服务器端和客户端中均设置有通信模块,该服务器端和客户端可以通过该通信模块建立通信连接,并传输相关的指令和测试文件等数据。例如,该通信模块可以为通用串行总线(英文:Universal Serial Bus;简称:USB)模块或者无线保真(英文:WIreless-FIdelity;简称:WI-FI)模块。或者,该客户端还可以为服务器端中运行的虚拟机,此时该服务器端和客户端之间可以基于网络通讯协议(英文:TransmissionControl Protocol/Internet Protocol;简称:TCP/IP协议)建立通信连接。
步骤206、客户端对该游戏应用程序的生命周期进行监测。
当客户端接收到服务器端发送的用于指示启动对该游戏应用程序的测试操作的测试指令后,既可对该游戏应用程序的生命周期进行监测。其中,应用程序的生命周期指该应用程序从启动到应用程序结束的全过程,应用程序的生命周期是由客户端的操作系统控制的。
需要说明的是,该客户端在接收到该服务器端发送的测试指令的同时,或者在接收到该测试指令之前,还可以接收到该服务器端发送的重新打包后的游戏应用程序的安装包,该客户端接收到该安装包后,可以安装该游戏应用程序。
在实际应用中,应用程序的安装包中包括可执行文件在内的多种文件,对于普通的应用程序,其安装包中的可执行文件是以明文的方式存储的,而对于加固后的应用程序,其安装包中的可执行文件是经过加密处理的,并且其安装包中还可以包括解密模块,当应用程序所在进程启动后,该解密模块会先运行,并对该加密处理后的可执行文件进行解密处理,将该可执行文件还原成初始状态,以保证应用程序的正常安装和运行。
示例的,以安卓(英文:Android)游戏应用程序为例,Android游戏应用程序的安装包(英文:Android Package;简称:Apk)中包括后缀为dex的文件、资源(英文:Resource)文件和签名(英文:Signature)文件等多个文件。其中后缀为dex的文件为Android系统支持的可执行文件,对于加固后的游戏应用程序,该后缀为dex的文件会被做加密处理。如果直接采用安卓自动化测试平台中的测试程序(例如:Instrumentation Test Case)来启动该加固后的游戏应用程序,则可能会出现该后缀为dex的文件还未被解密,测试程序无法正确解析可执行文件而导致游戏应用程序启动失败的情况。
而在本发明实施例中,该客户端中还可以设置有自定义的插装模块,该插装模块能够对操作系统与应用程序的所有生命周期接口进行解析和监控,进而可以实现对该游戏应用程序的生命周期的监测。
步骤207、当监测到该游戏应用程序中的可执行文件被解密后,启动该测试程序。
在本发明实施例中,由于该测试程序启动时,游戏应用程序中的可执行文件已经被解密,因此,可以保证该测试程序启动该游戏应用程序时,该游戏应用程序可以正常运行,从而避免了测试程序无法正确解析游戏应用程序中的可执行文件,而导致的游戏应用程序宕机的问题。
步骤208、通过该测试程序拦截游戏虚拟机的API,获取该游戏虚拟机的实例。
其中,该游戏虚拟机为该游戏应用程序中用于解析游戏逻辑和渲染用户界面的组件。当该游戏应用程序被启动时,客户端中的操作系统可以创建用于运行该游戏应用程序的进程,并在客户端的内存中为该进程构建一个游戏虚拟机的实例,该游戏虚拟机的实例为一个结构体,该游戏虚拟机的实例中至少包括该游戏应用程序包括的每个内部对象所对应的结构体,因此该游戏虚拟机的实例能够对该游戏应用程序中的各个内部对象进行管理和维护,其中,游戏应用程序的每个内部对象可以为该游戏应用程序中的一种控件元素,也可以为用于指示该游戏应用程序的性能的动态数据。在本发明实施例中,该测试程序拦截的API可以为该游戏虚拟机的标准API,即客户端的操作系统为该游戏虚拟机提供的标准的公共接口。测试程序拦截该游戏虚拟机的API后,既可获取到该游戏虚拟机的实例。
图2-3是本发明实施例提供的一种测试程序拦截游戏虚拟机的API的方法流程图,参考图2-3,该方法可以包括:
步骤2081、确定该游戏应用程序的游戏虚拟机的脚本数据类型。
在本发明实施例中,由于每种脚本类型的游戏虚拟机会采用标准统一的API,因此该测试程序可以根据该游戏虚拟机的标准API的类型,来确定该游戏虚拟机的脚本数据类型,例如Lua脚本、JavaScript脚本或者C#脚本等。
步骤2082、根据该游戏虚拟机的脚本数据类型,查找该游戏虚拟机的API在进程中的内存地址。
步骤2083、在该内存地址中修改该游戏虚拟机的API的函数头数据。
在本发明实施例中,测试程序可以修改该游戏虚拟机的API函数头数据,将该游戏虚拟机的API函数头数据中的代码指向地址修改为测试程序的内存地址,从而可以使得该游戏应用程序在运行过程中可以跳转至该测试程序,从而实现拦截该游戏虚拟机的API。
步骤209、根据该游戏虚拟机的实例,获取该游戏应用程序的至少一种内部对象。
在本发明实施例中,该游戏应用程序中可以包括多种内部对象,该内部对象可以为该游戏应用程序中的控件元素,例如,菜单、按钮和精灵等,还可以为用于指示该游戏应用程序的性能的动态数据,例如,帧率和资源消耗量等。示例的,游戏应用程序在运行的过程可以维护一颗对象树,该对象树中可以记录多个控件元素的位置和大小等信息。测试程序通过游戏虚拟机的实例,可以访问该对象树,进而获取到该游戏应用程序的多个内部对象。
步骤210、控制该测试程序与该游戏类应用程序运行于同一进程中。
在本发明实施例中,该客户端中自定义的插装模块还可以控制该测试程序与该游戏类应用程序运行于同一进程中,使得客户端为该测试程序和该游戏类应用程序分配同一个内存空间,以保证该测试程序在拦截游戏虚拟机的API后,可以成功获取到该游戏虚拟机的实例,有效降低了对游戏应用程序进行测试时出现测试失败的概率。
步骤211、分别通过该测试程序和该游戏虚拟机的实例运行预设的测试脚本,对该至少一种内部对象进行测试。
在该游戏类应用程序运行的过程中,该测试程序和该游戏虚拟机的实例可以从临时文件夹中加载并运行预设的测试脚本,从而实现对该至少一种内部对象的测试操作。例如,可以对该至少一种内部对象进行遍历测试。该客户端中可以设置有临时文件夹,客户端可以通过测试程序和该游戏虚拟机的实例从该临时文件夹中加载so库和测试脚本等测试文件。此外,在该测试的过程中,该测试程序还可以通过客户端中的通信模块接收服务器端的测试命令,以便实时调整该测试流程。
步骤212、客户端向服务器端发送测试结果。
测试完成后,该客户端可以将测试结果发送至该服务器端,例如,可以通过安卓调试桥(英文:Android Debug Bridge;简称:ADB)将该测试结果发送至服务器端。
需要说明的是,该客户端中还可以包括数据存储模块,该数据存储模块用于存储游戏运行过程中所产生的一系列动态数据,如帧率和资源消耗量等,该测试程序在测试的过程中,还可以对该动态数据进行测试。
还需要说明的是,本公开实施例提供的游戏应用程序的测试方法的步骤的先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减。任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本公开的保护范围之内,因此不再赘述。
综上所述,本发明提供了一种游戏应用程序的测试方法,该方法可以拦截游戏虚拟机的API,以获取游戏虚拟机的实例,并根据该游戏虚拟机的实例获取该游戏应用程序的至少一种内部对象,从而实现对该游戏应用程序的至少一种内部对象的自动化测试,该测试过程无需获取游戏画面的截图,测试成本较低,测试效率较高,并且,由于本发明实施例提供的测试方法无需维护图形源文件,因此不会出现同一种图片由于在不同分辨率的显示屏上显示时出现差异而导致的测试误判的情况,故本发明实施例提供的游戏应用程序的测试方法可以适用于不同屏幕分辨率的客户端。
图3-1是本发明实施例提供的一种游戏应用程序的测试装置的结构示意图,该测试装置可以应用于客户端中,该客户端中存储有测试程序和游戏应用程序,如图3-1所示,该装置可以包括:
拦截模块301,用于通过该测试程序拦截游戏虚拟机的应用程序编程接口API,获取该游戏虚拟机的实例,该游戏虚拟机为该游戏应用程序中用于解析游戏逻辑和渲染用户界面的组件。
获取模块302,用于根据该游戏虚拟机的实例,获取该游戏应用程序的至少一种内部对象。
测试模块303,用于通过该测试程序,对该至少一种内部对象进行测试。
综上所述,本发明提供了一种游戏应用程序的测试装置,该装置中的拦截模块可以拦截游戏虚拟机的API,以获取游戏虚拟机的实例,并根据该游戏虚拟机的实例获取该游戏应用程序的至少一种内部对象,从而实现对该游戏应用程序的至少一种内部对象的自动化测试,该测试过程无需获取游戏画面的截图,测试成本较低,测试效率较高。
图3-2是本发明实施例提供的另一种游戏应用程序的测试装置的结构示意图,如图3-2所示,该装置可以包括:
拦截模块301,用于通过该测试程序拦截游戏虚拟机的应用程序编程接口API,获取该游戏虚拟机的实例,该游戏虚拟机为该游戏应用程序中用于解析游戏逻辑和渲染用户界面的组件。
获取模块302,用于根据该游戏虚拟机的实例,获取该游戏应用程序的至少一种内部对象。
测试模块303,用于通过该测试程序,对该至少一种内部对象进行测试。
监测模块304,用于对该游戏应用程序的生命周期进行监测。
启动模块305,用于当监测到该游戏应用程序中的可执行文件被解密后,启动该测试程序。
可选的,该测试模块303,还用于:
控制该测试程序与该游戏类应用程序运行于同一进程中;
在该游戏类应用程序运行的过程中,分别通过该测试程序和该游戏虚拟机的实例运行预设的测试脚本,对该至少一种内部对象进行测试。
可选的,该拦截模块301,还用于:
确定该游戏应用程序的游戏虚拟机的脚本数据类型。
根据该游戏虚拟机的脚本数据类型,查找该游戏虚拟机的API在进程中的内存地址。
通过该测试程序在所述内存地址中修改该游戏虚拟机的API的函数头数据,以拦截该游戏虚拟机的API。
可选的,该监测模块304,还用于:
当接收到服务器端发送的测试指令时,对该游戏应用程序的生命周期进行监测,该测试指令用于指示启动对该游戏应用程序的测试操作。
综上所述,本发明提供了一种游戏应用程序的测试装置,该装置可以拦截游戏虚拟机的API,以获取游戏虚拟机的实例,并根据该游戏虚拟机的实例获取该游戏应用程序的至少一种内部对象,从而实现对该游戏应用程序的至少一种内部对象的自动化测试,该测试过程无需获取游戏画面的截图,测试成本较低,测试效率较高。
图4是本发明实施例提供的一种客户端的结构示意图。该客户端可以是图1-1中所示出的客户端,如图4所示,该客户端可以包括:处理器401,存储器402、总线403和网络接口404(或者其他通信接口)。该总线403用于实现处理器401、存储器402和网络接口404之间的连接,处理器401用于执行存储器402中存储的程序4021,该程序4021可以包括图1或图2所示的游戏应用程序的测试方法。本领域技术人员可以理解,图4中示出的客户端结构并不构成对客户端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是客户端的控制中心,利用各种接口和线路连接整个客户端的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行客户端的各种功能和处理数据,从而对客户端进行整体控制。可选的,处理器401可包括一个或多个处理核心;可选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块。处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统和至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据客户端的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器402可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(英文:Static RandomAccess Memory,简称:SRAM),电可擦除可编程只读存储器(英文:Electrically Erasable ProgrammableRead-Only Memory,简称:EEPROM),可擦除可编程只读存储器(英文:ErasableProgrammable Read Only Memory,简称:EPROM),可编程只读存储器(英文:ProgrammableRead-Only Memory,简称:PROM),只读存储器(英文:Read Only Memory,简称:ROM),磁存储器,快闪存储器,磁盘或光盘。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
尽管未示出,客户端还可以包括给各个部件供电的电源、摄像头、蓝牙模块等,在此不再赘述。
参考图1,本发明还提供了一种游戏应用程序的测试系统,该系统可以包括:服务器端02以及客户端01;其中,该客户端可以包括图3-1或图3-2所示的游戏应用程序的测试装置,或者,该客户端还可以为图4所示的客户端。
该服务器端02与该客户端01建立有通信连接,该服务器端02用于控制该客户端01对游戏应用程序进行测试时的测试流程。
可选的,该服务器端02还用于:
检测待测试的应用程序是否为游戏应用程序;当该待测试的应用程序为游戏应用程序时,对该游戏应用程序进行解包操作。
根据测试程序的签名,对该游戏应用程序的签名进行重签名;
检测该游戏应用程序是否满足预设的安全扫描条件;当该游戏应用程序满足该安全扫描条件时,向该客户端发送测试指令,该测试指令用于指示启动对该游戏应用程序的测试操作。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和模块可的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种游戏应用程序的测试方法,其特征在于,应用于客户端中,所述客户端中存储有测试程序和游戏应用程序,所述方法包括:
通过所述测试程序拦截游戏虚拟机的应用程序编程接口API,获取所述游戏虚拟机的实例,所述游戏虚拟机为所述游戏应用程序中用于解析游戏逻辑和渲染用户界面的组件;
根据所述游戏虚拟机的实例,获取所述游戏应用程序的至少一种内部对象,每种所述内部对象为所述游戏应用程序中的一种控件元素,或者为用于指示所述游戏应用程序的性能的动态数据;
通过所述测试程序,对所述至少一种内部对象进行测试。
2.根据权利要求1所述的方法,其特征在于,在所述通过所述测试程序拦截游戏虚拟机的API之前,所述方法还包括:
对所述游戏应用程序的生命周期进行监测;
当监测到所述游戏应用程序中的可执行文件被解密后,启动所述测试程序。
3.根据权利要求1所述的方法,其特征在于,所述通过所述测试程序,对所述至少一种内部对象进行测试,包括:
控制所述测试程序与所述游戏类应用程序运行于同一进程中;
在所述游戏类应用程序运行的过程中,分别通过所述测试程序和所述游戏虚拟机的实例运行预设的测试脚本,对所述至少一种内部对象进行测试。
4.根据权利要求1所述的方法,其特征在于,所述通过所述测试程序拦截游戏虚拟机的API,包括:
确定所述游戏应用程序的游戏虚拟机的脚本数据类型;
根据所述游戏虚拟机的脚本数据类型,查找所述游戏虚拟机的API在进程中的内存地址;
通过所述测试程序在所述内存地址中修改所述游戏虚拟机的API的函数头数据,以拦截所述游戏虚拟机的API。
5.根据权利要求2所述的方法,其特征在于,所述对所述游戏应用程序的生命周期进行监测,包括:
当接收到服务器端发送的测试指令时,对所述游戏应用程序的生命周期进行监测,所述测试指令用于指示启动对所述游戏应用程序的测试操作。
6.一种游戏应用程序的测试装置,其特征在于,应用于客户端中,所述客户端中存储有测试程序和游戏应用程序,所述装置包括:
拦截模块,用于通过所述测试程序拦截游戏虚拟机的应用程序编程接口API,获取所述游戏虚拟机的实例,所述游戏虚拟机为所述游戏应用程序中用于解析游戏逻辑和渲染用户界面的组件;
获取模块,用于根据所述游戏虚拟机的实例,获取所述游戏应用程序的至少一种内部对象,每种所述内部对象为所述游戏应用程序中的一种控件元素,或者为用于指示所述游戏应用程序的性能的动态数据;
测试模块,用于通过所述测试程序,对所述至少一种内部对象进行测试。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
监测模块,用于对所述游戏应用程序的生命周期进行监测;
启动模块,用于当监测到所述游戏应用程序中的可执行文件被解密后,启动所述测试程序。
8.根据权利要求6所述的装置,其特征在于,所述测试模块,还用于:
控制所述测试程序与所述游戏类应用程序运行于同一进程中;
在所述游戏类应用程序运行的过程中,分别通过所述测试程序和所述游戏虚拟机的实例运行预设的测试脚本,对所述至少一种内部对象进行测试。
9.根据权利要求6所述的装置,其特征在于,所述拦截模块,还用于:
确定所述游戏应用程序的游戏虚拟机的脚本数据类型;
根据所述游戏虚拟机的脚本数据类型,查找所述游戏虚拟机的API在进程中的内存地址;
通过所述测试程序在所述内存地址中修改所述游戏虚拟机的API的函数头数据,以拦截所述游戏虚拟机的API。
10.根据权利要求7所述的装置,其特征在于,所述监测模块,还用于:
当接收到服务器端发送的测试指令时,对所述游戏应用程序的生命周期进行监测,所述测试指令用于指示启动对所述游戏应用程序的测试操作。
11.一种游戏应用程序的测试系统,其特征在于,所述系统包括:
服务器端和客户端;
所述客户端包括如权利要求6至10任一所述的游戏应用程序的测试装置;
所述服务器端与所述客户端建立有通信连接,所述服务器端用于控制所述客户端对游戏应用程序进行测试时的测试流程。
12.根据权利要求11所述的系统,其特征在于,所述服务器端还用于:
检测待测试的应用程序是否为游戏应用程序;
当所述待测试的应用程序为游戏应用程序时,对所述游戏应用程序进行解包操作;
根据测试程序的签名,对所述游戏应用程序的签名进行重签名;
检测所述游戏应用程序是否满足预设的安全扫描条件;
当所述游戏应用程序满足所述安全扫描条件时,向所述客户端发送测试指令,所述测试指令用于指示启动对所述游戏应用程序的测试操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610479033.8A CN106126423B (zh) | 2016-06-27 | 2016-06-27 | 游戏应用程序的测试方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610479033.8A CN106126423B (zh) | 2016-06-27 | 2016-06-27 | 游戏应用程序的测试方法、装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106126423A CN106126423A (zh) | 2016-11-16 |
CN106126423B true CN106126423B (zh) | 2018-10-19 |
Family
ID=57266198
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610479033.8A Active CN106126423B (zh) | 2016-06-27 | 2016-06-27 | 游戏应用程序的测试方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106126423B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107105100B (zh) * | 2017-05-15 | 2020-05-22 | 广州君海网络科技有限公司 | 移动终端游戏的监控方法和系统 |
CN107844703B (zh) * | 2017-10-13 | 2021-07-09 | 珠海金山网络游戏科技有限公司 | 一种基于Android平台Unity3D游戏的客户端安全检测方法及装置 |
CN108920325A (zh) * | 2018-06-12 | 2018-11-30 | 奇酷互联网络科技(深圳)有限公司 | 应用类型检测方法、系统、可读存储介质及智能终端 |
CN109045702B (zh) * | 2018-07-24 | 2022-03-25 | 网易(杭州)网络有限公司 | 一种外挂检测方法、系统、装置、计算设备和介质 |
CN109063466A (zh) * | 2018-07-26 | 2018-12-21 | 北京盘石信用管理有限公司 | 一种app安全的展示方法 |
CN109408393B (zh) * | 2018-11-07 | 2021-07-27 | 深圳市腾讯网络信息技术有限公司 | 应用测试方法、装置及设备和计算机可读存储介质 |
CN109499071A (zh) * | 2018-12-06 | 2019-03-22 | 珠海西山居移动游戏科技有限公司 | 一种检测游戏服务器协议安全的测试方法及装置 |
CN111951366B (zh) * | 2020-07-29 | 2021-06-15 | 北京蔚领时代科技有限公司 | 一种云原生3d场景游戏方法和系统 |
CN112087347A (zh) * | 2020-09-02 | 2020-12-15 | 苏州亿歌网络科技有限公司 | 游戏服务器测试方法及系统 |
CN113209630B (zh) * | 2021-05-14 | 2022-09-30 | 上海完美时空软件有限公司 | 游戏应用的抓帧防御方法及装置、存储介质、计算机设备 |
CN114039760B (zh) * | 2021-11-03 | 2022-08-09 | 中国工商银行股份有限公司 | 安全测试方法、装置、计算机设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104484273A (zh) * | 2014-12-19 | 2015-04-01 | 广州博冠信息科技有限公司 | 应用程序的测试方法、设备及系统 |
CN104778121A (zh) * | 2015-03-25 | 2015-07-15 | 网易(杭州)网络有限公司 | 游戏程序的测试方法、装置及系统 |
CN104965778A (zh) * | 2015-04-28 | 2015-10-07 | 腾讯科技(深圳)有限公司 | 游戏测试方法及装置 |
CN105550101A (zh) * | 2015-12-02 | 2016-05-04 | 北京奇虎科技有限公司 | 一种用于应用程序的测试方法、电子设备及系统 |
-
2016
- 2016-06-27 CN CN201610479033.8A patent/CN106126423B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104484273A (zh) * | 2014-12-19 | 2015-04-01 | 广州博冠信息科技有限公司 | 应用程序的测试方法、设备及系统 |
CN104778121A (zh) * | 2015-03-25 | 2015-07-15 | 网易(杭州)网络有限公司 | 游戏程序的测试方法、装置及系统 |
CN104965778A (zh) * | 2015-04-28 | 2015-10-07 | 腾讯科技(深圳)有限公司 | 游戏测试方法及装置 |
CN105550101A (zh) * | 2015-12-02 | 2016-05-04 | 北京奇虎科技有限公司 | 一种用于应用程序的测试方法、电子设备及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106126423A (zh) | 2016-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106126423B (zh) | 游戏应用程序的测试方法、装置及系统 | |
TWI575397B (zh) | 利用運行期代理器及動態安全分析之應用程式逐點保護技術 | |
CN109697060B (zh) | 视频特效系统及其生成方法、装置、设备和存储介质 | |
CN106294102B (zh) | 应用程序的测试方法、客户端、服务器及系统 | |
CN111831538B (zh) | 调试方法、装置以及存储介质 | |
CN111740948B (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
CN112256570B (zh) | 远程调试方法、装置、设备及存储介质 | |
CN107463500A (zh) | 测试脚本的调试方法、介质、系统和计算设备 | |
CN109086606B (zh) | 一种程序漏洞挖掘方法、装置、终端及存储介质 | |
CN109241746B (zh) | 代码处理方法、装置、计算设备以及存储介质 | |
CN114116078A (zh) | 基于微前端的应用数据处理方法、装置、设备及介质 | |
CN113467784A (zh) | 应用程序处理方法及其装置、计算机可读存储介质 | |
CN108228312B (zh) | 通过解释器执行代码的系统和方法 | |
CN113360379B (zh) | 程序测试环境创建方法和程序测试环境创建装置 | |
CN108304230B (zh) | 调整应用属性的实现方法、装置及可读存储介质 | |
Kröll et al. | Aristoteles–dissecting apple’s baseband interface | |
CN110147294B (zh) | 调试信息的获取方法、装置、终端及计算机可读存储介质 | |
CN113127329A (zh) | 脚本调试方法、装置及计算机存储介质 | |
CN114676436A (zh) | 一种基于结构化变异的安卓应用多媒体解析库漏洞挖掘系统及方法 | |
CN111610990A (zh) | 一种应用程序升级的方法、装置和相关系统 | |
CN116501596A (zh) | 应用程序的测试方法及装置 | |
CN110633210B (zh) | 文件执行方法、装置、存储介质和电子设备 | |
JP2022150518A (ja) | テスト処理プログラム、テスト処理方法および情報処理装置 | |
CN109408133A (zh) | 一种启动组件的方法和设备 | |
CN109408194B (zh) | 对文件的执行进行仿真的系统和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |