应用执行脚本的方法、应用测试方法、装置和计算机设备与流程

文档序号:15557706发布日期:2018-09-29 01:30阅读:192来源:国知局

本申请涉及计算机技术领域,特别是涉及一种应用执行脚本的方法、应用测试方法、装置、计算机可读存储介质和计算机设备。



背景技术:

随着计算机技术的发展,越来越多的脚本语言被开发使用,比如lua语言。lua是一种小巧的脚本语言,随着计算机技术的发展,越来越多的应用逐渐使用lua语言实现应用内的各种逻辑功能。对应用的lua语言部分的功能进行测试时,当需要运行外部脚本文件对应用进行测试时,由于lua本身不支持多线程,因此传统技术采取的是在另一个线程中进行外部脚本的加载。但这种加载外部脚本进行测试的方式会破坏lua栈结构,导致上下文环境出错,进而引起应用程序崩溃。



技术实现要素:

基于此,有必要针对上述加载外部脚本进行测试会导致崩溃的技术问题,提供一种提高测试稳定性的应用执行脚本的方法、应用测试方法、装置、计算机可读存储介质和计算机设备。

一种应用执行脚本的方法,所述方法包括:

运行应用,所述应用执行编译后的动态库,所述编译后的动态库是在应用运行过程中注入的;

对所述应用的进程的函数执行事件进行监听;

当监听到所述应用的进程创建虚拟机线程时,则获取到所述虚拟机线程;

对所述虚拟机线程的函数执行事件进行监听;

当监听到所述虚拟机线程执行所述编译后的动态库中包含的逻辑函数时,通过所述虚拟机线程加载外部脚本并执行。

一种应用测试方法,所述方法包括:

在被测试终端的应用运行过程中注入编译后的动态库;

在协议显示界面显示所述应用加载并执行外部测试脚本获取到的协议数据,所述协议数据为所述应用执行所述外部测试脚本获取到的数据,所述外部测试脚本是通过所述应用创建的虚拟机线程执行所述编译后的动态库中包含的逻辑函数加载的;

获取对所述协议显示界面中显示的所述协议数据的修改指令,将所述修改指令发送至所述被测试终端运行的所述应用,所述修改指令用于所述虚拟机线程根据所述修改指令再次执行所述外部测试脚本。

一种应用执行脚本的装置,所述装置包括:

运行模块,用于运行应用,所述应用执行编译后的动态库,所述编译后的动态库是在应用运行过程中注入的;

监听模块,用于对所述应用的进程的函数执行事件进行监听;当监听到所述应用的进程创建虚拟机线程时,则获取到所述虚拟机线程;对所述虚拟机线程的函数执行事件进行监听;

脚本执行模块,用于当监听到所述虚拟机线程执行所述编译后的动态库中包含的逻辑函数时,通过所述虚拟机线程加载外部脚本并执行。

一种应用测试装置,所述装置包括:

动态库注入模块,用于在被测试终端的应用运行过程中注入编译后的动态库;

数据显示模块,用于在协议显示界面显示所述应用加载并执行外部测试脚本获取到的协议数据,所述协议数据为所述应用执行所述外部测试脚本获取到的数据,所述外部测试脚本是通过所述应用创建的虚拟机线程执行所述编译后的动态库中包含的逻辑函数加载的;

修改模块,用于获取对所述协议显示界面中显示的所述协议数据的修改指令,将所述修改指令发送至所述被测试终端运行的所述应用,所述修改指令用于所述虚拟机线程根据所述修改指令再次执行所述外部测试脚本。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

运行应用,所述应用执行编译后的动态库,所述编译后的动态库是在应用运行过程中注入的;

对所述应用的进程的函数执行事件进行监听;

当监听到所述应用的进程创建虚拟机线程时,则获取到所述虚拟机线程;

对所述虚拟机线程的函数执行事件进行监听;

当监听到所述虚拟机线程执行所述编译后的动态库中包含的逻辑函数时,通过所述虚拟机线程加载外部脚本并执行。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

在被测试终端的应用运行过程中注入编译后的动态库;

在协议显示界面显示所述应用加载并执行外部测试脚本获取到的协议数据,所述协议数据为所述应用执行所述外部测试脚本获取到的数据,所述外部测试脚本是通过所述应用创建的虚拟机线程执行所述编译后的动态库中包含的逻辑函数加载的;

获取对所述协议显示界面中显示的所述协议数据的修改指令,将所述修改指令发送至所述被测试终端运行的所述应用,所述修改指令用于所述虚拟机线程根据所述修改指令再次执行所述外部测试脚本。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

运行应用,所述应用执行编译后的动态库,所述编译后的动态库是在应用运行过程中注入的;

对所述应用的进程的函数执行事件进行监听;

当监听到所述应用的进程创建虚拟机线程时,则获取到所述虚拟机线程;

对所述虚拟机线程的函数执行事件进行监听;

当监听到所述虚拟机线程执行所述编译后的动态库中包含的逻辑函数时,通过所述虚拟机线程加载外部脚本并执行。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

在被测试终端的应用运行过程中注入编译后的动态库;

在协议显示界面显示所述应用加载并执行外部测试脚本获取到的协议数据,所述协议数据为所述应用执行所述外部测试脚本获取到的数据,所述外部测试脚本是通过所述应用创建的虚拟机线程执行所述编译后的动态库中包含的逻辑函数加载的;

获取对所述协议显示界面中显示的所述协议数据的修改指令,将所述修改指令发送至所述被测试终端运行的所述应用,所述修改指令用于所述虚拟机线程根据所述修改指令再次执行所述外部测试脚本。

