程序测试装置及方法

文档序号:6489593阅读:201来源:国知局
程序测试装置及方法
【专利摘要】本发明公开了一种程序测试方法,所述方法包括以下步骤:从程序中选择可视控件并根据所述可视控件获取方法属性,以及根据所述方法属性对所述程序进行测试并获取所述程序的测试反应;记录所述程序的测试开始时间和测试结束时间;计算所述程序的运行时间,以及判断所述运行时间是否符合预定要求并生成第一判断结果,所述运行时间等于所述测试结束时间与所述测试开始时间的差;在所述第一判断结果为所述运行时间符合所述预定要求时停止对所述程序进行测试。本发明还公开了一种程序测试装置。本发明能避免进行不必要的测试,使得针对程序的测试更加有针对性,提高程序的测试效率。
【专利说明】程序测试装置及方法
【【技术领域】】
[0001]本发明涉及程序测试领域,特别涉及一种程序测试装置及方法。
【【背景技术】】
[0002]在程序(软件)的开发过程中需要对所开发的程序(软件)进行测试。Android (安卓)提供了一个命令行工具(例如,Monkey ),这个命令行工具可以运行在模拟器或实际设备中。在传统的测试过程中,该命令行工具向模拟器或实际设备发送伪随机的用户事件流,例如,按键输入、触摸屏输入、手势输入等,从而实现对程序(软件)进行测试。
[0003]上述命令行工具具有这样一个缺陷:测试所使用的事件流数据流是随机的,不能进行自定义。
[0004]对于该命令行工具,由于测试所使用的事件流数据流是随机的,因此会出现较多无效的点击(操作),即,很多无法进行操作的像素点也会随机(测试)到,尤其是在有弹出框等的用户界面中,上述出现较多无效的点击(操作)的现象更加明显,这会导致针对程序(软件)进行测试的效率非常低。
[0005]故,有必要提出一种新的技术方案,以解决上述技术问题。

【发明内容】

[0006]本发明的一 个目的在于提供一种程序测试方法,其能避免进行不必要的测试,使得针对程序的测试更加有针对性,提高程序的测试效率。
[0007]为解决上述问题,本发明提供了一种程序测试方法,所述方法包括以下步骤:从程序中选择可视控件并根据所述可视控件获取方法属性,以及根据所述方法属性对所述程序进行测试并获取所述程序的测试反应;记录所述程序的测试开始时间和测试结束时间;计算所述程序的运行时间,以及判断所述运行时间是否符合预定要求并生成第一判断结果,所述运行时间等于所述测试结束时间与所述测试开始时间的差;在所述第一判断结果为所述运行时间符合所述预定要求时停止对所述程序进行测试。
[0008]本发明的另一个目的在于提供一种程序测试装置,其能避免进行不必要的测试,使得针对程序的测试更加有针对性,提高程序的测试效率。
[0009]为解决上述问题,本发明提供了一种程序测试装置,所述装置包括:测试模块,用于从程序中选择可视控件并根据所述可视控件获取方法属性,以及用于根据所述方法属性对所述程序进行测试并获取所述程序的测试反应;时间记录模块,用于记录所述程序的测试开始时间和测试结束时间;第一判断模块,用于计算所述程序的运行时间,以及用于判断所述运行时间是否符合预定要求并生成第一判断结果,所述运行时间等于所述测试结束时间与所述测试开始时间的差;所述测试模块还用于在所述第一判断结果为所述运行时间符合所述预定要求时停止对所述程序进行测试。
[0010]相对现有技术,本发明可以使得针对程序的测试更有针对性以及更有效率,原因是在对程序进行测试的过程中从程序中选择可视控件,避免了对一些非可视的控件进行测试,因此可以使得该测试有效果并且有效率,此外,由于利用该可视属性来对控件进行筛选,从而得出用户看得见的控件,因此可以提高对程序进行测试的有效性和有针对性。
[0011]为让本发明的上述内容能更明显易懂,下文特举优选实施例,并配合所附图式,作详细说明如下:
【【专利附图】

