具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参照图1,示出了根据本发明一个实施例的一种终端性能的检测方法的流程图,具体可以包括:
步骤101、创建测试信息基类和测试执行基类;其中,所述测试信息基类用于描述测试用例的信息,所述测试执行基类用于执行测试用例;
步骤102、针对测试用例,从所述测试信息基类派生出对应的测试用例信息类,及,从所述测试执行基类派生出对应的测试用例执行类;其中,所述测试用例信息类在构造函数中传递的参数具体可以包括有当前测试用例的测试用例执行类名称;
步骤103、对所述测试用例信息类进行实例化得到相应的测试用例对象;
步骤104、针对所述测试用例对象,依据其对应的测试用例执行类名称获取对应的测试用例执行类,并调用所获取的测试用例执行类执行相应的测试用例。
本发明实施例可以应用于智能手机、平板电脑、笔记本电脑、PDA(个人数字助理,Personal DigitalAssistant)等移动终端性能的检测,也可以应用于台式电脑等固定终端性能的检测,本发明实施例对具体的终端不加以限制。
现有终端性能的检测方法采用的是面向过程的设计,这里的面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。对于终端性能的检测,这样的行为在面向过程的设计中分散在了众多步骤中,有利于设计人员依据实际情况进行各种各样的简化,但是具有扩展性和灵活性差的缺点,具体表现在:如果测试需求发生了变化,则检测流程所需的众多步骤很有可能都需要改动,这就涉及到整体的代码段改动等等,而整体的代码段改动容易增加产品的开发周期,降低产品的开发效率。
而终端性能的检测结果显示方法采用的是面向对象的设计,这里的面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。在面向对象的设计中,终端性能的检测这样的行为只可能在其实例化对象中出现,故如果测试需求发生了变化,则只需改动相应的实例化对象即可,改动只是局部的。
在具体实现中,本发明通过采用面向对象的抽象方法,依据终端性能的检测属性抽象得到用于描述测试用例的信息的测试信息基类,及用于执行测试用例的测试执行基类;这样,通过采用面向对象的继承方法,只需针对测试用例配合使用所述测试信息基类的派生类和测试执行基类的派生类的实例化对象即可执行任意的测试用例。
其中,对于抽象得到的测试信息基类,可以通过使用成员变量和成员函数来描述测试用例的信息;对于抽象得到的测试执行基类,可以通过使用成员变量和成员函数来描述测试用例的执行信息,这里测试用例的执行信息中可以包括具体的测试流程,例如,一个完整的测试流程具体可以包括:初始化、时间控制、界面控制、测评算法、释放空间等等。
在本发明的一种优选实施例中,所述测试执行基类的成员函数具体可以包括:用于描述测试流程的测试流程函数;从所述测试执行基类派生出的测试用例执行类覆盖所述测试流程函数以执行相应测试用例的测试流程。
依据继承机制,对于从所述测试信息基类派生出对应的测试用例信息类,其可以自动继承所述测试信息基类的成员变量和成员函数,并且,其还可以通过构造函数来传递相应测试用例的参数;这里,测试用例的参数具体可以包括有当前测试用例的测试用例执行类名称。
另外,可以理解,依据继承机制,测试用例信息类和测试用例执行类作为子类,在派生时,可以根据需要覆盖父类的成员函数来实现相应测试用例的私有信息,例如,测试用例执行类可以在测试流程函数中执行对应测试用例的评测流程算法等等。
由于测试用例信息类是从所述测试信息基类派生,测试用例执行类是从所述测试执行基类派生而来,这样,配合使用所述测试用例信息类和测试用例执行类的实例化对象即可执行任意的测试用例。
本发明具有如下优点:
采用本发明的方案,如果测试需求发生了变化,则只需改动相应的实例化对象即可。
例如,如果需要调整多个测试用例的执行顺序,只需调整多个测试用例对应所述测试信息基类的派生类的实例化对象的执行顺序即可,而无需调整具体的代码段,也就能够避免出现代码段出错的现象;
又如,如果需要增加新测试用例,只需针对该新测试用例配合使用所述测试信息基类的派生类和测试执行基类的派生类的实例化对象即可,而无需重新编写一个完整测试流程所对应的代码段;
总之,本发明终端性能的测试方案,能够灵活地进行多个测试用例,以及,能够方便地适应测试用例的任意增加、删除或顺序调整,总之,本发明能够提高终端性能测试的灵活性和扩展性。
参照图2,示出了根据本发明一个实施例的一种终端性能的检测方法的流程图,具体可以包括:
步骤201、创建测试信息基类和测试执行基类;其中,所述测试信息基类用于描述测试用例的信息,所述测试执行基类用于执行测试用例;
步骤202、针对测试用例,从所述测试信息基类派生出对应的测试用例信息类,及,从所述测试执行基类派生出对应的测试用例执行类;其中,所述测试用例信息类在构造函数中传递的参数具体可以包括有当前测试用例的测试用例执行类名称;
步骤203、对所述测试用例信息类进行实例化得到相应的测试用例对象;
步骤204、将实例化得到的测试用例对象添加至列表,所述列表中测试用例对象的初始执行标志为未执行;
步骤205、从所述列表中获取执行标志为未执行的测试用例对象;
步骤206、针对所述未执行的测试用例对象,依据其所关联的测试用例执行类名称获取对应的测试用例执行类,并调用所获取的测试用例执行类执行相应的测试用例;执行完成的测试用例对象对应的执行标志为已执行。
本发明实施例将所有的测试用例对象添加至列表,在终端性能的检测过程中,只需逐一获取未执行的测试用例对象,并针对所获取的测试用例对象找到对应的测试用例执行类,就可以通过执行相应的测试用例得到想要的终端性能检测结果。在具体实现中,可以通过遍历列表的方式获取所述列表中获取执行标志为未执行的测试用例对象。并且,可以理解,可以在执行完一个测试用例对象后,将其执行标志修改为已执行。
参照图3,示出了根据本发明一个实施例的一种终端性能的检测方法的流程图,具体可以包括:
步骤301、创建测试信息基类和测试执行基类;其中,所述测试信息基类用于描述测试用例的信息,所述测试执行基类用于执行测试用例;所述测试执行基类具体可以包括:用于执行全屏测试用例的全屏测试基类和用于执行非全屏测试用例的非全屏测试基类;其中,所述全屏测试基类由Android系统的Activity类派生而来;所述测试用例的信息中具体可以包括有当前测试用例是否为全屏测试用例的检测方法;
步骤302、针对测试用例,从所述测试信息基类派生出对应的测试用例信息类,及,从所述测试执行基类派生出对应的测试用例执行类;其中,所述测试用例信息类在构造函数中传递的参数具体可以包括有当前测试用例的测试用例执行类名称;所述测试用例执行类具体可以包括:从所述全屏测试基类派生出的全屏测试用例执行类和从所述非全屏测试基类派生出的非全屏测试用例执行类;
步骤303、对所述测试用例信息类进行实例化得到相应的测试用例对象;
步骤304、针对所述测试用例对象,依据其对应的测试用例执行类名称获取对应的测试用例执行类;
步骤305、通过调用所述测试用例对象中当前测试用例是否为全屏测试用例的检测方法,检测所述测试用例对象对应测试用例是否为全屏测试用例;
步骤306、在所述测试用例对象对应测试用例为全屏测试用例时,调用对应的全屏测试用例执行类执行相应的测试用例;
步骤307、在所述测试用例对象对应测试用例为非全屏测试用例时,调用对应的非全屏测试用例执行类执行相应的测试用例。
目前的移动终端大多使用Android操作系统,首先对Android操作系统中Activity(活动)的原理进行说明。Android操作系统中,一个Activity是一个应用程序组件,其可用于提供一个屏幕,其还可用于交互以完成某项任务,例如拨号、拍照、发送email、看地图等;通常,每一个Activity被给予一个窗口,在该窗口上面可以绘制用户接口,窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。
目前能够测试的移动终端的性能具体可以包括:CPU整数性能、CPU浮点性能、2D绘图性能、3D绘图性能、数据库性能、存储系统等等。其中,2D绘图性能、3D绘图性能的测试属于前台全屏的测试,前台全屏的测试需要在自己的Activity中运行;而CPU整数性能、CPU浮点性能、数据库、存储系统等性能的测试属于后台非全屏的测试,后台非全屏的测试不需要在自己的Activity中运行。
因此,本发明实施例依据终端性能的测试属性,抽象出用于执行全屏测试用例的全屏测试基类和用于执行非全屏测试用例的非全屏测试基类;并且,由于全屏测试基类需要在自己的Activity中运行,故需要由Android系统的Activity类派生而来;另外,还可以针对测试用例,从全屏测试基类和非全屏测试基类派出对应的全屏测试用例执行类和非全屏测试用例执行类,并对其进行调用以执行相应的测试用例。
需要说明的是,由于所述测试信息基类可以通过使用成员变量和成员函数来描述测试用例的信息,故在实际应用中,可以采用成员函数来描述当前测试用例是否为全屏测试用例的检测方法。例如,在本发明的一种应用示例中,可以采用成员函数public Boolean isBackground()来检测当前测试用例是否为全屏测试用例,若是,则返回false,表示是全屏测试用例,否则返回true,表示是非全屏测试用例。这样,步骤305便可以使用所述测试用例对象的指针调用该成员函数,并返回相应的结果。
在本发明的一种优选实施例中,所述调用对应的全屏测试用例执行类执行终端性能的测试的步骤306,具体可以包括:
步骤S101、从当前活动创建并启动一个全屏测试类的对象,由该全屏测试类的对象执行相应的测试用例,并返回相应的测试结果给当前活动;
步骤S102、当前活动获取该新全屏测试类的对象返回的测试结果。
这里,当前活动用于表示全屏测试用例执行类的调用者,该当前活动一般表现为用于显示测试界面的主窗口;在全屏测试用例执行类的调用过程中,该当前活动主要用于通过创建并启动一个全屏测试类的对象来启动全屏测试所需的Activity,并且,等待该全屏测试类的对象返回相应的测试结果。
在具体实现中,可以通过startActivityForResult(Intent intent,int requestCode)从当前活动创建并启动一个全屏测试类的对象。其中,Intent为Android的意图类,intent是意图类的一个对象,其用于传递启动一个全屏测试类的对象所需的参数,该参数中指定有需要启动的全屏测试类的对象的类名(该类名也即步骤304中测试用例执行类名);requestCode的值是自定义的,可用于识别需要启动的全屏测试类的对象。
对于全屏测试类而言,由于其针对测试用例从所述全屏测试基类派生得到,故其描述有具体的测试流程;该全屏测试类的对象可依据全屏测试类实例化得到,其可以依据所描述的测试流程,执行相应的测试用例。
在具体实现中,该全屏测试类的对象可以通过setResult(int resultCode,Intent data)保存测试结果,并通过调用当前活动的onActivityResult(int requestCode,int resultCode,Intent data)来返回所保存的测试结果。其中,如果该全屏测试类的对象可能有几种不同的测试结果返回,可以用resultCode参数予以识别区分,data用于表示返回的数据,onActivityResult(int requestCode,int resultCode,Intent data)为当前活动的回调函数。
进一步,当前活动可以依据resultCode参数和data参数,获取该新全屏测试类的对象返回的测试结果。
在本发明的另一种优选实施例中,所述调用对应的非全屏测试用例执行类执行终端性能的测试的步骤307,具体可以包括:
步骤S201、对所述非全屏测试用例执行类进行实例化得到相应的非全屏测试用例对象;
步骤S202、创建后台测试线程,将所述非全屏测试用例对象传递进该后台测试线程;
步骤S203、启动该后台测试线程执行相应的测试用例。
假设所述非全屏测试用例执行类的名称为BackgroundTest,当前测试用例对象的指针为pointer,则步骤S201可以通过BackgroundTester tester=pointer.getBackgroundTester(intent)来实现,其中,intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述;
由于非全屏测试是在后台运行,为了不影响前台界面更新,,所以需要一个后台测试线程来完成,在本发明的一种应用示例中,步骤S202可以通过BackgroundTestThread thread=newBackgroundTestThread(tester)来实现。其中,BackgroundTestThread为从Thread类派生出的线程类,并且,在实例化BackgroundTestThread的对象thread的过程中,可以在BackgroundTestThread的构造函数中传递所述非全屏测试用例对象,由所述非全屏测试用例对象在run()方法中进行测试,并通知前台界面;这里,run()方法在一种循环下,使线程一直运行,直到不满足条件为止。
步骤S203可以通过thread.start()来实现,在执行thread.start()后,thread会自动执行run()方法;可以理解,在执行thread.start()之前,还可以通过thread.setPriority(Thread.MAX_PRIORITY)将thread的优先级设置为最大,使其优先执行。
在上述方法实施例中,对各个方法实施例的描述都各有侧重,某个方法实施例中没有详述的部分,可以参见其他方法实施例的相关描述即可。
并且,本领域技术人员易于想到的是:上述方法实施例的任意组合应用都是可行的,但是由于篇幅限制,本说明书在此就不一一详述了。
最后,需要补充的是,在本发明的一种优选实施例中,所述测试执行基类的成员函数具体可以包括如下测试属性函数中的一项或多项:用于描述执行当前测试用例前需要等待的时间的第一等待函数,用于描述当前测试用例的执行轮数的轮数函数,及,用于描述执行每轮当前测试用例前需要等待的时间的第二等待函数;
从所述测试执行基类派生出的测试用例执行类覆盖所述测试属性函数以执行相应测试用例的测试属性。
在实际应用中,一个测试用例可能需要测试多轮。以CPU浮点性能的测试为例,为了使测试结果更稳定,就需要多执行几轮;也即,本发明实施例中,执行轮数针对的是同一个测试用例;第二等待函数也就是每轮测试用例之间的等待时间;
另外,由于测试用例的个性,可能需要一定时间来做准备工作,如测试流程中的初始化和释放空间等工作都算准备工作,因此,为了提高测试结果的稳定性,第一等待函数可用于表示不同测试用例之间的等待时间。
可以理解,本领域技术人员可以根据时间需要,设置所述第一等待函数和第二等待时间对应的时间数值,本发明对此不加以限制。
另外,为了便于测试人员对于测试的监控,在本发明的另一种优选实施例中,所述测试用例的信息中还可以包括有当前测试用例的描述信息;
则所述方法还可以包括:
步骤S301、获取所述测试用例对象对应的测试用例的描述信息;
步骤S302、将所述测试用例对象对应的测试用例的描述信息显示到测试界面上;
步骤S303、更新所述测试界面上的进度信息。
假设测试信息基类的成员函数getTitle()用于返回测试用例描述,假设当前测试用例对象的指针为pointer,那么,步骤S301可以通过String tag=pointer.getTitle()来实现,步骤302可以通过txtItem.setText(String.format(strProgressArg,tag,index,list.size()))来实现,步骤S303可以通过benchHandler.post(progressUpdater)来实现。其中,
txtItem是一个TextView控件;
setText()用于设置欲要显示的文字;
benchHandler是一个消息处理Handler,因为非UI(用户界面,UserInterface)线程中不能更新UI控件,所以必须通过消息来处理;
post()用于发送一个消息;
progressUpdater是一个UpdateProgressHandler,它派生自Runnable,是Java线程的另一种实现方式,post()需要一个Runnable对象作为参数,它的具体作用就是通知benchHandler来更新界面。
本优选实施例通过在测试界面上显示测试用例的描述信息及测试用例的执行进度信息,以实现测试的监控。
为使本领域技术人员更好地理解本发明,在此提供根据本发明一个实施例的一种终端性能的检测方法的示例,具体可以包括:
步骤S401、创建测试信息基类和测试执行基类;其中,所述测试信息基类用于描述测试用例的信息,所述测试执行基类用于执行测试用例;所述测试执行基类具体可以包括:用于执行全屏测试用例的全屏测试基类和用于执行非全屏测试用例的非全屏测试基类;其中,所述全屏测试基类由Android系统的Activity类派生而来;所述测试用例的信息中具体可以包括有当前测试用例是否为全屏测试用例的检测方法;
参照表1,示出了根据本发明一个实施例的一种测试信息基类Case的成员变量的示例。
表1
成员变量名称 |
成员变量类型 |
成员变量描述 |
Tag |
String |
测试用例名称 |
Package |
String |
测试用例包名 |
BACKGROUNDTESTER |
BackgroundTester |
BackgroundTester的对象 |
tester |
Tester |
Tester的对象 |
mRepeatNow |
Integer |
重复测试次数 |
Intent |
Intent |
用于保存传递的参数 |
context |
Context |
上下文 |
参照表2,示出了根据本发明一个实施例的一种测试信息基类Case的成员函数的示例。
表2
参照表3,示出了根据本发明一个实施例的一种全屏测试基类和非全屏测试基类的成员函数的示例。
表3
成员函数名称 |
成员函数名称类型 |
成员函数描述 |
getTag() |
String |
设置评测用例Tag |
sleepBeforeStart() |
int |
第一等待函数 |
sleepBetweenRound |
int |
第二等待函数 |
oneRound() |
void |
测试流程函数 |
步骤S402、针对测试用例,从所述测试信息基类派生出对应的测试用例信息类,从所述全屏测试基类派生出对应的全屏测试用例执行类,及,从所述全屏测试基类派生出对应的全屏测试用例执行类;其中,所述测试用例信息类在构造函数中传递的参数具体可以包括有当前测试用例的测试用例执行类名称;
下面分别以2D性能和CPU整数的测试用例为例,说明从所述测试信息基类派生出对应的测试用例信息类的实现过程:
测试信息基类派生1、
新建一个Case2D类,用于描述2D性能对应测试用例的信息,该类派生于测试信息基类Case。
测试信息基类派生2、
新建一个CaseCPUInteger类,用于描述CPU整数性能对应测试用例的信息,该类派生于测试信息基类Case。
假设全屏测试基类为Tester,下面以2D性能对应测试用例为例,说明从所述全屏测试基类派生出对应的全屏测试用例执行类OpenGLTest的示例,由于是全屏测试用例,所以OpenGLTest从Tester类派生并实现了父类Tester和祖父类Activity的对应接口:
假设非全屏测试基类为BackgroundTester,下面以CPU整数性能对应测试用例为例,说明从所述非全屏测试基类派生出对应的非全屏测试用例执行类TesterCPUInteger的示例:
步骤S403、对所述测试用例信息类进行实例化得到相应的测试用例对象;
在此,以2D性能和CPU整数性能对应测试用例信息类的实例化为例进行说明:
Case graphics2d=new Case2D(this);
Case cpuint=new CaseCPUInteger(this);
也即,graphics2d和cpuint分别为2D性能和CPU整数性能对应的测试用例对象。
步骤S404、将实例化得到的测试用例对象添加至列表,所述列表中测试用例对象的初始执行标志为未执行;
步骤S405、从所述列表中获取执行标志为未执行的测试用例对象;
步骤S406、针对所述未执行的测试用例对象,依据其所关联的测试用例执行类名称获取对应的测试用例执行类;
需要说明的是,由于在实例化对象时调用类的构造函数,以Case2D的实例化为例,其构造函数如下:
Case2D(Context context){
super(context,"Case2D","OpenGLTest",1,1);
}
其中,context,"Case2D","OpenGLTest",1,1均为在构造函数中传递的参数,其中,"Case2D"为测试用例的名称,"OpenGLTest"为测试用例执行类名称,故可以获取对应的测试用例执行类。
步骤S407、利用所述未执行的测试用例对象的指针,获取所述测试用例对象对应的测试用例的描述信息,将所述测试用例对象对应的测试用例的描述信息显示到测试界面上,并更新所述测试界面上的进度信息;
步骤S408、利用所述未执行的测试用例对象的指针,调用所述测试用例对象中当前测试用例是否为全屏测试用例的检测方法,检测所述未执行的测试用例对象对应测试用例是否为全屏测试用例;
步骤S409、在所述未执行的测试用例对象对应测试用例为全屏测试用例时,调用对应的全屏测试用例执行类执行相应的测试用例;
步骤S410、在所述未执行的测试用例对象对应测试用例为非全屏测试用例时,调用对应的非全屏测试用例执行类执行相应的测试用例。
步骤S408-步骤S410的相关代码示例如下:
参照图4,示出了根据本发明一个实施例的一种终端性能的检测装置的结构图,具体可以包括:
基类创建模块401,适于创建测试信息基类和测试执行基类;其中,所述测试信息基类用于描述测试用例的信息,所述测试执行基类用于执行测试用例;
派生模块402,适于针对测试用例,从所述测试信息基类派生出对应的测试用例信息类,及,从所述测试执行基类派生出对应的测试用例执行类;其中,所述测试用例信息类在构造函数中传递的参数包括当前测试用例的测试用例执行类名称;
实例化模块403,适于对所述测试用例信息类进行实例化得到相应的测试用例对象;
对象执行类获取模块404,适于针对所述测试用例对象,依据其对应的测试用例执行类名称获取对应的测试用例执行类;及
对象测试用例执行模块405,适于调用所获取的测试用例执行类执行相应的测试用例。
在本发明的一种优选实施例中,所述装置还可以包括:
对象添加模块,适于将实例化得到的测试用例对象添加至列表,所述列表中测试用例对象的初始执行标志为未执行;
未执行对象获取模块,适于从所述列表中获取执行标志为未执行的测试用例对象;
未执行对象执行模块,适于针对所述未执行的测试用例对象,依据其所关联的测试用例执行类名称获取对应的测试用例执行类,并调用所获取的测试用例执行类执行相应的测试用例。
在本发明的另一种优选实施例中,所述测试执行基类具体可以包括:用于执行全屏测试用例的全屏测试基类和用于执行非全屏测试用例的非全屏测试基类;其中,所述全屏测试基类由Android系统的Activity类派生而来;
则所述测试用例执行类具体可以包括:从所述全屏测试基类派生出的全屏测试用例执行类和从所述非全屏测试基类派生出的非全屏测试用例执行类。
所述测试用例的信息中还可以包括有当前测试用例是否为全屏测试用例的检测方法;
则所述对象测试用例执行模块405具体可以包括:
全屏检测子模块,适于通过调用所述测试用例对象中当前测试用例是否为全屏测试用例的检测方法,检测所述测试用例对象对应测试用例是否为全屏测试用例;
全屏调用子模块,适于在所述测试用例对象对应测试用例为全屏测试用例时,调用对应的全屏测试用例执行类执行相应的测试用例;
非全屏调用子模块,适于在所述测试用例对象对应测试用例为非全屏测试用例时,调用对应的非全屏测试用例执行类执行相应的测试用例。
在本发明的再一种优选实施例中,所述全屏调用子模块具体可以包括:
对象创建单元,适于从当前活动创建并启动一个全屏测试类的对象,由该全屏测试类的对象执行相应的测试用例,并返回相应的测试结果给当前活动;及
结果获取单元,适于当前活动获取该新全屏测试类的对象返回的测试结果。
在本发明的一种优选实施例中,所述非全屏调用子模块具体可以包括:
非全屏实例化单元,适于对所述非全屏测试用例执行类进行实例化得到相应的非全屏测试用例对象;
线程创建传递单元,适于创建后台测试线程,将所述非全屏测试用例对象传递进该后台测试线程;及
线程启动单元,适于启动该后台测试线程执行相应的测试用例。
在本发明的另一种优选实施例中,所述测试执行基类的成员函数具体可以包括:用于描述测试流程的测试流程函数;从所述测试执行基类派生出的测试用例执行类覆盖所述测试流程函数以执行相应测试用例的测试流程。
在本发明的再一种优选实施例中,所述测试执行基类的成员函数具体可以包括如下测试属性函数中的一项或多项:用于描述执行当前测试用例前需要等待的时间的第一等待函数,用于描述当前测试用例的执行轮数的轮数函数,及,用于描述执行每轮当前测试用例前需要等待的时间的第二等待函数;
则在具体实现中,可以从所述测试执行基类派生出的测试用例执行类覆盖所述测试属性函数以执行相应测试用例的测试属性。
参照图5,示出了根据本发明一个实施例的一种终端性能的检测结果显示方法的流程图,具体可以包括:
步骤501、创建测试信息基类和测试执行基类;其中,所述测试信息基类用于描述测试用例的信息,所述测试执行基类用于执行测试用例;
步骤502、针对测试用例,从所述测试信息基类派生出对应的测试用例信息类,及,从所述测试执行基类派生出对应的测试用例执行类;其中,所述测试用例信息类在构造函数中传递的参数包括当前测试用例的测试用例执行类名称;
步骤503、对所述测试用例信息类进行实例化得到相应的测试用例对象;
步骤504、针对所述测试用例对象,依据其对应的测试用例执行类名称获取对应的测试用例执行类,并调用所获取的测试用例执行类执行相应的测试用例,得到相应的终端性能检测结果;
步骤505、依据用户界面上的终端性能检测结果触发的请求,展现所述终端性能检测结果。
在本发明的一种应用示例中,可以依据用户界面上的终端性能检测结果的触发请求,将所述终端性能检测结果展现于当前终端的UI之上,以供用户查看;用户依据所述展现的所述终端性能检测结果可以获知当前终端的性能,例如,当前终端的所述终端性能检测结果可以作为用户是否购买当前终端的因素之一,或者,多个终端的所述终端性能检测结果可以作为多个终端性能的比较因素之一。总之,本发明可以通过展现终端性能检测结果,以向用户显示反馈一个比较真实的终端性能检测结果。
需要说明的是,用户界面上的终端性能检测结果触发的请求可以通过鼠标、键盘、触摸手势等用户操作产生,该用户操作具体可以针对用户界面上的按钮等具有触发功能的界面元素得到。
参照图6,示出了根据本发明一个实施例的一种终端性能检测结果的展现方法示意图,其中,用户可以通过界面上的“开始评分”按钮发出数据库性能检测触发的请求,那么本发明实施可以依据该请求执行步骤601-604所涉及的终端性能的检测,同时在界面上显示终端性能的检测进度,其中87%就是检测进度的一个示例。在发出该请求后,界面上的“开始评分”按钮变为“停止评分”按钮,可以理解,用户可以通过点击“停止评分”按钮来停止当前的数据库性能的检测。另外,在检测进度达到100%后,本发明可以自动显示相应的终端性能检测结果,或者,本发明可以依据用户界面上的终端性能检测结果触发的请求(如点击除“开始评分”按钮或“停止评分”按钮之外的其它按钮),展现相应的终端性能检测结果,如在检测进度达到100%后,界面上的“停止评分”按钮变为“查看评分”按钮,可以理解,用户可以通过点击“查看评分”按钮来触发终端性能检测结果的展现。
可以理解,所述终端性能检测结果可以单独展现某个终端性能的检测结果,也可以展现多个终端性能的检测结果;或者,在先后执行多个终端性能对应测试用例时,也可以先后展现该多个终端性能的检测结果;总之,本发明对具体的展现方式不加以限制。
参照图7,示出了根据本发明一个实施例的一种终端性能检测结果的展现方法示意图,其将终端性能的检测结果以得分的形式展现,展现的终端性能具体可以包括:CPU整数性能、CPU浮点性能、2D绘图性能、3D绘图性能、数据库IO(输入输出,Input/output)性能、SD卡写入速度、SD卡读取速度等性能的得分,以及终端性能的总分(总体性能的得分)。
在本发明的一些实施例中,检测客户端可以将当前终端的终端性能检测结果上报给检测服务器,并且,检测服务器还可以将多种终端样本的终端性能检测结果下发给检测客户端,由检测客户端展现给用户,以方便用户获知当前移动终端的终端性能检测结果在多种终端样本中的排名等等。
可以理解,本领域技术人员可以采用各种展现方式将所述终端性能检测结果于各种位置,本发明实施例对所述终端性能检测结果的展现位置与具体的展现方式不加以限制。
参照图8,示出了根据本发明一个实施例的一种终端性能的检测结果显示装置的结构图,具体可以包括:
基类创建模块801,适于创建测试信息基类和测试执行基类;其中,所述测试信息基类用于描述测试用例的信息,所述测试执行基类用于执行测试用例;
派生模块802,适于针对测试用例,从所述测试信息基类派生出对应的测试用例信息类,及,从所述测试执行基类派生出对应的测试用例执行类;其中,所述测试用例信息类在构造函数中传递的参数包括当前测试用例的测试用例执行类名称;
实例化模块803,适于对所述测试用例信息类进行实例化得到相应的测试用例对象;
对象执行类获取模块804,适于针对所述测试用例对象,依据其对应的测试用例执行类名称获取对应的测试用例执行类;
对象测试用例执行模块805,适于调用所获取的测试用例执行类执行相应的测试用例;及
结果展现模块806,用于依据用户界面上的终端性能检测结果触发的请求,展现所述终端性能检测结果。
可选地,所述装置还包括对象添加模块,适于将实例化得到的测试用例对象添加至列表,所述列表中测试用例对象的初始执行标志为未执行;未执行对象获取模块,适于从所述列表中获取执行标志为未执行的测试用例对象;未执行对象执行模块,适于针对所述未执行的测试用例对象,依据其所关联的测试用例执行类名称获取对应的测试用例执行类,并调用所获取的测试用例执行类执行相应的测试用例;执行完成的测试用例对象对应的执行标志为已执行。
可选地,所述测试执行基类包括:用于执行全屏测试用例的全屏测试基类和用于执行非全屏测试用例的非全屏测试基类;其中,所述全屏测试基类由Android系统的Activity类派生而来;则所述测试用例执行类包括:从所述全屏测试基类派生出的全屏测试用例执行类和从所述非全屏测试基类派生出的非全屏测试用例执行类。所述测试用例的信息中还包括有当前测试用例是否为全屏测试用例的检测方法;则所述对象测试用例执行模块包括:全屏检测子模块,适于通过调用所述测试用例对象中当前测试用例是否为全屏测试用例的检测方法,检测所述测试用例对象对应测试用例是否为全屏测试用例;全屏调用子模块,适于在所述测试用例对象对应测试用例为全屏测试用例时,调用对应的全屏测试用例执行类执行相应的测试用例;非全屏调用子模块,适于在所述测试用例对象对应测试用例为非全屏测试用例时,调用对应的非全屏测试用例执行类执行相应的测试用例。
可选地,所述全屏调用子模块包括:对象创建单元,适于从当前活动创建并启动一个全屏测试类的对象,由该全屏测试类的对象执行相应的测试用例,并返回相应的测试结果给当前活动;结果获取单元,适于当前活动获取该新全屏测试类的对象返回的测试结果。
可选地,所述非全屏调用子模块包括:非全屏实例化单元,适于对所述非全屏测试用例执行类进行实例化得到相应的非全屏测试用例对象;线程创建传递单元,适于创建后台测试线程,将所述非全屏测试用例对象传递进该后台测试线程;线程启动单元,适于启动该后台测试线程执行相应的测试用例。
可选地,所述测试执行基类的成员函数包括:用于描述测试流程的测试流程函数;从所述测试执行基类派生出的测试用例执行类覆盖所述测试流程函数以执行相应测试用例的测试流程。
可选地,所述测试执行基类的成员函数包括如下测试属性函数中的一项或多项:用于描述执行当前测试用例前需要等待的时间的第一等待函数,用于描述当前测试用例的执行轮数的轮数函数,及,用于描述执行每轮当前测试用例前需要等待的时间的第二等待函数;从所述测试执行基类派生出的测试用例执行类覆盖所述测试属性函数以执行相应测试用例的测试属性。
在具体实现中,基类创建模块801、派生模块802、实例化模块803、对象执行类获取模块804和对象测试用例执行模块805可以位于各种计算机系统或服务器端,该三个模块配合完成数据库性能的检测;结果展现模块806可以位于各种显示器中,用于展现所述数据库性能检测结果;其中,所述计算机系统或显示器可以位于智能手机、平板电脑、笔记本电脑、PDA等移动终端之上,也可以位于台式电脑等固定终端之上。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。