本发明实施例涉及计算机技术领域,尤其涉及一种基于安卓系统的测试方法、装置及设备。
背景技术:
目前针对安卓(android)逻辑部分进行自动化测试,比较好的方式是采用安卓回归测试框架(androidjunit)。androidjunit主要提供了以下测试包进行测试:androidtestcase,提供了可以让我们控制事件(context)的入口,通常对单个类进行测试;applicationtestcase:主要是来测试应用的;providertestcase:主要是来测试内容提供器(contentprovider)的;servicetestcase:主要是来测试安卓服务(androidservice)的。
但是,如果在使用androidtestcase进行类测试的时候,被测试类中使用了解决线程和线程之间通信的handler机制,会出现无法得到期望结果的问题。
技术实现要素:
本发明实施例提供一种基于安卓系统的测试方法、装置及设备,用以实现对包含handler的被测对象的测试。
本发明实施例第一方面提供一种基于安卓系统的测试方法,该方法包括:
创建第一线程,并在所述第一线程上运行测试用例;
创建第二线程,并在所述第二线程上创建包括handler的被测对象,使得所述被测对象在所述测试用例对其检测前运行;
通过所述测试用例对所述被测对象进行测试。
可选的,所述创建第二线程,并在所述第二线程上创建包括handler的被测对象,包括:
通过预设的创建setup函数创建第二线程,并在所述第二线程中调用预设的虚函数创建包括handler的被测对象。
可选的,所述通过所述测试用例对所述被测对象进行测试,包括:
通过所述测试用例调用所述被测对象的运行信息,并基于预设的检测点对所述运行信息进行检测。
可选的,所述方法还包括:
在完成测试后,拆除所述第二线程。
本发明实施例第二方面提供一种测试装置,包括:
第一创建模块,用于创建第一线程,并在所述第一线程上运行测试用例;
第二创建模块,用于创建第二线程,并在所述第二线程上创建包括handler的被测对象,使得所述被测对象在所述测试用例对其检测前运行;
测试模块,用于通过所述测试用例对所述被测对象进行测试。
可选的,所述第二创建模块,具体用于:
通过预设的创建setup函数创建第二线程,并在所述第二线程中调用预设的虚函数创建包括handler的被测对象。
可选的,所述测试模块,具体用于:
通过所述测试用例调用所述被测对象的运行信息,并基于预设的检测点对所述运行信息进行检测。
可选的,所述装置还包括:
线程拆除模块,用于在完成测试后,拆除所述第二线程。
本发明实施例第三方面提供一种测试设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
当所述处理器执行所述可执行指令时,执行如下操作:
创建第一线程,并在所述第一线程上运行测试用例;
创建第二线程,并在所述第二线程上创建包括handler的被测对象,使得所述被测对象在所述测试用例对其检测前运行;
通过所述测试用例对所述被测对象进行测试。
本发明实施例第四方面提供一种计算机可读存储介质包括指令,当所述指令在所述计算机上运行时,所述计算机执行如下操作:
创建第一线程,并在所述第一线程上运行测试用例;
创建第二线程,并在所述第二线程上创建包括handler的被测对象,使得所述被测对象在所述测试用例对其检测前运行;
通过所述测试用例对所述被测对象进行测试。
本发明实施例,通过创建第一线程,在第一线程上运行测试用例,创建第二线程,在第二线程上创建包括handler的被测对象,使得该被测对象在测试用例对其检测前运行,从而通过测试用例对被测对象进行测试。由于本发明实施例中测试用例和包括handler的被测对象在不同的线程上运行,这样就能够保证被测对象在测试用例对其检测前就运行,使得测试用例能够根据其运行信息对其进行测试。解决了现有技术中因被测对象和测试用例在同一线程上运行所导致的测试用例测试时被测对象仍未运行的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术提供的测试方法流程图;
图2为本发明实施例提供的一种基于安卓系统的测试方法的流程图;
图3为本发明实施例提供的一种测试装置的结构示意图;
图4为本发明实施例提供的一种测试设备的结构示意图;
图5是根据一示例性实施例示出的一种终端设备的框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤的过程或结构的装置不必限于清楚地列出的那些结构或步骤而是可包括没有清楚地列出的或对于这些过程或装置固有的其它步骤或结构。
图1为现有技术提供的测试方法流程图,如图1所示,在现有技术中测试用例和handler消息(即包含handler的被测对象)在同一个线程上运行。当测试用例在运行时,系统会创建一个线程运行测试用例中的内容,线程顺序会执行被测对象的创建、被测对象方法的调用、结果检查;而handler的运行机制是在创建时确定执行线程,此后的handler消息会进入队列中,等待执行线程空闲后进行处理,可以发现在实际执行情况中由于线程顺序执行,一直没有空闲,在执行测试用例中预设的检查点的时候handler消息仍未被执行,导致无法获得正确的测试结果。
针对上述问题,本发明实施例提供一种基于安卓系统的测试方法,该方法通过将测试用例和包括handler的被测对象在两个不同的线程上运行,使得被测对象能够在测试用例对其检测之前提前运行,确保测试的正确进行。
图2为本发明实施例提供的一种基于安卓系统的测试方法的流程图,如图2所示,该方法包括:
步骤201、创建第一线程,并在所述第一线程上运行测试用例。
本实施例中,可以通过预设的创建(setup)函数创建第一线程,并在第一线程上运行测试用例。本实施例中第一线程的创建方法,以及在第一线程上运行测试用例的方法可以参见现有技术,在这里不再赘述。
步骤202、创建第二线程,并在所述第二线程上创建包括handler的被测对象,使得所述被测对象在所述测试用例对其检测前运行。
可选的,本实施例中第二线程的创建方法与第一线程的创建方法类似,可以通过预设的setup函数创建第二线程。通过在第二线程中调用预设的虚函数来创建包括handler的被测对象。使得被测对象与测试用例在不同的线程上运行。本实施例中第二线程的创建方法,以及在第二线程中创建被测对象的方法可以参考现有技术,本实施例中不多做赘述。
步骤203、通过所述测试用例对所述被测对象进行测试。
在被测对象运行之后,测试用例获取被测对象的运行信息,并基于预设的检测点,对运行信息中的相应部分进行检测,获得测试结果。本在测试结束之后,通过预设的拆除函数(teardown)拆除第二线程。其中,本实施例中通过测试用例对被测对象进行测试的具体过程可以参见现有技术中安卓回归测试框架中的内容,在这里不多做叙述。
本实施例,通过创建第一线程,在第一线程上运行测试用例,创建第二线程,在第二线程上创建包括handler的被测对象,使得该被测对象在测试用例对其检测前运行,从而通过测试用例对被测对象进行测试。由于本实施例中测试用例和包括handler的被测对象在不同的线程上运行,这样就能够保证被测对象在测试用例对其检测前就运行,使得测试用例能够根据其运行信息对其进行测试。解决了现有技术中因被测对象和测试用例在同一线程上运行所导致的测试用例测试时被测对象仍未运行的问题。
图3为本发明实施例提供的一种测试装置的结构示意图,如图3所示,该装置包括:
第一创建模块11,用于创建第一线程,并在所述第一线程上运行测试用例;
第二创建模块12,用于创建第二线程,并在所述第二线程上创建包括handler的被测对象,使得所述被测对象在所述测试用例对其检测前运行;
测试模块13,用于通过所述测试用例对所述被测对象进行测试。
可选的,所述第二创建模块12,具体用于:
通过预设的创建setup函数创建第二线程,并在所述第二线程中调用预设的虚函数创建包括handler的被测对象。
可选的,所述测试模块13,具体用于:
通过所述测试用例调用所述被测对象的运行信息,并基于预设的检测点对所述运行信息进行检测。
可选的,所述装置还包括:
线程拆除模块,用于在完成测试后,拆除所述第二线程。
本实施例提供的测试装置,能够用于执行图2实施例的技术方案,其具体执行方式和有益效果类似,在这里不再赘述。
图4为本发明实施例提供的一种测试设备的结构示意图,如图4所示,该测试设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
当所述处理器执行所述可执行指令时,执行如下操作:
创建第一线程,并在所述第一线程上运行测试用例;
创建第二线程,并在所述第二线程上创建包括handler的被测对象,使得所述被测对象在所述测试用例对其检测前运行;
通过所述测试用例对所述被测对象进行测试。
本实施例,通过创建第一线程,在第一线程上运行测试用例,创建第二线程,在第二线程上创建包括handler的被测对象,使得该被测对象在测试用例对其检测前运行,从而通过测试用例对被测对象进行测试。由于本实施例中测试用例和包括handler的被测对象在不同的线程上运行,这样就能够保证被测对象在测试用例对其检测前就运行,使得测试用例能够根据其运行信息对其进行测试。解决了现有技术中因被测对象和测试用例在同一线程上运行所导致的测试用例测试时被测对象仍未运行的问题。
图5是根据一示例性实施例示出的一种终端设备的框图。该终端设备内置有安卓系统,例如,终端设备800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图5,终端设备800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(i/o)的接口812,传感器组件814,以及通信组件816。
处理组件802通常控制终端设备800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件802可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
存储器804被配置为存储各种类型的数据以支持在设备800的操作。这些数据的示例包括用于在终端设备800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
电源组件806为终端设备800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为终端设备800生成、管理和分配电力相关联的组件。
多媒体组件808包括在所述终端设备800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(mic),当终端设备800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
i/o接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件814包括一个或多个传感器,用于为终端设备800提供各个方面的状态评估。例如,传感器组件814可以检测到设备800的打开/关闭状态,组件的相对定位,例如所述组件为终端设备800的显示器和小键盘,传感器组件814还可以检测终端设备800或终端设备800一个组件的位置改变,用户与终端设备800接触的存在或不存在,终端设备800方位或加速/减速和终端设备800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件816被配置为便于终端设备800和其他设备之间有线或无线方式的通信。终端设备800可以接入基于通信标准的无线网络,如wifi,2g或3g,或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件816还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
在示例性实施例中,终端设备800可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由终端设备800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端设备的处理器执行时,使得终端设备能够执行一种基于安卓系统的测试方法,所述方法包括:
创建第一线程,并在所述第一线程上运行测试用例;
创建第二线程,并在所述第二线程上创建包括handler的被测对象,使得所述被测对象在所述测试用例对其检测前运行;
通过所述测试用例对所述被测对象进行测试。
最后需要说明的是,本领域普通技术人员可以理解上述实施例方法中的全部或者部分流程,是可以通过计算机程序来指令相关的硬件完成,所述的程序可存储于一计算机可读存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可以为磁盘、光盘、只读存储记忆体(rom)或随机存储记忆体(ram)等。
本发明实施例中的各个功能单元可以集成在一个处理模块中,也可以是各个单元单独的物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现,并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。上述提到的存储介质可以是只读存储器、磁盘或光盘等。
以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。