【附图说明】】
[0012]图1为本发明的程序测试装置的框图;
[0013]图2为图1中测试模块的框图;
[0014]图3和图4为本发明的程序测试方法的流程图。
【【具体实施方式】】
[0015]以下各实施例的说明是参考附加的图式,用以例示本发明可用以实施的特定实施例。
[0016]为了防止在对程序进行测试的过程中对一些不必要的点击(操作)也进行测试,使得针对程序的测试更加有针对性,提高程序的测试效率,本发明的技术方案如下:
[0017]参考图1和图2,图1为本发明的程序测试装置10的框图,图2为图1中测试模块104的框图。
[0018]本发明的程序测试装置包括测试模块104、时间记录模块103和第一判断模块106。测试模块104电性连接时间记录模块103,时间记录模块103还与第一判断模块106电性连接。测试模块104用于从程序中选择可视控件并根据可视控件获取方法属性,以及用于根据方法属性对程序进行测试并获取程序的测试反应。从程序中选择可视控件是为了使得针对程序的测试更有针对性以及更有效率,原因是用户只会对那些能看得到的控件进行点击或操作,而对于一些看不见的控件,用户不可能会点击或操作,这就使得在对程序进行测试的过程中,对一些非可视的控件进行测试是没有必要的,而首先选择可视控件,然后再对可视控件进行测试,这会使得该测试有效果并且有效率。时间记录模块103用于记录程序的测试开始时间和测试结束时间。对程序的测试开始时间和测试结束时间有利于对针对程序的测试是否符合预定要求作出更好的判断。第一判断模块106用于计算程序的运行时间,以及用于判断运行时间是否符合预定要求并生成第一判断结果,运行时间等于测试结束时间与测试开始时间的差。测试模块104还用于在第一判断结果为运行时间符合预定要求时停止对程序进行测试。
[0019]本发明的程序测试装置10还包括启动控制模块101和第二判断模块102。启动控制模块101与第二判断模块102电性连接,第二判断模块102还与测试模块104电性连接。启动控制模块101用于控制程序启动,具体地,在需要对程序进行测试时,控制要测试的程序启动。第二判断模块102用于判断程序是否与当前的界面对应并生成第二判断结果。与当前的界面对应指的是程序是否在当前的界面上面对用户展示,并且处于准备接收用户操作的状态。判断要进行测试的程序是否与当前的界面对应是为了实现只在程序正处于被使用的状态下进行测试,而如果程序不再被使用的状态下,例如,处于后台处理的状态下,用户是不会对其进行点击等操作的,因此,为了不做不必要的测试,需要确保要测试的程序与当前的界面对应。测试模块104还用于在第二判断结果为程序与当前的界面对应时对程序进行测试。这样,便可以确保针对程序所进行的测试时有效的,此外,还能提高测试的效率。时间记录模块103还用于记录程序的测试开始时间。测试模块104还用于在第一判断结果为运行时间不符合预定要求时再次对程序进行测试。
[0020]本发明的程序测试装置10还包括监控模块105。监控模块105与测试模块104、第一判断模块106和启动控制模块101电性连接。监控模块105用于判断程序的测试反应是否正常并生成监控结果,测试反应不正常的情况可以是崩溃(Crash)。对程序的测试反应进行监控是为了实时地掌握测试结果。启动控制模块101还用于在监控结果为程序的测试反应不正常时控制程序重新启动。这是本发明中对程序进行测试的一个保障性技术方案。时间记录模块103还用于在监控结果为程序的测试反应正常时记录测试结束时间。
[0021]测试模块104包括获取模块1041、筛选模块1042、选择模块1043和触发模块1044。获取模块1041与筛选模块1042电性连接,筛选模块1042与选择模块1043电性连接,选择模块1043还与触发模块1044电性连接。获取模块1041用于获取程序的至少一个控件。这是为了穷尽在对程序进行测试的过程中所有可能出现的情况,全面地对程序进行测试。具体地,获取模块1041用于根据Java反射机制原理获取程序的控件。Java反射机制为动态地获取信息以及动态地调用对象的方法,该Java反射机制的功能为:在运行时构造任意一个类的对象,判断任意一个类所具有的成员变量和方法,调用任意一个对象的任意一个方法,判断任意一个对象所属的类,生成动态代理。筛选模块1042用于根据至少一个控件的可视属性从至少一个控件中筛选出可视控件。控件中的可视属性可以是关于该控件是否可视的一种注释,利用该可视属性来对控件进行筛选,从而得出用户看得见的控件,进而提高对程序进行测试的有效性和有针对性。选择模块1043用于选择可视控件中的一者,选择模块1043可以是一个随机选择模块,该随机选择模块用于随机地选择可视控件中的一者。此外,选择模块1043还用于从可视控件的父结点开始至根结点控件为止遍历可视控件的父类结点控件。遍历可视控件的父类结点控件是为了找出关于父类结点控件的属性,如方法属性,该方法属性可以是点击、长点击、双击、拖动、滚动、输入等中的任意一者或一者一上的组合。触发模块1044用于选择一个方法属性并利用方法属性触发程序,实际上,这是在模拟用户点击操作,为的是对程序进行测试。触发模块1044还用于获取程序的测试反应。
[0022]本发明的程序测试装置10还包括日志模块107。日志模块107与第一判断模块106和监控模块105电信连接。日志模块107用于记录程序的测试日志。
[0023]参考图3和图4,图3和图4为本发明的程序测试方法的流程图。本发明的程序测试方法由程序测试装置执行。
[0024]在步骤301,启动控制模块101控制程序启动,具体地,在需要对程序进行测试时,控制要测试的程序启动。
[0025]在步骤302,第二判断模块102判断程序是否与当前的界面对应并生成第二判断结果,若是,则进入步骤303,否则,返回到步骤301。与当前的界面对应指的是程序是否在当前的界面上面对用户展示,并且处于准备接收用户操作的状态。判断要进行测试的程序是否与当前的界面对应是为了实现只在程序正处于被使用的状态下进行测试,而如果程序不再被使用的状态下,例如,处于后台处理的状态下,用户是不会对其进行点击等操作的,因此,为了不做不必要的测试,需要确保要测试的程序与当前的界面对应。[0026]在步骤303,时间记录模块103记录程序的测试开始时间。对程序的测试开始时间和测试结束时间有利于对针对程序的测试是否符合预定要求作出更好的判断。
[0027]在步骤304至步骤309,测试模块104从程序中选择可视控件并根据可视控件获取方法属性,以及根据方法属性对程序进行测试并获取程序的测试反应。从程序中选择可视控件是为了使得针对程序的测试更有针对性以及更有效率,原因是用户只会对那些能看得到的控件进行点击或操作,而对于一些看不见的控件,用户不可能会点击或操作,这就使得在对程序进行测试的过程中,对一些非可视的控件进行测试是没有必要的,而首先选择可视控件,然后再对可视控件进行测试,这会使得该测试有效果并且有效率。
[0028]具体地,在步骤304,获取模块1041获取程序的至少一个控件。这是为了穷尽在对程序进行测试的过程中所有可能出现的情况,全面地对程序进行测试。具体地,获取模块1041根据Java反射机制原理获取程序的控件。Java反射机制为动态地获取信息以及动态地调用对象的方法,该Java反射机制的功能为:在运行时构造任意一个类的对象,判断任意一个类所具有的成员变量和方法,调用任意一个对象的任意一个方法,判断任意一个对象所属的类,生成动态代理。
[0029]在步骤305,筛选模块1042根据至少一个控件的可视属性从至少一个控件中筛选出可视控件。控件中的可视属性可以是关于该控件是否可视的一种注释,利用该可视属性来对控件进行筛选,从而得出用户看得见的控件,进而提高对程序进行测试的有效性和有针对性。
[0030]在步骤306,选择模块1043选择可视控件中的一者。具体地,选择模块1043可以是一个随机选择模块,该随机选择模块随机地选择可视控件中的一者。
[0031]在步骤307,选择模块1043从可视控件的父结点开始至根结点控件为止遍历可视控件的父类结点控件。遍历可视控件的父类结点控件是为了找出关于父类结点控件的属性,如方法属性,该方法属性可以是点击、长点击、双击、拖动、滚动、输入等中的任意一者或一者一上的组合。
[0032]在步骤308,触发模块1044选择一个方法属性并利用方法属性触发程序,实际上,这是在模拟用户点击操作,为的是对程序进行测试。
[0033]在步骤309,触发模块1044获取程序的测试反应。
[0034]在步骤310,监控模块105判断程序的测试反应是否正常并生成监控结果,若是,则进入步骤312,否则,进入步骤311。测试反应不正常的情况可以是崩溃(Crash)。对程序的测试反应进行监控是为了实时地掌握测试结果。
[0035]在步骤311,启动控制模块101在监控结果为程序的测试反应不正常时控制程序重新启动。这是本发明中对程序进行测试的一个保障性技术方案。
[0036]在步骤312,时间记录模块103在监控结果为程序的测试反应正常时记录测试结束时间。
[0037]在步骤313,第一判断模块106计算程序的运行时间。
[0038]在步骤314,第一判断模块106判断运行时间是否符合预定要求并生成第一判断结果,运行时间等于测试结束时间与测试开始时间的差,若是,则进入步骤315,否则,返回到步骤304,即,测试模块104在第一判断结果为运行时间不符合预定要求时再次对程序进行测试。[0039]在步骤315,测试模块104在第一判断结果为运行时间符合预定要求时停止对程序进行测试。
[0040]在步骤316,日志模块107记录程序的测试日志,实际上,日志模块107记录程序的测试日志贯穿于程序测试的整个过程。
[0041]综上所述,虽然本发明已以优选实施例揭露如上,但上述优选实施例并非用以限制本发明,本领域的普通技术人员,在不脱离本发明的精神和范围内,均可作各种更动与润饰,因此本发明的保护范围以权利要求界定的范围为准。
【权利要求】
1.一种程序测试方法,其特征在于,所述方法包括以下步骤: 从程序中选择可视控件并根据所述可视控件获取方法属性,以及根据所述方法属性对所述程序进行测试并获取所述程序的测试反应; 记录所述程序的测试开始时间和测试结束时间; 计算所述程序的运行时间,以及判断所述运行时间是否符合预定要求并生成第一判断结果,所述运行时间等于所述测试结束时间与所述测试开始时间的差; 在所述第一判断结果为所述运行时间符合所述预定要求时停止对所述程序进行测试。
2.根据权利要求1所述的程序测试方法,其特征在于,所述方法还包括以下步骤: 控制所述程序启动; 判断所述程序是否与当前的界面对应并生成第二判断结果; 在所述第二判断结果为所述程序与当前的界面对应时对所述程序进行测试; 记录所述程序的测试开始时间。
3.根据权利要求1所述的程序测试方法,其特征在于,所述方法还包括以下步骤: 判断所述程序的测试 反应是否正常并生成监控结果; 在所述监控结果为所述程序的测试反应不正常时控制所述程序重新启动; 在所述监控结果为所述程序的测试反应正常时记录测试结束时间。
4.根据权利要求1所述的程序测试方法,其特征在于,所述方法还包括以下步骤: 获取所述程序的至少一个控件; 根据所述至少一个控件的可视属性从所述至少一个控件中筛选出可视控件; 选择所述可视控件中的一者; 选择一个方法属性并利用所述方法属性触发所述程序,以及获取所述程序的所述测试反应。
5.根据权利要求4所述的程序测试方法,其特征在于,所述方法还包括以下步骤: 根据Java反射机制原理获取所述程序的控件。
6.根据权利要求4所述的程序测试方法,其特征在于,所述方法还包括以下步骤: 随机地选择所述可视控件中的一者。
7.根据权利要求6所述的程序测试方法,其特征在于,所述方法还包括以下步骤: 从所述可视控件的父结点开始至根结点控件为止遍历所述可视控件的父类结点控件。
8.根据权利要求7所述的程序测试方法,其特征在于,所述方法属性为关于所述父类结点控件的属性,所述方法属性可以是点击、长点击、双击、拖动、滚动、输入等中的任意一者或一者一上的组合。
9.根据权利要求4所述的程序测试方法,其特征在于,所述方法还包括以下步骤: 在所述第一判断结果为所述运行时间不符合所述预定要求时再次对所述程序进行测试。
10.根据权利要求1所述的程序测试方法,其特征在于,所述方法还包括以下步骤: 记录所述程序的测试日志。
11.一种程序测试装置,其特征在于,所述装置包括: 测试模块,用于从程序中选择可视控件并根据所述可视控件获取方法属性,以及用于根据所述方法属性对所述程序进行测试并获取所述程序的测试反应;时间记录模块,用于记录所述程序的测试开始时间和测试结束时间; 第一判断模块,用于计算所述程序的运行时间,以及用于判断所述运行时间是否符合预定要求并生成第一判断结果,所述运行时间等于所述测试结束时间与所述测试开始时间的差; 所述测试模块还用于在所述第一判断结果为所述运行时间符合所述预定要求时停止对所述程序进行测试。
12.根据权利要求11所述的程序测试装置,其特征在于,所述装置还包括: 启动控制模块,用于控制所述程序启动; 第二判断模块,用于判断所述程序是否与当前的界面对应并生成第二判断结果; 所述测试模块还用于在所述第二判断结果为所述程序与当前的界面对应时对所述程序进行测试; 所述时间记录模块还用于记录所述程序的测试开始时间。
13.根据权利要求11所述的程序测试装置,其特征在于,所述装置还包括: 监控模块,用于判断所述程序的测试反应是否正常并生成监控结果; 所述启动控制模块还用于在所述监控结果为所述程序的测试反应不正常时控制所述程序重新启动; 所述时间记录模块还用于在所述监控结果为所述程序的测试反应正常时记录测试结束时间。
14.根据权利要求11所述的程序测试装置,其特征在于,所述测试模块包括: 获取模块,用于获取所述程序的至少一个控件; 筛选模块,用于根据所述至少一个控件的可视属性从所述至少一个控件中筛选出可视控件; 选择模块,用于选择所述可视控件中的一者; 触发模块,用于选择一个方法属性并利用所述方法属性触发所述程序,以及用于获取所述程序的所述测试反应。
15.根据权利要求14所述的程序测试装置,其特征在于,所述获取模块还用于根据Java反射机制原理获取所述程序的控件。
16.根据权利要求14所述的程序测试装置,其特征在于,所述选择模块还用于随机地选择所述可视控件中的一者。
17.根据权利要求16所述的程序测试装置,其特征在于,所述选择模块还用于从所述可视控件的父结点开始至根结点控件为止遍历所述可视控件的父类结点控件。
18.根据权利要求17所述的程序测试装置,其特征在于,所述方法属性为关于所述父类结点控件的属性,所述方法属性可以是点击、长点击、双击、拖动、滚动、输入等中的任意一者或一者一上的组合。
19.根据权利要求14所述的程序测试装置,其特征在于,所述测试模块还用于在所述第一判断结果为所述运行时间不符合所述预定要求时再次对所述程序进行测试。
20.根据权利要求11所述的程序测试装置,其特征在于,所述装置还包括: 日志模块,用于记录所述程序的测试日志。
【文档编号】G06F11/36GK103713988SQ201210375517
【公开日】2014年4月9日 申请日期:2012年9月29日 优先权日:2012年9月29日
【发明者】丁如敏 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1