上述应用执行脚本的方法、应用测试方法、装置、计算机可读存储介质和计算机设备,通过在应用运行的过程中注入编译后的动态库,使得应用在运行过程中能够执行编译后的动态库,对应用的进程进行监听,当监听到创建了虚拟机线程则获取到虚拟机线程,并对虚拟机线程进行监听,当虚拟机线程执行编译后的动态库中包含的逻辑函数时,则使得虚拟机能够根据逻辑函数预定义的功能对外部脚本进行加载并执行。这种应用加载脚本的方法,无须创建新的线程对脚本进行加载并执行,而是使用虚拟机自身的线程对脚本进行加载执行,避免了加载外部脚本时会导致崩溃的问题,提高了加载脚本的稳定性。

附图说明

图1为一个实施例中应用执行脚本的方法的应用环境图;

图2为一个实施例中应用执行脚本的方法的流程示意图;

图3为一个实施例中编译后的动态库的生成方式的步骤的流程示意图;

图4为一个实施例中在通过虚拟机线程加载外部脚本并执行的步骤之后的流程示意图;

图5为一个实施例中虚拟机线程执行外部脚本的流程示意图;

图6为另一个实施例中应用执行脚本的方法的流程示意图;

图7为一个实施例中应用执行脚本的方法的流程图;

图8为一个实施例中应用执行脚本的方法的时序图;

图9为一个实施例中应用测试方法的流程示意图;

图10为另一个实施例中应用测试方法的流程示意图;

图11为一个实施例中应用测试方法的时序图;

图12为一个实施例中应用执行脚本的装置的结构框图;

图13为另一个实施例中应用执行脚本的装置的结构框图;

图14为一个实施例中应用测试装置的结构框图;

图15为一个实施例中计算机设备的结构框图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

图1为一个实施例中应用执行脚本的方法的应用环境图。参照图1,该应用执行脚本的方法应用于应用执行脚本的系统。该应用执行脚本的系统包括第一终端110和第二终端120。第一终端110和第二120通过网络连接。第一终端110具体可以是台式终端或移动终端,移动终端具体可以手机、平板电脑、笔记本电脑等中的至少一种,第一终端110用于运行应用。第二终端120具体可以是台式终端或移动终端,移动终端具体可以手机、平板电脑、笔记本电脑等中的至少一种,第二终端用于显示协议显示界面,获取对协议显示界面中显示的协议数据的修改指令等。

如图2所示,在一个实施例中,提供了一种应用执行脚本的方法。本实施例主要以该方法应用于上述图1中的第一终端110来举例说明。参照图2,该应用执行脚本的方法具体包括如下步骤:

步骤202,运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的。

在第一终端上启动并运行应用,在应用运行的过程中,注入编译后的动态库,则应用在运行过程中则可执行注入的编译后的动态库。此过程也可称为注入so,so即为编译后的动态库。编译后的动态库是指技术人员加入了自定义逻辑代码的动态库,以使应用在执行该编译后的动态库时,可根据编译后的动态库中包含的自定义逻辑代码执行相关的逻辑,比如应用在执行编译后的动态库时,可根据编译后的动态库中的自定义逻辑代码执行外部脚本。

步骤204,对应用的进程的函数执行事件进行监听。

