程序测试方法、装置及系统的制作方法
【技术领域】
[0001]本发明涉及计算机技术领域,尤其涉及一种程序测试方法、装置及系统。
【背景技术】
[0002]随着计算机技术的发展,越来越多的程序被开发出来,然而由于各移动终端中安装的操作系统版本不一,为使程序能与各版本的操作系统兼容,在程序开发过程中需要对所开发的程序进行测试。
[0003]现有技术中基于移动终端的程序测试技术,主要是将所有的测试用例(TestCase)都写在一个测试程序中,测试程序指定一个测试目标作为被测程序,然后通过例如:Instrumentat1n测试框架(安卓Android官方的自动化测试框架,是基于java自动化测试框架Junit进行改进的,适合在Android系统上运行的测试框架)对被测程序进行测试。其中,测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实该程序是否满足某个特定需求。
[0004]现有的测试技术存在以下问题:
[0005]1、如果被测程序发生程序崩溃或意外退出(Crash)的情况,则整个测试流程将被中断,后面的测试用例将无法继续进行,从而影响整个自动化测试的效率;
[0006]2、测试结果不直观,不方便自动化进行系统分析。
【发明内容】
[0007]有鉴于此,本发明提供一种程序测试方法、装置及系统,可在测试途中发生被测程序崩溃或意外退出的情况时,继续完成后续测试,从而保证整个测试流程的顺利进行,提高程序测试的效率。
[0008]本发明实施例提供的程序测试方法,包括:从测试程序中提取多条测试用例,并在移动终端逐条执行所述测试用例,以对待测程序进行测试;获取测试结果数据,当所述测试结果数据显示所述待测程序发生程序崩溃或意外退出的情况时,重新执行所述测试结果数据对应的测试用例;若经过预置次数的重新执行后,所述测试结果数据仍显示所述待测程序发生所述程序崩溃或意外退出的情况,则执行下一条测试用例。
[0009]本发明实施例提供的程序测试装置,包括:提取模块,用于从测试程序中提取多条测试用例;执行模块,用于在移动终端逐条执行所述提取模块提取的所述测试用例,以对待测程序进行测试;获取模块,用于获取测试结果数据;所述执行模块,还用于当所述测试结果数据显示所述待测程序发生程序崩溃或意外退出的情况时,重新执行所述测试结果数据对应的测试用例;所述执行模块,还用于若经过预置次数的重新执行后,所述测试结果数据仍显示所述待测程序发生所述程序崩溃或意外退出的情况,则执行下一条测试用例。
[0010]本发明实施例提供的程序测试系统,包括:测试计算机以及移动终端;所述测试计算机,用于从测试程序中提取多条测试用例,并在所述移动终端逐条执行所述测试用例,以对待测程序进行测试,获取测试结果数据,当所述测试结果数据显示所述待测程序发生程序崩溃或意外退出的情况时,指示所述移动终端重新执行所述测试结果数据对应的测试用例,若经过预置次数的重新执行后,所述测试结果数据仍显示所述待测程序发生所述程序崩溃或意外退出的情况,则指示所述移动终端执行下一条测试用例。所述移动终端,用于接收所述测试计算机逐条发送的所述测试用例,逐条执行所述测试用例,以对所述待测程序进行测试,并将测试结果数据发送给所述测试计算机,当所述测试结果数据显示所述待测程序发生程序崩溃或意外退出的情况时,根据所述测试计算机的指示,重新执行所述测试结果数据对应的测试用例,若经过预置次数的重新执行后,所述测试结果数据仍显示所述待测程序发生所述程序崩溃或意外退出的情况,则根据所述测试计算机的指示,执行下一条测试用例。
[0011]本发明实施例提供的上述程序测试方法、装置及系统,将从测试程序中提取的多条测试用例逐条在移动终端执行,以对待测程序进行测试,当测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,重新执行该测试结果数据对应的测试用例,并在经过预置次数的重新执行,但该测试结果数据仍显示该待测程序发生程序崩溃或意外退出的情况时,执行下一条测试用例。由于可在测试途中被测程序发生程序崩溃或意外退出的情况时,继续完成后续测试,从而可保证整个测试流程的顺利进行,提高程序测试的效率。
[0012]为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
【附图说明】
[0013]图1为本发明实施例提供的程序测试系统的结构示意图;
[0014]图2示出了一种测试计算机的结构框图;
[0015]图3示出了一种移动终端的结构框图;
[0016]图4为本发明第一实施例提供的程序测试方法的流程图;
[0017]图5为本发明第二实施例提供的程序测试方法的流程图;
[0018]图6为本发明第二实施例提供的程序测试方法中部分步骤的流程图;
[0019]图7为本发明第二实施例提供的程序测试方法中部分步骤的流程图;
[0020]图8为本发明第三实施例提供的程序测试装置的结构示意图;
[0021]图9为本发明第四实施例提供的程序测试装置的结构示意图。
【具体实施方式】
[0022]为更进一步阐述本发明为实现预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明的【具体实施方式】、结构、特征及其功效,详细说明如后。
[0023]请参阅图1,图1本发明实施例提供的程序测试系统的结构示意图。测试计算机100和移动终端200通过无线方式或通过USB (Universal Serial Bus,通用串行总线)接口、并行总线接口等数据线接口进行连接。
[0024]测试计算机100从测试程序中提取多条测试用例,并在移动终端200逐条执行该测试用例,以对待测程序进行测试,获取测试结果数据,当该测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,指示移动终端200重新执行该测试结果数据对应的测试用例,若经过预置次数的重新执行后,该测试结果数据仍显示该待测程序发生该程序崩溃或意外退出的情况,则指示移动终端200执行下一条测试用例。
[0025]移动终端200,接收测试计算机100逐条发送的该测试用例,逐条执行该测试用例,以对该待测程序进行测试,并将测试结果数据发送给测试计算机100,当该测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,根据测试计算机100的指示,重新执行该测试结果数据对应的测试用例,若经过预置次数的重新执行后,该测试结果数据仍显示该待测程序发生该程序崩溃或意外退出的情况,则根据测试计算机100的指示,执行下一条测试用例。
[0026]可以理解地,测试计算机100的功能也可以通过运行于移动终端200的测试模块实现。此时,移动终端200需预先取得管理员权限(root)。移动终端200通过调用测试模块完成程序测试的具体过程与测试计算机100相似,此处不再赘述。
[0027]以上执行过程,请参见下述各实施例中的详细描述。
[0028]图2为一种测试计算机的结构框图。如图2所示,该测试计算机100可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processingunits, CPU) 122(例如,一个或一个以上处理器)和存储器132,一个或一个以上存储应用程序142或数据144的存储介质130 (例如一个或一个以上海量存储设备)。其中,存储器132和存储介质130可以是短暂存储或持久存储。存储在存储介质130的程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对测试计算机中的一系列指令操作。更进一步地,中央处理器122可以设置为与存储介质130通信,在测试计算机100上执行存储介质130中的一系列指令操作。测试计算机100还可以包括一个或一个以上电源126,一个或一个以上有线或无线网络接口 150,一个或一个以上输入输出接口 158,和/或,一个或一个以上操作系统 141,例如 Windows Server?, Mac OS X?, Unix?, Linux?, FreeBSDTM 等等。以下各图所示实施例中的由各测试计算机所执行的步骤可以基于该图2所示的测试计算机结构。
[0029]图3示出了一种移动终端的结构框图。如图3所示,移动终端200包括:存储器202、存储控制器204、一个或多个(图中仅示出一个)处理器206、外设接口 208、射频模块210、音频模块212、显示模块214以及按键模块216。这些组件通过一条或多条通讯总线/信号线218相互通讯。
[0030]可以理解,图3所示的结构仅为示意,移动终端200还可包括比图3中所示更多或者更少的组件,或者具有与图3所示不同的配置。图3中所示的各组件可以采用硬件、软件或其组合实现。
[0031]存储器202可用于存储软件程序以及模块,如本发明实施例中的程序测试方法、装置及系统对应的程序指令/模块,处理器206通过运行存储在存储器202内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的程序测试方法。
[0032]存储器202可包
括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器202可进一步包括相对于处理器206远程设置的存储器,这些远程存储器可以通过网络连接至移动终端200。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。处理器206以及其他可能的组件对存储器202的访问可在存储控制器204的控制下进行。
[0033]处理器206运行存储器202内的各种软件、指令以执行移动终端200的各种功能以及进行数据处理。
[0034]外设接口 208用于将各种外部设备耦合至CPU以及存储器202。
[0035]在一些实施例中,存储控制器204、处理器206以及外设接口 208可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。
[0036]射频模块210用于接收以及发送电磁波,实现电磁波与电信号的相互转换,从而与通信网络或者其他设备进行通讯。射频模块210可包括各种现有的用于执行这些功能的电路元件,例如,天线、射频收发器、数字信号处理器、加密/解密芯片、用户身份模块(S頂)卡、存储器等等。射频模块210可与各种网络如互联网、企业内部网、无线网络进行通讯或者通过无线网络与其他设备进行通讯。上述的无线网络可包括蜂窝式电话网、无线局域网或者城域网。上述的无线网络可以使用各种通信标准、协议及技术,包括但并不限于全球移动通信系统(Global System for Mobile Communicat1n, GSM)、增强型移动通信技术(Enhanced Data GSM Environment, EDGE),宽带码分多址技术(wideband code divis1nmultiple access, W-CDMA),码分多址技术(Code divis1n access, CDMA)、时分多址技术(time divis1n multiple access, TDMA),蓝牙,无线保真技术(Wireless, Fidelity,WiFi)(如美国电气和电子工程师协会标准IEEE802.11a, IEEE802.lib, IEEE802.llg和/或 IEEE802.lln)、网络电话(Voice over internet protocol, VoIP)、全球微波互联接入(Worldwide Interoperability for Microwave Access,W1-Max)、其他用于邮件、B卩时通信及短消息的协议,以及任何其他合适的通讯协议,甚至可包括那些当前仍未被开发出来的协议。
[0037]音频模块212向用户提供音频接口,其可包括一个或多个麦克风、一个或者多个扬声器以及音频电路。音频电路从外设接口 208处接收声音数据,将声音数据转换为电信息,将电信息传输至扬声器。扬声器将电信息转换为人耳能听到的声波。音频电路还从麦克风处接收电信息,将电信号转换为声音数据,并将声音数据传输至外设接口 208中以进行进一步的处理。音频数据可以从存储器202处或者通过射频模块210获取。此外,音频数据也可以存储至存储器202中或者通过射频模块210进行发送。在一些实例中,音频模块212还可包括一个耳机播孔,用于向耳机或者其他设备提供音频接口。
[0038]显示模块214在移动终端200与用户之间提供一个输出界面,向用户显示视频输出,这些视频输出的内容可包括文字、图形、视频、及其任意组合。一些输出结果是对应于一些用户界面对象。可以理解的,显示模块214还可以在移动终端200与用户之间同时提供一个输出及输入界面。具体地,除了向用户显示视频输出之外,显示模块214还接收用户的输入,例如用户的点击、滑动等手势操作,以便用户界面对象对这些用户的输入做出响应。检测用户输入的技术可以是基于电阻式、电容式或者其他任意可能的触控检测技术。显示模块214显示单元的具体实例包括但并不限于液晶显示器或发光聚合物显示器。
[0039]按键模块216同样提供用户向移动终端200进行输入的接口,用户可以通过按下不同的按键以使移动终端200执行不同的功能。
[0040]移动终端200可以包括:支持无线网络数据传输或数据线数据传输的智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture Experts Group Aud1 Layer III,动态影像专家压缩标准音频层面3)、MP4 (Moving Picture Experts Group Aud1 LayerIV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机、车载电脑、可穿戴设备、导航仪等等。移动终端200的操作系统可以为:Android(安卓)、Sailfish、Symbian(塞班)、1S (苹果)、BlackBerry OS (黑莓)、Windows phone (微软)、Windows mobile (微软)等。为描述方便,以下各实施例均以智能手机为例,该智能手机的操作系统为Android系统。
[0041]第一实施例
[0042]请参阅图4,图4为本发明第一实施例提供的程序测试方法的流程图。如图4所示,本实施例提供的程序测试方法包括:
[0043]步骤S101,从测试程序中提取多条测试用例,并在移动终端逐条执行该测试用例,以对待测程序进行测试;
[0044]测试程序可由第三方编写,并从网络获取,其中包含多条用于测试待测程序的测试用例。测试计算机100从网络获取测试程序,调用预置的反编译程序反编译该测试程序,获取反编译后的目标文件,解析该目标文件,获取测试用例并保存,然后将保存的测试用例逐条发送到移动终端200予以执行,以对待测程序进行测试。
[0045]步骤S102,获取测试结果数据,当该测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,重新执行该测试结果数据对应的测试用例;
[0046]测试计算机100获取移动终端200返回的测试结果数据,根据该测试结果数据判断待测程序是否发生程序崩溃或意外退出(crash)的情况,若该待测程序是否发生程序崩溃或意外退出(crash)的情况,则指示移动终端100重新执行该测试结果数据对应的测试用例。
[0047]步骤S103,若经过预置次数的重新执行后,该测试结果数据仍显示该待测程序发生该程序崩溃或意外退出的情况,则执行下一条测试用例。
[0048]测试计算机100可统计移动终端100重新执行该测试结果数据对应的测试用例的次数,当重新执行的次数大于或等于预置次数(优选地,预置次数为1)时,若移动终端100返回的测试结果数据仍显示待测程序发生程序崩溃或意外退出(crash)的情况,则将下一条测试用例发送给移动终端100,并指示移动终端100执行该下一条测试用例。
[0049]本发明实施例提供的程序测试方法,将从测试程序中提取的多条测试用例逐条在移动终端执行,以对待测程序进行测试,当测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,重新执行该测试结果数据对应的测试用例,并在经过预置次数的重新执行,但该测试结果数据仍显示该待测程序发生程序崩溃或意外退出的情况时,执行下一条测试用例。由于可在测试途中被测程序发生程序崩溃或意外退出的情况时,继续完成后续测试,从而可保证整个测试流程的顺利进行,提高程序测试的效率。
[0050]第二实施例
[0051]请参阅图5,图5为本发明第二实施例提供的程序测试方法的流程图。如图5所示,本实施例提供的程序测试方法包括:
[0052]步骤S21,从测试程序中提取多条测试用例;
[0053]如图6所示,本步骤具体可以包括:
[0054]步骤S211,获取测试程序;
[0055]测试程序可由第三方编写,并从网络获取,其中包含多条用于测试待测程序的测试用例。
[0056]步骤S212,调用预置的反编译程序反编译该测试程序,获取反编译后的目标文件;
[0057]步骤S213,解析该目标文件,获取测试用例;
[0058]步骤S214,保存该测试用例。
[0059]以Android系统为例,测试计算机100首先根据用户的获取指令,从网络获取测试程序(假定为Test, apk);然后通过调用Android的反编译工具(例如:apkTool.jar)对Test, apk进行反编译,获取反编译后的目标文件(.smali文件);然后对反编译后的.smali文件进行解析,获取Test, apk中包含的测试用例。其中,smali是由java文件编译后在Dalvik虚拟机上面执行的核心代码,可以理解为java编译后的.class文件。
[0060]Sailfish、Symbian (塞班)、1S (苹果)等其他操作系统下,从对应的测试程序中提取多条测试用例的方法可参照上述Android系统,此处不再赘述。
[0061]步骤S22,调用adb命令,逐条将该测试用例发送给移动终端,并指示该移动终端启动并执行该测试用例,以对待测程序进行测试;
[0062]adb 的全称为 Android 调试桥(Android Debug Brid
ge),是 Android 官方的一个调试工具,通过该调试工具可以直接操作管理Android模拟器或者真实的Andr1d设备。
[0063]具体地,测试计算机100调用adb命令,逐条将提取的测试用例发送给移动终端200,并在发送每一条测试用例的同时,指示移动终端200在接收到该条测试用例后即启动并执行该条测试用例,以通过执行该条测试用例对待测程序进行测试,并指示移动终端200在执行结束时,返回执行该条测试用例的结果数据。
[0064]步骤S23,获取测试结果数据,根据该测试结果数据判断该待测程序是否发生程序崩溃或意外退出(crash)的情况;
[0065]移动终端200启动并执行接收到的那条测试用例,并在执行完毕该条测试用例时获取执行结果数据,并将其作为该条测试用例的测试结果数据返回给测试计算机100。执行完毕可以包括:正常执行完成(测试用例顺利执行),以及异常执行完成(测试用例未顺利执行,测试过程中断)两种情况。执行结果数据中可以包含用于分类测试结果数据的关键字,通过该关键字可以确定通过该条测试用例对待测程序进行的测试是否正常结束(即,对该条测试用例的执行是否正常完成),是否存在待测程序发生程序崩溃或意外退出(crash)的情况,测试结果是否与该条测试用例对应的预期相符等等。
[0066]测试计算机100接收移动终端200返回的测试结果数据,并根据该测试结果数据对测试用例的执行情况进行监控。具体地,测试计算机100解析移动终端200返回的测试结果数据,获取其中包含的关键字,根据该关键字判断在执行该条测试用例的过程中,待测程序是否发生程序崩溃或意外退出(crash)的情况。
[0067]步骤S24,当该测试结果数据显示该待测程序发生程序崩溃或意外退出(crash)的情况时,重新执行该测试结果数据对应的测试用例;
[0068]具体地,当移动终端200返回的测试结果数据显示待测程序发生程序崩溃或意外退出(crash)的情况时,测试计算机100通过调用adb命令指示移动终端200重新执行该测试结果数据对应的测试用例。
[0069]步骤S25,获取重新执行该测试结果数据对应的测试用例的测试结果数据,根据该重新执行该测试结果数据对应的测试用例的测试结果数据,判断该待测程序是否发生该程序崩溃或意外退出(crash)的情况;
[0070]具体地,测试计算机100接收移动终端200返回的重新执行该测试结果数据对应的测试用例的测试结果数据,根据该测试结果数据判断在重新执行该测试结果数据对应的测试用例的过程中该待测程序是否再次发生程序崩溃或意外退出(crash)的情况。
[0071]若该重新执行该测试结果数据对应的测试用例的测试结果数据显示该待测程序未发生程序崩溃或意外退出(crash)的情况,则执行步骤S26:检测是否还有未执行的下一条测试用例;
[0072]具体地,移动终端200返回的测试结果数据中还可包含已执行的测试用例的名称,测试计算机100可根据该已执行的测试用例的名称检测是否还有未执行的下一条测试用例,即,检测所有的测试用例是否全部执行完毕。
[0073]若该重新执行该测试结果数据对应的测试用例的测试结果数据显示该待测程序发生程序崩溃或意外退出(crash)的情况,则执行步骤S27:记录该测试用例,并执行步骤S26 ;
[0074]测试计算机100记录重新执行后仍然发生待测程序出现程序崩溃或意外退出情况(crash)的测试用例,保存该条测试用例的测试结果数据,并检测是否还有未执行的下一条测试用例。
[0075]若还有未执行的下一条测试用例,则执行步骤S28:将该下一条测试用例发送给该移动终端,并指示该移动终端执行该下一条测试用例;
[0076]具体地,测试计算机100将未执行的下一条测试用例发送给移动终端200,并指示移动终端200执行该下一条测试用例,然后执行步骤S23 ;
[0077]当该测试结果数据显示该待测程序未发生程序崩溃或意外退出的情况时,执行步骤 S26 ;
[0078]若无未执行的下一条测试用例,则执行步骤S29:获取所有测试结果数据,该测试结果数据中包含用于分类该测试结果数据的关键字,根据该关键字及预置的统计规则,对该测试结果数据进行分类统计,并输出统计结果。
[0079]具体地,若经过检测不存在未执行的下一条测试用例,S卩,所有的测试用例均执行完毕,则测试计算机100获取保存的所有测试用例各自对应的测试结果数据。该测试结果数据也即对应的测试用例的执行结果数据,其中包含用于分类测试结果数据的关键字。
[0080]如图7所示,根据该测试结果数据中的关键字及预置的统计规则,对该测试结果数据进行分类统计,并输出统计结果可以包括:
[0081]步骤S291,根据测试结果数据中包含的关键字,将所有测试结果数据划分为四类。
[0082]具体地,第一类测试结果数据(Success)对应该测试用例执行正常结束,测试结果数据和预期相符的情况。第二类测试结果数据(Failure)对应该测试用例执行正常结束,但测试结果数据和预期不符的情况。第三类测试结果数据(Error)对应该测试用例执行过程异常,但该待测程序未发生程序崩溃或异常退出的情况。第四类测试结果数据(Crash)对应该测试用例执行过程异常,且该待测程序发生该程序崩溃或异常退出的情况。
[0083]测试计算机200解析获取的所有测试结果数据中的关键字,根据该关键字,将测试结果数据划分为上述Success、Failure、Error、Crash四类。
[0084]步骤S292,统计每一类测试结果数据出现的次数及该每一类测试结果数据对应的测试用例的名称;
[0085]具体地,测试计算机100分别统计上述Success、Failure、Error、Crash四类测试结果数据出现的次数,以及这四类测试结果数据各自对应的测试用例的名称,以方便对测试用例进行定位。
[0086]步骤S293,提取该第二类测试结果数据、该第三类测试结果数据以及该第四类测试结果数据对应的测试用例的执行日志,以根据该执行日志定位导致测试出现问题的原因。
[0087]具体地,测试计算机100从移动终端200提取Failure、Error以及Crash三类测试结果数据各自对应的测试用例的执行日志(Log),使得用户可根据该执行日志定位导致测试出现问题的原因。该执行日志中包含对应的测试用例的执行过程的描述数据,例如:执行时间、输入的数据、执行的测试动作、待测程序对该测试动作的反应等等。
[0088]步骤S294,输出统计结果。
[0089]具体地,测试计算机100可以按照预置的输出方式,将统计结果进行输出,例如:将统计结果通过打印机输出,或者根据用户预留的邮箱地址,预先指定的存储路径,将统计结果输出至用户指定的位置,使得用户可根据统计结果了解待测程序中存在的问题,并对待测程序进行优化。
[0090]为进一步说明本实施例提供的程序测试方法,以下举例说明。假设测试计算机100从网络获取测试程序Test, apk,通过反编译Test, apk获取其中所包含的七条测试用例A、B、C、D……G。测试计算机100首先调用adb命令将测试用例A发送给移动终端200,并指示移动终端200执行测试用例A,以对待测程序QQ.apk进行测试。移动终端200执行测试用例A,获取执行结果1,并将执行结果1作为测试结果数据1发送给测试计算机100。测试计算机100解析测试结果数据1,根据其中所包含的关键字判断在执行测试用例A的过程中,QQ.apk是否发生crash,假定QQ.apk发生了 crash,则测试计算机100指示移动终端200重新执行测试用例A。若根据移动终端200返回的重新执行测试用例A获得的测试结果数据1’,假定在重新执行的过程中,QQ.apk又发生了 crash,则测试计算机100记录测试用例A的crash情况,并保存测试结果数据1’,然后将测试用例B发送给移动终端200,并指示动终端200执行测试用例B,以对待测程序QQ.apk进行测试,并根据移动终端200返回的测试结果数据2,判断在执行测试用例B的过程中,QQ.apk是否发生crash,假定QQ.apk未发生crash,则测试计算机100保存测试结果数据2,同时将测试用例C发送给移动终端200,并指示动终端200执行测试用例C,以对待测程序QQ.apk进行测试……以此类推,直至移动终端200执行完测试用例G,并返回测试结果数据7,根据测试结果数据7,假定QQ.apk未发生crash。在所有的测试用例A、B、C、D……G都在移动终端200执行过后,测试计算机100获取保存的所有测试用例的测试结果数据,假定为测试结果数据1’、2、3’、4、5、6、7,并解析上述七个测试结果数据,获取其中所包含的关键字,根据该关键字,对上述七个测试结果数据进行分类统计,将其划分为Success、Failure、Error、Crash四类,并统计每一类各自出现的次数及对应的测试用例,假定Success (出现1次,对应的测试用例为测试用例B)、Failure (出现1次,对应的测试用例为测试用例
G) >Error (出现3次,对应的测试用例为测试用例D、E、F)、Crash (出现2次,对应的测试用例为测试用例A与C)四类,接着从移动终端200获取测试用例A、C、D、E、F、G的执行Log,然后将上述统计结果以统计表格的方式根据用户预留的邮箱地址,发送到用户的电子邮箱,以便用户根据该统计表格定位测试中出现的问题。
[0091]本发明实施例提供的程序测试方法,将从测试程序中提取的多条测试用例逐条在移动终端执行,以对待测程序进行测试,当测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,重新执行该测试结果数据对应的测试用例,并在经过预置次数的重新执行,但该测试结果数据仍显示该待测程序发生程序崩溃或意外退出的情况时,执行下一条测试用例。由于可在测试途中被测程序发生程序崩溃或意外退出的情况时,继续完成后续测试,从而可保证整个测试流程的顺利进行,提高程序测试的效率。此外,通过对测试结果数据的分类统计,可使得用户对测试结果有一个直观的了解,方便用户更快地定位出测试中发生的问题及其发生原因,从而可提高程序测试的直观性及便利性。
[0092]第三实施例
[0093]图8为本发明第三实施例提供的程序测试装置的结构示意图。本实施例提供的程序测试装置可运行于图1所示的测试计算机100中,用于实现上述实施例中的程序测试方法。如图8所示,程序测试装置30包括:
[0094]提取模块31,用于从测试程序中提取多条测试用例;
[0095]执行模块32,用于在移动终端逐条执行提取模块31提取的该测试用例,以对待测程序进行测试;
[0096]获取模块33,用于获取测试结果数据;
[0097]执行模块32,还用于当该测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,重新执行该测试结果数据对应的测试用例;
[0098]执行模块32,还用于若经过预置次数的重新执行后,该测试结果数据仍显示该待测程序发生该程序崩溃或意外退出的情况,则执行下一条测试用例。
[0099]本实施例对程序测试装置30的各功能模块实现各自功能的具体过程,请参见上述图1至图7所示实施例中描述的具体内容,此处不再赘述。
[0100]本发明实施例提供的程序测试装置,将从测试程序中提取的多条测试用例逐条在移动终端执行,以对待测程序进行测试,当测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,重新执行该测试结果数据对应的测试用例,并在经过预置次数的重新执行,但该测试结果数据仍显示该待测程序发生程序崩溃或意外退出的情况时,执行下一条测试用例。由于可在测试途中被测程序发生程序崩溃或意外退出的情况时,继续完成后续测试,从而可保证整个测试流程的顺利进行,提高程序测试的效率。
[0101]第四实施例
[0102]图9为本发明第四实施例提供的程序测试装置的结构示意图。本实施例提供的程序测试装置可运行于图1所示的测试计算机100中,用于实现上述实施例中的程序测试方法。如图9所示,程序测试装置40包括:
[0103]提取模块31,用于从测试程序中提取多条测试用例;
[0104]执行模块32,用于在移动终端逐条执行提取模块31提取的该测试用例,以对待测程序进行测试;
[0105]获取模块33,用于获取测试结果数据;
[0106]执行模块32,还用于当该测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,重新执行该测试结果数据对应的测试用例;
[0107]执行模块32,还用于若经过预置次数的重新执行后,该测试结果数据仍显示该待测程序发生该程序崩溃或意外退出的情况,则执行下一条测试用例。
[0108]优选地,获取模块33,还用于获取重新执行该测试结果数据对应的测试用例的测试结果数据;
[0109]程序测试装置40还包括:
[0110]判断模块44,用于根据获取模块33获取的该重新执行该测试结果数据对应的测试用例的测试结果数据,判断该待测程序是否发生该程序崩溃或意外退出的情况;
[0111]检测模块45,用于若判断模块44的判断结果为未发生,则检测是否还有未执行的下一条测试用例;
[0112]记录模块46,用于若判断模块44的检测结果为发生,则记录该测试用例,并调用检测模块45执行该检测是否还有未执行的下一条测试用例的步骤;
[0113]执行模块32,还用于若检测模块45的检测结果为还有该未执行的下一条测试用例,则将该下一条测试用例发送给该移动终端,并指示该移动终端执行该下一条测试用例。
[0114]优选地,获取模块33,还用于若检测模块45的检测结果为无该未执行的下一条测试用例,则获取所有测试结果数据,该测试结果数据中包含用于分类该测试结果数据的关键字;
[0115]程序测试装置40还包括:
[0116]统计模块47,用于根据该关键字及预置的统计规则,对获取模块33获取的该测试结果数据进行分类统计;
[0117]输出模块48,用于输出统计模块47获得的统计结果。
[0118]优选地,统计模块47包括:
[0119]分类单元471,用于根据该关键字,将该所有测试结果数据划分为四类,其中第一类测试结果数据对应该测试用例执行正常结束,测试结果和预期相符的情况,第二类测试结果数据对应该测试用例执行正常结束,但测试结果和预期不符的情况,第三类测试结果数据对应该测试用例执行过程异常,但该待测程序未发生程序崩溃或异常退出的情况,第四类测试结果数据对应该测试用例执行过程异常,且该待测程序发生该程序崩溃或异常退出的情况;
[0120]统计单元472,用于统计每一类测试结果数据出现的次数及该每一类测试结果数据对应的测试用例的名称;
[0121]统计单元472,还用于提取该第二类测试结果数据、该第三类测试结果数据以及该第四类测试结果数据对应的测试用例的执行日志,以根据该执行日志定位导致测试出现问题的原因。
[0122]优选地,获取模块33,还用于获取该测试程序;
[0123]提取模块31,包括:
[0124]反编译单元311,用于调用预置的反编译程序反编译该测试程序,获取反编译后的目标文件;
[0125]解析单元312,用于解析该目标文件,获取该测试用例并保存。
[0126]优选地,执行模块32还用于调用adb命令,逐条将该测试用例发送给该移动终端,并指示该移动终端启动并执行该测试用例。
[0127]优选地,判断模块44,还用于根据获取模块33获取的该测试结果数据判断该待测程序是否发生该程序崩溃或意外退出的情况;
[0128]执行模块32,还用于当该测试结果数据显示该待测程序未发生该程序崩溃或意外退出的情况时,执行该检测是否还有未执行的下一条测试用例的步骤。
[0129]本实施例对程序测试装置40的各功能模块实现各自功能的具体过程,请参见上述图1至图7所示实施例中描述的具体内容,此处不再赘述。
[0130]本发明实施例提供的程序测试装置,将从测试程序中提取的多条测试用例逐条在移动终端执行,以对待测程序进行测试,当测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,重新执行该测试结果数据对应的测试用例,并在经过预置次数的重新执行,但该测试结果数据仍显示该待测程序发生程序崩溃或意外退出的情况时,执行下一条测试用例。由于可在测试途中被测程序发生程序崩溃或意外退出的情况时,继续完成后续测试,从而可保证整个测试流程的顺利进行,提高程序测试的效率。此外,通过对测试结果数据的分类统计,可使得用户对测试结果有一个直观的了解,方便用户更快地定位出测试中发生的问题及其发生原因,从而可提高程序测试的直观性及便利性。
[0131]需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0132]需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0133]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0134]以上,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明
,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
【主权项】
1.一种程序测试方法,其特征在于,包括: 从测试程序中提取多条测试用例,并在移动终端逐条执行所述测试用例,以对待测程序进行测试; 获取测试结果数据,当所述测试结果数据显示所述待测程序发生程序崩溃或意外退出的情况时,重新执行所述测试结果数据对应的测试用例; 若经过预置次数的重新执行后,所述测试结果数据仍显示所述待测程序发生所述程序崩溃或意外退出的情况,则执行下一条测试用例。2.根据权利要求1所述的方法,其特征在于,所述若经过预置次数的重新执行后,所述测试结果数据仍显示所述待测程序发生所述程序崩溃或意外退出的情况,则执行下一条测试用例,包括: 获取重新执行所述测试结果数据对应的测试用例的测试结果数据,根据所述重新执行所述测试结果数据对应的测试用例的测试结果数据,判断所述待测程序是否发生所述程序崩溃或意外退出的情况; 若未发生,则检测是否还有未执行的下一条测试用例; 若发生,则记录所述测试用例,并执行所述检测是否还有未执行的下一条测试用例的步骤; 若还有所述未执行的下一条测试用例,则将所述下一条测试用例发送给所述移动终端,并指示所述移动终端执行所述下一条测试用例。3.根据权利要求2所述的方法,其特征在于,所述方法还包括: 若无所述未执行的下一条测试用例,则获取所有测试结果数据,所述测试结果数据中包含用于分类所述测试结果数据的关键字; 根据所述关键字及预置的统计规则,对所述测试结果数据进行分类统计,并输出统计结果。4.根据权利要求3所述的方法,其特征在于,所述根据所述关键字及预置的统计规则,对所述测试结果数据进行分类统计,包括: 根据所述关键字,将所述所有测试结果数据划分为四类,其中第一类测试结果数据对应所述测试用例执行正常结束,测试结果和预期相符的情况,第二类测试结果数据对应所述测试用例执行正常结束,但测试结果和预期不符的情况,第三类测试结果数据对应所述测试用例执行过程异常,但所述待测程序未发生程序崩溃或异常退出的情况,第四类测试结果数据对应所述测试用例执行过程异常,且所述待测程序发生所述程序崩溃或异常退出的情况; 统计每一类测试结果数据出现的次数及所述每一类测试结果数据对应的测试用例的名称; 提取所述第二类测试结果数据、所述第三类测试结果数据以及所述第四类测试结果数据对应的测试用例的执行日志,以根据所述执行日志定位导致测试出现问题的原因。5.根据权利要求1所述的方法,其特征在于,所述从测试程序中提取多条测试用例包括: 获取所述测试程序; 调用预置的反编译程序反编译所述测试程序,获取反编译后的目标文件; 解析所述目标文件,获取所述测试用例并保存。6.根据权利要求1所述的方法,其特征在于,所述在移动终端逐条执行所述测试用例,包括: 调用adb命令,逐条将所述测试用例发送给所述移动终端,并指示所述移动终端启动并执行所述测试用例。7.根据权利要求2所述的方法,其特征在于,所述获取测试结果数据与所述当所述测试结果数据显示所述待测程序发生程序崩溃或意外退出的情况时,重新执行所述测试结果数据对应的测试用例之间,还包括: 根据所述测试结果数据判断所述待测程序是否发生所述程序崩溃或意外退出的情况; 当所述测试结果数据显示所述待测程序未发生所述程序崩溃或意外退出的情况时,执行所述检测是否还有未执行的下一条测试用例的步骤。8.一种程序测试装置,其特征在于,包括: 提取模块,用于从测试程序中提取多条测试用例; 执行模块,用于在移动终端逐条执行所述提取模块提取的所述测试用例,以对待测程序进行测试; 获取模块,用于获取测试结果数据; 所述执行模块,还用于当所述测试结果数据显示所述待测程序发生程序崩溃或意外退出的情况时,重新执行所述测试结果数据对应的测试用例; 所述执行模块,还用于若经过预置次数的重新执行后,所述测试结果数据仍显示所述待测程序发生所述程序崩溃或意外退出的情况,则执行下一条测试用例。9.根据权利要求8所述的装置,其特征在于, 所述获取模块,还用于获取重新执行所述测试结果数据对应的测试用例的测试结果数据; 所述装置还包括: 判断模块,用于根据所述获取模块获取的所述重新执行所述测试结果数据对应的测试用例的测试结果数据,判断所述待测程序是否发生所述程序崩溃或意外退出的情况; 检测模块,用于若所述判断模块的判断结果为未发生,则检测是否还有未执行的下一条测试用例; 记录模块,用于若所述判断模块的检测结果为发生,则记录所述测试用例,并调用所述检测模块执行所述检测是否还有未执行的下一条测试用例的步骤; 所述执行模块,还用于若所述检测模块的检测结果为还有所述未执行的下一条测试用例,则将所述下一条测试用例发送给所述移动终端,并指示所述移动终端执行所述下一条测试用例。10.根据权利要求9所述的装置,其特征在于, 所述获取模块,还用于若所述检测模块的检测结果为无所述未执行的下一条测试用例,则获取所有测试结果数据,所述测试结果数据中包含用于分类所述测试结果数据的关键字; 所述装置还包括: 统计模块,用于根据所述关键字及预置的统计规则,对所述获取模块获取的所述测试结果数据进行分类统计; 输出模块,用于输出所述统计模块获得的统计结果。11.根据权利要求10所述的装置,其特征在于,所述统计模块包括: 分类单元,用于根据所述关键字,将所述所有测试结果数据划分为四类,其中第一类测试结果数据对应所述测试用例执行正常结束,测试结果和预期相符的情况,第二类测试结果数据对应所述测试用例执行正常结束,但测试结果和预期不符的情况,第三类测试结果数据对应所述测试用例执行过程异常,但所述待测程序未发生程序崩溃或异常退出的情况,第四类测试结果数据对应所述测试用例执行过程异常,且所述待测程序发生所述程序崩溃或异常退出的情况; 统计单元,用于统计每一类测试结果数据出现的次数及所述每一类测试结果数据对应的测试用例的名称; 所述统计单元,还用于提取所述第二类测试结果数据、所述第三类测试结果数据以及所述第四类测试结果数据对应的测试用例的执行日志,以根据所述执行日志定位导致测试出现问题的原因。12.根据权利要求8所述的装置,其特征在于, 所述获取模块,还用于获取所述测试程序; 所述提取模块,包括: 反编译单元,用于调用预置的反编译程序反编译所述测试程序,获取反编译后的目标文件; 解析单元,用于解析所述目标文件,获取所述测试用例并保存。13.根据权利要求8所述的装置,其特征在于,所述执行模块还用于调用adb命令,逐条将所述测试用例发送给所述移动终端,并指示所述移动终端启动并执行所述测试用例。14.根据权利要求9所述的装置,其特征在于, 所述判断模块,还用于根据所述获取模块获取的所述测试结果数据判断所述待测程序是否发生所述程序崩溃或意外退出的情况; 所述执行模块,还用于当所述测试结果数据显示所述待测程序未发生所述程序崩溃或意外退出的情况时,执行所述检测是否还有未执行的下一条测试用例的步骤。15.一种程序测试系统,其特征在于,包括:测试计算机以及移动终端; 所述测试计算机,用于从测试程序中提取多条测试用例,并在所述移动终端逐条执行所述测试用例,以对待测程序进行测试,获取测试结果数据,当所述测试结果数据显示所述待测程序发生程序崩溃或意外退出的情况时,指示所述移动终端重新执行所述测试结果数据对应的测试用例,若经过预置次数的重新执行后,所述测试结果数据仍显示所述待测程序发生所述程序崩溃或意外退出的情况,则指示所述移动终端执行下一条测试用例。 所述移动终端,用于接收所述测试计算机逐条发送的所述测试用例,逐条执行所述测试用例,以对所述待测程序进行测试,并将测试结果数据发送给所述测试计算机,当所述测试结果数据显示所述待测程序发生程序崩溃或意外退出的情况时,根据所述测试计算机的指示,重新执行所述测试结果数据对应的测试用例,若经过预置次数的重新执行后,所述测试结果数据仍显示所述待测程序发生所述程序崩溃或意外退出的情况,则根据所述测试计算机的指示,执行下一条测试用例。
【专利摘要】本发明提供一种程序测试方法,包括:从测试程序中提取多条测试用例,并在移动终端逐条执行该测试用例,以对待测程序进行测试;获取测试结果数据,当该测试结果数据显示该待测程序发生程序崩溃或意外退出的情况时,重新执行该测试结果数据对应的测试用例;若经过预置次数的重新执行后,该测试结果数据仍显示该待测程序发生该程序崩溃或意外退出的情况,则执行下一条测试用例。本发明还提供一种程序测试装置及系统,上述程序测试方法、装置及系统可在测试途中被测程序发生程序崩溃或意外退出的情况时,继续完成后续测试,从而可保证整个测试流程的顺利进行,提高程序测试的效率。
【IPC分类】G06F11/36
【公开号】CN105487966
【申请号】CN201410475489
【发明人】丁如敏, 沈东雄
【申请人】腾讯科技(深圳)有限公司
【公开日】2016年4月13日
【申请日】2014年9月17日