进程(process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。当第一终端的应用启动运行后,即启动了一个对应的进程。在应用的进程中,可以存在有多个执行路径,则进程可创建多个线程。

对第一终端上运行的应用的进程进行监听,即对应用的进程的函数执行事件进行监听,可使用hook对应用进程进行监听。hook是一种程序中断机制,在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。

步骤206,当监听到应用的进程创建虚拟机线程时,则获取到虚拟机线程。

对应用的进程的函数执行事件进行监听,当监听到应用的进程通过执行创建函数创建了虚拟机线程时,则可获取到虚拟机线程。

步骤208,对虚拟机线程的函数执行事件进行监听。

步骤210,当监听到虚拟机线程执行编译后的动态库中包含的逻辑函数时,通过虚拟机线程加载外部脚本并执行。

当获取到虚拟机线程后,可对虚拟机线程的函数执行事件进行监听。虚拟机线程即为lua线程,在对虚拟机线程进行监听时,可使用lua自带的hook机制对虚拟机线程中的函数执行事件进行监听,当监听到lua线程执行编译后的动态库中包含的逻辑函数时,虚拟机线程则会根据逻辑函数定义的功能对外部脚本进行加载并执行。

上述应用执行脚本的方法,通过在应用运行的过程中注入编译后的动态库,使得应用在运行过程中能够执行编译后的动态库,对应用的进程进行监听,当监听到创建了虚拟机线程则获取到虚拟机线程,并对虚拟机线程进行监听,当虚拟机线程执行编译后的动态库中包含的逻辑函数时,则使得虚拟机能够根据逻辑函数预定义的功能对外部脚本进行加载并执行。这种应用加载脚本的方法,无须创建新的线程对脚本进行加载并执行,而是使用虚拟机自身的线程对脚本进行加载执行,避免了加载外部脚本时会导致崩溃的问题,提高了加载脚本的稳定性。

在一个实施例中,如图3所示,编译后的动态库的生成方式的步骤包括:

步骤302,获取应用的脚本语言源码。

步骤304,对脚本语言源码进行编辑,加入预先编辑的逻辑代码。

步骤306,对加入预先编辑的逻辑代码的脚本语言源码进行编译,得到编译后的动态库。

动态库(dynamiclinklibrary,缩写为dll),又称为动态链接库,dll是一个可由多个程序同时使用的代码和数据的库,dll不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数,使用动态库链接有助于共享数据和资源。

为了使得应用的脚本语言在运行时能够执行外部脚本,可先获取到该应用的脚本语言源码。应用在开发过程中,可以使用多种语言开发,比如可以使用java(一门面向对象编程语言)语言、c++(c语言的继承,c语言是一门通用计算机编程语言)语言开发应用,针对不同的功能可使用不能的语言开发应用,使得应用更好的实现特定功能。

应用的脚本语言源码可以是lua源码,lua源码是指该应用使用lua语言实现的逻辑功能部分的代码。以应用的脚本语言源码是lua源码为例,获取到应用的lua源码后,可对lua源码进行编辑,加入自定义的逻辑代码,以此增加部分功能,比如当应用创建的lua线程执行自定义的逻辑代码时,可加载外部脚本并执行。

应用在执行加入了逻辑代码的编译后的动态库时,可实现加入的逻辑代码中增加的功能。再对加入了预先编辑的逻辑代码的脚本语言源码进行编译,即可得到编译后的动态库。通过在应用运行过程中,将编译后的动态库注入,应用即可通过执行编译后的动态库,从而实现编译后的动态库中增加的功能,比如加载外部脚本并执行。

通过这种方式,则无需创建多线程用于对外部脚本的加载与执行,而是可将编译后的动态库,使得第一终端上运行的应用创建的lua在执行编译后的动态库时可利用lua自身的线程对外部脚本进行加载并执行,避免了加载外部脚本时会导致崩溃的问题,提高了加载脚本的稳定性。

在一个实施例中,在通过虚拟机线程加载外部脚本并执行之后,还包括:获取虚拟机线程通过执行外部脚本获取到的协议数据;将协议数据发送至服务器,协议数据用于在协议显示界面进行显示。

在外部脚本中定义了需要获取到的协议数据内容,因此当虚拟机线程加载外部脚本并执行后,可获取到虚拟机线程执行外部脚本获取到协议数据。协议数据可以是虚拟机线程执行的函数的各个参数。可将协议数据发送至服务器,由服务器转发至第二终端的协议显示界面进行显示。服务器可以是第二终端的协议显示界面对应的应用所在的服务器,通过服务器与协议显示界面进行数据交互,实现将执行外部脚本获取到的协议数据显示在协议显示界面,则可以较为直观清晰的获知协议数据的具体内容,技术人员或测试人员也可通过第二终端对显示的协议数据进行分析等操作,对数据分析的分析更为方便。

在一个实施例中,在将协议数据发送至服务器之后,还包括:接收服务器发送的对协议显示界面上显示的协议数据的修改指令;通过虚拟机线程获取到修改指令并解析,根据解析后的修改指令执行外部脚本。

第一终端上运行的虚拟机线程执行外部脚本后可获取到对应的协议数据,并将协议数据通过服务器发送至第二终端的协议显示界面进行显示,因此可通过协议显示界面对显示的协议数据进行修改。当对协议数据进行修改时则会产生修改指令,服务器在接收到修改指令后,可将修改指令转发至虚拟机线程,虚拟机线程则对修改指令进行解析,并根据解析后的修改指令对虚拟机线程中的协议数据进行修改后,则会触发再一次执行外部脚本。

将协议数据显示在第二终端的协议显示界面后,可较为便利的对显示的协议数据进行修改,从而使得第一终端运行的虚拟机线程能够再次执行外部脚本,在实现稳定的执行外部脚本的同时,也能够更为方便对协议数据进行修改。

在一个实施例中,上述方法还包括:根据编译后的动态库创建交互线程。通过虚拟机线程获取到修改指令并解析,根据解析后的修改指令执行外部脚本,包括:通过交互线程从服务器获取到修改指令;通过虚拟机线程接收交互线程转发的修改指令并解析,得到修改后的参数;根据修改后的参数执行外部脚本。

将编译后的动态库注入至应用进程中后,可根据编译后的动态库中加入的逻辑代码创建交互线程,交互线程用于虚拟机线程与服务器之间进行交互。当服务器获取到协议显示界面产生的修改指令后,可将修改指令转发至交互线程,由交互线程将修改指令发送至虚拟机线程。虚拟机线程接收到交互线程转发的修改指令后,可对修改指令进行解析,得到修改后的参数,并根据修改后的参数对协议数据进行对应的修改,触发再次对外部脚本的执行,即根据修改后的参数执行外部脚本。

通过编译后的动态库创建的交互线程,使得第一终端运行的虚拟机线程能够与第二终端的协议显示界面对应的服务器进行数据交互,便于传输第一终端运行的虚拟机线程获取到的协议数据,也能够使得协议数据能够在协议显示界面进行显示,便于技术人员或测试人员通过协议显示界面对协议数据进行分析等操作。

在一个实施例中,如图4所示,在通过虚拟机线程加载外部脚本并执行的步骤之后,还包括:

步骤402,获取虚拟机线程通过执行外部脚本获取到的协议数据。

当第一终端运行的虚拟机线程通过执行编译后的动态库的逻辑函数加载外部脚本并执行后,可获取到外部脚本中定义的需要获取到的协议数据。即在外部脚本中定义了需要获取到的协议数据,则当虚拟机线程执行外部脚本时,则会根据外部脚本获取到对应的协议数据。外部脚本可以是lua脚本,在外部lua脚本中定义了当被执行时需要获取到哪些协议数据,协议数据可以是虚拟机线程执行的函数的各个参数,比如参数可以是常量值、变量、表达式或另外一个函数。虚拟机线程可以是lua线程,因此获取到的协议数据可以是lua线程中的协议数据,即lua数据。

如图5所示的虚拟机线程执行外部脚本的流程示意图,虚拟机线程加载到外部脚本后,则对外部脚本进行编译,编译成字节码后,即可执行字节码从而实现外部脚本中的逻辑功能。字节码是一种包含执行程序,由一序列op(operationcode,操作码)代码/数据对组成的二进制文件,是一种中间码。

步骤404,将协议数据发送至服务器,协议数据用于在协议显示界面进行显示。

当虚拟机线程执行外部脚本获取到对应的协议数据后,可通过编译后的动态库创建的交互线程将协议数据发送至服务器,服务器将协议数据转发至第二终端的协议显示界面进行显示。交互线程是由编译后的动态库中自定义的逻辑代码创建的,用于与服务器进行通讯与交互等。比如,外部脚本定义要获取到的是登录账号a的个人信息相关的数据时,则虚拟机线程执行外部脚本时会获取到账号a的个人信息的数据,例如个性签名、用户昵称、性别、头像等信息。获取到的数据则会显示在协议显示界面,技术人员可直接通过协议显示界面清楚的获知虚拟机线程中的协议数据。

步骤406,接收服务器发送的对协议显示界面上显示的协议数据的修改指令。

步骤408,通过交互线程从服务器获取到修改指令。

当虚拟机线程获取到的协议数据显示在协议显示界面时,可通过协议显示界面对协议数据进行修改,对协议数据进行修改时会产生对应的修改指令,服务器在接收到修改指令后,将修改指令发送至编译后的动态库创建的交互线程,交互线程可将修改指令转发至虚拟机线程。

步骤410,通过虚拟机线程接收交互线程转发的修改指令并解析,得到修改后的参数。

步骤412,根据修改后的参数执行外部脚本。

当服务器获取到第二终端的协议显示界面产生的修改指令后,将修改指令发送至第一终端运行的交互线程,交互线程则将修改指令转发至虚拟机线程,当虚拟机线程接收到交互线程转发的修改后,则会对修改指令进行解析,并根据解析后的修改指令对虚拟机线程中的协议数据进行修改后,则会再一次执行外部脚本,再次执行外部脚本时,则可以获取到协议数据被修改后执行得到的新数据。

通过编译后的动态库创建的交互线程,使得第一终端运行的虚拟机线程能够与第二终端的协议显示界面对应的服务器进行数据交互,便于传输第一终端运行的虚拟机线程获取到的协议数据,也能够使得协议数据能够在协议显示界面进行显示。将协议数据显示在第二终端的协议显示界面后,可较为便利的对显示的协议数据进行修改,从而使得第一终端运行的虚拟机线程能够再次执行外部脚本,在保证稳定的执行外部脚本的同时,也能够便于技术人员或测试人员通过协议显示界面对协议数据进行分析等操作。

如图6所示,在一个实施例中,提供了一种应用执行脚本的方法。本实施例主要以该方法应用于上述图1中的第一终端110来举例说明。参照图6,该应用执行脚本的方法具体包括如下步骤:

步骤602,生成编译后的动态库。

以应用的脚本语言源码为lua源码为例,当应用的脚本语言源码为lua源码时,lua源码运行时可创建虚拟机线程,即lua线程,lua线程在运行过程中,会产生对应的协议数据。在应用的协议数据中,均采用的是自定义的协议格式,且虚拟机线程中的协议数据,即lua数据,均打包在lua中,无法对lua数据根据二进制数据进行解析。为了获取到lua中的协议数据,可将编译后的动态库注入到应用进程中,通过hook应用的发送数据接口,从而可以将lua线程中的lua数据进行劫持,并发送至协议显示界面进行显示。

获取到该应用的lua源码,lua源码是指该应用使用lua语言实现的逻辑功能部分的代码。获取到lua源码后,可对lua源码进行编辑,加入自定义的逻辑代码后进行编译,即可得到编译后的动态库。对lua源码加入自定义的逻辑代码后可增加部分功能,应用在执行加入了逻辑代码的编译后的动态库时,可实现加入的逻辑代码中增加的功能。比如创建交互线程与协议显示界面的服务器进行数据交互,或当虚拟机线程执行编译后的动态库中的逻辑代码时,使得虚拟机线程能够加载外部脚本并执行,从而获取到虚拟机线程中的协议数据,即lua数据,获取到的lua数据后即可发送至服务器,从而服务器将lua数据发送至协议显示界面进行显示。

步骤604,运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的。

在第一终端上运行应用,在应用运行的过程中注入编译后的动态库,从而应用可执行编译后的动态库,从而可实现编译后的动态库中自定义的功能。即注入过程,注入指的是动态地向应用进程添加外部功能的实现方式。在本实施例中,外部功能已经包含在编译后的动态库中,将编译后的动态库注入到应用进程后,应用可通过执行编译后的动态库加载并执行外部脚本。

步骤606,对应用的进程的函数执行事件进行监听,当监听到应用的进程创建虚拟机线程时,则获取到虚拟机线程。

在第一终端运行的应用的进程中,可以存在有多个执行路径,则进程可创建多个线程。对应用的进程进行监听,即对应用的进程的函数执行事件进行监听,可使用hook对应用进程进行监听,当监听到应用的进程通过执行创建函数创建了虚拟机线程时,则可获取到虚拟机线程。

步骤608,对虚拟机线程的函数执行事件进行监听,当监听到虚拟机线程执行编译后的动态库中包含的逻辑函数时,通过虚拟机线程加载外部脚本并执行。

当获取到第一终端上运行的虚拟机线程后,可对虚拟机线程的函数执行事件进行监听。虚拟机线程即为lua线程,在对虚拟机线程进行监听时,可使用lua自带的hook机制对虚拟机线程中的函数执行事件进行监听,当监听到lua线程执行编译后的动态库中包含的逻辑函数时,虚拟机线程则会根据逻辑函数定义的功能对外部脚本进行加载并执行。

如图7所示,注入so,即注入编译后的动态库至第一终端上运行的应用进程中后,则可对应用进程进行监听,当监听到应用进程创建了虚拟机线程时,则获取到虚拟机线程,也就是图中的创建了lua_state时,则获取到lua_state。并对虚拟机线程的函数执行事件进行监听,即图7中的lua_sethook监听所有的lua事件,指可以使用lua自带的hook事件对lua线程执行的函数事件进行监听,当捕获到lua线程执行编译后的动态库中包含的逻辑函数时,则通过虚拟机线程加载外部脚本并执行。

步骤610,获取虚拟机线程通过执行外部脚本获取到的协议数据;

在外部脚本中定义了需要获取到的协议数据内容,当虚拟机线程执行外部脚本时,可获取到对应的协议数据。协议数据可以是虚拟机线程执行的函数的各个参数。可将协议数据发送至服务器,由服务器转发至第二终端上的协议显示界面进行显示。服务器可以是第二终端上的协议显示界面对应的应用所在的服务器,通过服务器与协议显示界面进行数据交互,实现将执行外部脚本获取到的协议数据显示在协议显示界面。

如图8所示的时序图,先将编译后的动态库注入第一终端上运行的应用的进程,对应用进程进行监听,当应用进程创建了lua线程后,即虚拟机线程后,则获取虚拟机线程,并对虚拟机线程进行监听。当虚拟机线程执行注入的编译后的动态库中包含的逻辑函数时,比如虚拟机线程执行注入的编译后的动态库中包含的回调函数时,则虚拟机线程可根据回调函数的定义,加载并执行外部脚本。当虚拟机线程执行外部脚本时,可获取到外部脚本中定义的需要获取到的协议数据。虚拟机线程可直接回调函数中包含的文件位置,加载到对应位置的外部脚本并执行,也可以通过服务器获取到外部脚本并执行,从而获取到对应的协议数据。

步骤612,将协议数据发送至服务器,由服务器将协议数据转发至协议显示界面进行显示。

当在第一终端运行的虚拟机线程执行外部脚本获取到对应的协议数据后,可将协议数据发送至服务器,由服务器将协议数据转发至第二终端上的协议显示界面进行显示。协议显示界面显示协议数据时,可先对协议数据进行解析,将二进制的协议数据进行解析后将数据以列表的方式进行显示,技术人员或者测试人员则可较为直观的获知协议数据,并可对协议数据进行分析等操作。

步骤614,接收服务器发送的对协议显示界面上显示的协议数据的修改指令。

步骤616,通过交互线程从服务器获取到修改指令。

步骤618,通过虚拟机线程接收交互线程转发的修改指令并解析,得到修改后的参数。

步骤620,根据修改后的参数执行外部脚本。

当虚拟机线程获取到的协议数据显示在协议显示界面时,可通过协议显示界面对协议数据进行修改,对协议数据进行修改时会产生对应的修改指令,服务器在接收到修改指令后,将修改指令发送至编译后的动态库创建的交互线程,交互线程可将修改指令转发至虚拟机线程。

当服务器获取到协议显示界面产生的修改指令后,将修改指令发送至交互线程,交互线程则将修改指令转发至虚拟机线程,当虚拟机线程接收到交互线程转发的修改后,则会对修改指令进行解析,解析后可得到修改指令中携带的修改后的参数。虚拟机线程可根据修改后的参数对虚拟机线程中的协议数据进行对应的修改,则会再一次执行外部脚本,再次执行外部脚本时,则可以获取到协议数据被修改后执行得到的新数据。

通过在应用运行的过程中注入编译后的动态库,使得应用在运行过程中能够执行编译后的动态库,当应用进程创建的虚拟机线程执行编译后的动态库中包含的逻辑函数时,则使得虚拟机能够根据逻辑函数预定义的功能对外部脚本进行加载并执行,获取到对应的协议数据。通过编译后的动态库创建的交互线程,使得第一终端运行的虚拟机线程能够与第二终端的协议显示界面对应的服务器进行数据交互,便于传输第一终端运行的虚拟机线程获取到的协议数据,也能够使得协议数据能够在协议显示界面进行显示。将协议数据显示在第二终端的协议显示界面后,可较为便利的对显示的协议数据进行修改,从而使得第一终端运行的虚拟机线程能够再次执行外部脚本,在实现稳定的执行外部脚本的同时,也能够便于技术人员或测试人员通过协议显示界面对协议数据进行分析等操作。

上述应用执行脚本的方法可以应用于测试场景中,具体的,可预先准备好外部脚本,比如根据测试需求编写对应的外部脚本,在外部脚本中定义需要获取到的协议数据。在被测试终端,即第一终端上运行应用,并在应用的运行过程中注入编译后的动态库,使得应用在运行过程中执行编译后的动态库,应用进程创建的虚拟机线程可根据编译后的动态库中包含的逻辑函数加载并执行外部脚本。

外部脚本可以存储在第一终端上,也可以存储在第二终端上,如果外部脚本存储在第一终端上,应用可根据逻辑函数中包含的文件位置加载到对应的外部脚本;如果外部脚本存储在第二终端,应用可通过服务器获取到对应的外部脚本。当应用进程创建的虚拟机线程通过执行外部脚本获取到对应的协议数据后,可通过第二终端上的协议显示界面对应的服务器将协议数据发送至协议显示界面进行显示,测试人员可通过协议显示界面直观的获知协议数据的具体内容,并可通过协议显示界面对显示的协议数据进行修改。修改协议数据时,会产生修改指令,可通过协议显示界面对应的服务器将修改指令发送至第一终端上运行的应用,使得应用进程创建的虚拟机线程执行修改指令。

通过这种测试方式,填补了不能对应用的lua协议进行测试的空白,提高了测试覆盖的完整度。

如图9所示,在一个实施例中,提供了一种应用测试方法。本实施例主要以该方法应用于上述图1中的第二终端120来举例说明。参照图9,该应用测试方法具体包括如下步骤:

步骤902,在被测试终端的应用运行过程中注入编译后的动态库。

被测试终端即为第二终端,在第二终端上运行待测试应用,并在应用的运行过程中注入编译后的动态库。编译后的动态库是指技术人员加入了自定义逻辑代码的动态库,以使应用在执行该编译后的动态库时,可根据编译后的动态库中包含的自定义逻辑代码执行相关的逻辑。

步骤904,在协议显示界面显示应用加载并执行外部测试脚本获取到的协议数据,协议数据为应用执行外部测试脚本获取到的数据,外部测试脚本是通过应用创建的虚拟机线程执行编译后的动态库中包含的逻辑函数加载的。

将编译后的动态库注入到第一终端上运行的应用进程中后,应用可在运行过程中执行编译后的动态库,可根据编译后的动态库创建交互线程,用于与第二终端上显示的协议显示界面所在的服务器进行数据交互。当应用进程创建了虚拟机线程后,虚拟机线程也可执行编译后的动态库,当虚拟机线程执行了编译后的动态库中包含的逻辑函数时,可根据逻辑函数定义的逻辑加载并执行外部脚本,从而获取到对应的协议数据,逻辑函数可以是回调函数。

当虚拟机线程执行外部脚本获取到对应的协议数据后,可将协议数据发送至第二终端上显示的协议显示界面所在的服务器,由服务器将协议数据转发至第二终端的协议显示界面进行显示,即可实现在第二终端上的协议显示界面上显示应用加载并执行外部测试脚本获取到的协议数据。

第二终端上的协议显示界面可以是一种测试工具中进行协议测试的一个显示界面,主要用于通过抓取第一终端与运行的应用进行交互时产生的数据,比如在第一终端上运行应用,通过第一终端对应用的功能进行触发,例如点击应用的功能按钮等,则应用会根据触发的指令进行相关的逻辑处理,从而产生对应的协议数据。这些产生的协议数据可通过应用中的虚拟机线程发送至服务器,由服务器将协议数据发送至第二终端上的协议显示界面进行显示,即可将二进制的协议数据以列表的形式显示出来,测试人员则可清楚的获知协议数据的内容,并对协议数据进行分析得到测试结果。

步骤906,获取对协议显示界面中显示的协议数据的修改指令,将修改指令发送至被测试终端运行的应用,修改指令用于虚拟机线程根据修改指令再次执行外部测试脚本。

在第二终端的协议显示界面显示第一终端上运行的应用获取到协议数据后,可通过协议显示界面对显示的协议数据进行修改。对协议数据进行修改时会产生对应的修改指令,第二终端获取到修改指令后,将修改指令发送至第一终端上运行的应用,即被测试终端运行的应用。应用进程创建的虚拟机线程在接收到修改指令后,可根据修改指令对协议数据进行对应的修改,从而再次执行外部测试脚本。

通过在被测试终端的应用运行过程中注入编译后的动态库,使得被测试终端上运行的应该能够执行编译后的动态库,从而使得应用进程创建的虚拟机线程在执行编译后的动态库中包含的逻辑函数时,对外部脚本进行加载并执行,从而获取到对应的协议数据,并将获取到的协议数据发送至第二终端的协议显示界面进行显示,使得测试人员能够直观的获知协议数据,也便于对协议数据进行分析。利用这种测试方法,填补了应用使用lua进行协议打包时,无法进行协议接入的空白,大幅度的提高了测试范围,保证了测试覆盖的完整度。

在一个实施例中,将修改指令发送至被测试终端运行的应用,包括:将修改指令发送至测试服务器;通过测试服务器将修改指令转发至被测试终端运行的应用。当通过第二终端上的协议显示界面对协议数据进行修改时,会产生对应的修改指令,第二终端获取到修改指令后,可将修改指令发送至协议显示界面对应的服务器。进一步地,第二终端可将修改指令发送至协议显示界面所在的应用程序对应的服务器,由服务器将修改指令转发至被测试终端上运行的应用,即由服务器将修改指令转发至第一终端上运行的应用,由该应用进程创建的虚拟机线程执行修改指令。

通过第二终端上的协议显示界面对应的服务器与第一终端上的应用进行数据交互,使得第二终端上的协议显示界面能够与第一终端上的应用进行远程的数据交互,即只要有网络,比如无线网、局域网、移动网络等,第二终端上的协议显示界面产生的修改指令等均可以通过服务器转发至第一终端上的应用,使得应用执行相关的指令,使得测试过程降低了位置限制,整个测试流程是可以远程操作的,过程较为灵活,也提高了整体的测试效率。

在一个实施例中,如图10所示,还提供了一种应用测试方法。本实施例主要以该方法应用于上述图1中的第二终端120来举例说明。参照图10,该应用测试方法具体包括如下步骤:

步骤1002,在被测试终端的应用运行过程中注入编译后的动态库。

步骤1004,在协议显示界面显示应用加载并执行外部测试脚本获取到的协议数据。

被测试终端即为第二终端,在第二终端上运行待测试应用,并在应用的运行过程中注入编译后的动态库。将编译后的动态库注入到第一终端上运行的应用进程中后,应用可在运行过程中执行编译后的动态库,可根据编译后的动态库创建交互线程,用于与第二终端上显示的协议显示界面所在的服务器进行数据交互。当应用进程创建了虚拟机线程后,虚拟机线程也可执行编译后的动态库,当虚拟机线程执行了编译后的动态库中包含的逻辑函数时,可根据逻辑函数定义的逻辑加载并执行外部脚本,从而获取到对应的协议数据,逻辑函数可以是回调函数。

虚拟机线程执行外部脚本获取到对应的协议数据后,可将协议数据发送至第二终端上显示的协议显示界面所在的服务器,由服务器将协议数据转发至第二终端的协议显示界面进行显示,协议显示界面获取到协议数据后,可先对协议数据进行解析,并将解析后的协议数据显示。

步骤1006,获取对协议显示界面中显示的协议数据的修改指令。

步骤1008,将修改指令发送至测试服务器。

步骤1010,通过测试服务器将修改指令转发至被测试终端运行的应用。

当在第二终端的协议显示界面显示第一终端上运行的应用获取到协议数据后,可通过协议显示界面对显示的协议数据进行修改。对协议数据进行修改时会产生对应的修改指令,第二终端获取到修改指令后,将修改指令发送至第一终端上运行的应用,即被测试终端运行的应用。应用进程创建的虚拟机线程在接收到修改指令后,可根据修改指令对协议数据进行对应的修改,从而再次执行外部测试脚本。

如图11所示的时序图,被测试终端为第一终端,用于运行应用,测试终端即为第二终端,用于显示协议显示界面等。在被测试终端上运行的应用进程中注入编译后的动态库,应用进程创建的虚拟机线程在执行编译后的动态库中包含的逻辑函数时,根据逻辑函数定义的逻辑加载并执行外部脚本,从而获取到对应的协议数据。被测试终端上应用进程创建的虚拟机线程则可将协议数据发送至服务器,服务器是测试终端上显示的协议显示界面对应的服务器,服务器在接收到协议数据时,可将协议数据转发至测试终端上的协议显示界面进行显示。

测试终端上的协议显示界面在接收到协议数据后,可先对协议数据进行解析后再显示,测试人员可通过协议显示界面对显示的协议数据进行修改,从而触发修改指令,由测试终端将修改指令发送至服务器,并由服务器将修改指令转发至被测试终端上运行的应用,通过应用进程创建的虚拟机线程执行该修改指令。

图2-图7以及图9-图10为各个实施例中的流程示意图。应该理解的是,虽然各个图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,各个图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图12所示,还提供了一种应用执行脚本的装置,装置包括:

运行模块1202,用于运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的。

监听模块1204,用于对应用的进程的函数执行事件进行监听;当监听到应用的进程创建虚拟机线程时,则获取到虚拟机线程;对虚拟机线程的函数执行事件进行监听。

脚本执行模块1206,用于当监听到虚拟机线程执行编译后的动态库中包含的逻辑函数时,通过虚拟机线程加载外部脚本并执行。

在一个实施例中,如图13所示,上述装置还包括动态库生成模块1201,用于获取应用的脚本语言源码;对脚本语言源码进行编辑,加入预先编辑的逻辑代码;对加入预先编辑的逻辑代码的脚本语言源码进行编译,得到编译后的动态库。

在一个实施例中,如图13所示,上述装置还包括数据发送模块1208,用于获取虚拟机线程通过执行外部脚本获取到的协议数据;将协议数据发送至服务器,协议数据用于在协议显示界面进行显示。

在一个实施例中,如图13所示,上述装置还包括数据修改模块1210,用于接收服务器发送的对协议显示界面上显示的协议数据的修改指令;通过虚拟机线程获取到修改指令并解析,根据解析后的修改指令执行外部脚本。

在一个实施例中,上述装置还包括:线程创建模块(图中未示出),用于根据编译后的动态库创建交互线程。上述数据修改模块1210还用于通过交互线程从服务器获取到修改指令;通过虚拟机线程接收交互线程转发的修改指令并解析,得到修改后的参数;根据修改后的参数执行外部脚本。

在一个实施例中,如图14所示,还提供了一种应用测试装置,装置包括:

动态库注入模块1402,用于在被测试终端的应用运行过程中注入编译后的动态库。

数据显示模块1404,用于在协议显示界面显示应用加载并执行外部测试脚本获取到的协议数据,协议数据为应用执行外部测试脚本获取到的数据,外部测试脚本是通过应用创建的虚拟机线程执行编译后的动态库中包含的逻辑函数加载的。

修改模块1406,用于获取对协议显示界面中显示的协议数据的修改指令,将修改指令发送至被测试终端运行的应用,修改指令用于虚拟机线程根据修改指令再次执行外部测试脚本。

在一个实施例中,上述修改模块1406还用于将修改指令发送至测试服务器;通过测试服务器将修改指令转发至被测试终端运行的应用。

图15示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的第一终端110。如图15所示,该计算机设备包括该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现应用执行脚本的方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行应用执行脚本的方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图15中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,本申请提供的12装置可以实现为一种计算机程序的形式,计算机程序可在如图15所示的计算机设备上运行。计算机设备的存储器中可存储组成该应用执行脚本的装置的各个程序模块,比如,图12所示的运行模块、监听模块和脚本执行模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的应用执行脚本的方法中的步骤。

例如,图15所示的计算机设备可以通过如图12所示的应用执行脚本的装置中的运行模块执行运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的。计算机设备可通过监听模块执行对应用的进程的函数执行事件进行监听;当监听到应用的进程创建虚拟机线程时,则获取到虚拟机线程;对虚拟机线程的函数执行事件进行监听。计算机设备可通过脚本执行模块执行当监听到虚拟机线程执行编译后的动态库中包含的逻辑函数时,通过虚拟机线程加载外部脚本并执行。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的;对应用的进程的函数执行事件进行监听;当监听到应用的进程创建虚拟机线程时,则获取到虚拟机线程;对虚拟机线程的函数执行事件进行监听;当监听到虚拟机线程执行编译后的动态库中包含的逻辑函数时,通过虚拟机线程加载外部脚本并执行。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:获取应用的脚本语言源码;对脚本语言源码进行编辑,加入预先编辑的逻辑代码;对加入预先编辑的逻辑代码的脚本语言源码进行编译,得到编译后的动态库。

在一个实施例中,在通过虚拟机线程加载外部脚本并执行之后,处理器执行计算机程序时还实现以下步骤:获取虚拟机线程通过执行外部脚本获取到的协议数据;将协议数据发送至服务器,协议数据用于在协议显示界面进行显示。

在一个实施例中,在将协议数据发送至服务器之后,处理器执行计算机程序时还实现以下步骤:接收服务器发送的对协议显示界面上显示的协议数据的修改指令;通过虚拟机线程获取到修改指令并解析,根据解析后的修改指令执行外部脚本。

在一个实施例中,处理器执行计算机程序时还实现以下步骤:根据编译后的动态库创建交互线程。通过虚拟机线程获取到修改指令并解析,根据解析后的修改指令执行外部脚本,包括:通过交互线程从服务器获取到修改指令;通过虚拟机线程接收交互线程转发的修改指令并解析,得到修改后的参数;根据修改后的参数执行外部脚本。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:在被测试终端的应用运行过程中注入编译后的动态库;在协议显示界面显示应用加载并执行外部测试脚本获取到的协议数据,协议数据为应用执行外部测试脚本获取到的数据,外部测试脚本是通过应用创建的虚拟机线程执行编译后的动态库中包含的逻辑函数加载的;获取对协议显示界面中显示的协议数据的修改指令,将修改指令发送至被测试终端运行的应用,修改指令用于虚拟机线程根据修改指令再次执行外部测试脚本。

在一个实施例中,将修改指令发送至被测试终端运行的应用,包括:将修改指令发送至测试服务器;通过测试服务器将修改指令转发至被测试终端运行的应用。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:运行应用,应用执行编译后的动态库,编译后的动态库是在应用运行过程中注入的;对应用的进程的函数执行事件进行监听;当监听到应用的进程创建虚拟机线程时,则获取到虚拟机线程;对虚拟机线程的函数执行事件进行监听;当监听到虚拟机线程执行编译后的动态库中包含的逻辑函数时,通过虚拟机线程加载外部脚本并执行。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:获取应用的脚本语言源码;对脚本语言源码进行编辑,加入预先编辑的逻辑代码;对加入预先编辑的逻辑代码的脚本语言源码进行编译,得到编译后的动态库。

在一个实施例中,在通过虚拟机线程加载外部脚本并执行之后,计算机程序被处理器执行时还实现以下步骤:获取虚拟机线程通过执行外部脚本获取到的协议数据;将协议数据发送至服务器,协议数据用于在协议显示界面进行显示。

在一个实施例中,在将协议数据发送至服务器之后,计算机程序被处理器执行时还实现以下步骤:接收服务器发送的对协议显示界面上显示的协议数据的修改指令;通过虚拟机线程获取到修改指令并解析,根据解析后的修改指令执行外部脚本。

在一个实施例中,计算机程序被处理器执行时还实现以下步骤:根据编译后的动态库创建交互线程。通过虚拟机线程获取到修改指令并解析,根据解析后的修改指令执行外部脚本,包括:通过交互线程从服务器获取到修改指令;通过虚拟机线程接收交互线程转发的修改指令并解析,得到修改后的参数;根据修改后的参数执行外部脚本。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:在被测试终端的应用运行过程中注入编译后的动态库;在协议显示界面显示应用加载并执行外部测试脚本获取到的协议数据,协议数据为应用执行外部测试脚本获取到的数据,外部测试脚本是通过应用创建的虚拟机线程执行编译后的动态库中包含的逻辑函数加载的;获取对协议显示界面中显示的协议数据的修改指令,将修改指令发送至被测试终端运行的应用,修改指令用于虚拟机线程根据修改指令再次执行外部测试脚本。

在一个实施例中,将修改指令发送至被测试终端运行的应用,包括:将修改指令发送至测试服务器;通过测试服务器将修改指令转发至被测试终端运行的应用。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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