一种自动化测试方法、装置和计算设备
技术领域
本发明涉及自动化测试领域,尤其涉及一种自动化测试方法和装置。
背景技术
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,这种测试方法具有节省人力、时间、硬件资源、提高工作效率以及判断精准等优点,正被逐渐地引入到移动终端APP的测试工作中。但尽管如此,自动化测试方法以及测试工具,在一些操作上仍然无法满足智能操作的要求。
通常情况下,测试界面是由多种不同类型的控件排列开来,但不可避免地会出现要进行操作的目标控件被上一层控件覆盖的情况,此时在进行自动化测试过程中,尽管能查找到该控件,但并不可对该控件进行点击,从而导致不能正确地进入下一界面而对测试结果进行错误判断,进而输出不准确的测试报告,并最终影响对产品质量的把控。
发明内容
为此,本发明提供一种自动化测试方法、装置和计算设备,以力图解决或者至少缓解上面存在的问题。
根据本发明的一个方面,提供一种自动化测试方法,适于在计算设备中执行,该方法包括:获取当前测试界面上的所有控件类型信息;获取位于测试界面底部的目标控件的中心点坐标;获取测试界面底部且位于目标控件上一层的上层控件的上边界坐标;判断目标控件的中心点是否低于上层控件的上边界;若是,则确认目标控件被上层控件覆盖,并将目标控件向上滑动预定距离以脱离覆盖,反之不作调整;对调整后的测试界面上的各个控件执行测试脚本,并输出相应测试结果。
可选地,在根据本发明的自动化测试方法中,获取到的所有控件类型信息包括:TextView文本控件、EditText编辑框控件、Button按钮控件、CheckBox复选框控件、Toast提示控件、ListView列表控件及其他自动化测试控件中的至少一个。
可选地,在根据本发明的自动化测试方法中,测试脚本适于在运行过程中执行多个事件动作,其中多个事件动作包括在被测试设备的输入事件动作、点击事件动作、获取事件控件动作、滑动事件动作中的至少一个。
可选地,在根据本发明的自动化测试方法中,将目标控件向上滑动预定距离的步骤包括:将所述目标控件向上滑动到高于所述上层控件上边界的预定坐标。
可选地,在根据本发明的自动化测试方法中,还包括:将所述目标控件与上层控件封装成Uiobject对象。
根据本发明的另一个方面,提供一种自动化测试装置,适于驻留在计算设备中,该装置包括:控件获取单元,适于获取当前测试界面上的所有控件类型信息;坐标获取单元,适于获取测试界面底部的目标控件的中心点坐标,还适于获取测试界面底部且位于目标控件上一层的上层控件的上边界坐标;控制单元,适于判断所述目标控件中心点与上层控件上边界的位置关系,并在确认所述目标控件的中心点低于所述上层控件的上边界时,将所述目标控件向上滑动预定距离以脱离覆盖;以及脚本测试单元,适于对调整后的测试界面上的各个控件执行测试脚本,并输出相应测试结果。
可选地,在根据本发明的自动化测试装置中,控件类型信息包括:TextView文本控件、EditText编辑框控件、Button按钮控件、CheckBox复选框控件、Toast提示控件、ListView列表控件及其他自动化测试控件中的至少一个。
可选地,在根据本发明的自动化测试装置中,测试脚本适于在运行过程中执行多个事件动作,其中多个事件动作包括在被测试设备的输入事件动作、点击事件动作、获取事件控件动作、滑动事件动作中的至少一个。
可选地,在根据本发明的自动化测试装置中,控制单元适于将目标控件向上滑动到高于所述上层控件上边界的预定坐标。
可选地,在根据本发明的自动化测试装置中,还包括对象封装单元,适于将目标控件与上层控件封装成Uiobject对象。
根据本发明的又一个方面,提供一种计算设备,包括如上的自动化测试装置。
根据本发明提供的技术方案,在测试界面划分出可被操作区域(即无重叠区域),当所要操作的控件处于界面底端并被上一层控件覆盖时,则自动将该控件上移至可操作区域后再进行下一步的自动化测试操作,从而避免了无法对该控件进行操作的情况发生,并保证了最终测试结果与测试报告的准确性。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个实施例的计算设备100的示意图;
图2示出了根据本发明一个实施例的自动化测试方法200的流程图;
图3示出了根据本发明一个实施例的自动化测试装置300的结构图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明的自动化测试装置驻留在计算设备中,图1布置为实现根据本发明的自动化测试装置的示例计算设备100的框图。在基本的配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。
取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器((μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。
取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上利用程序数据124进行操作。
计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备100可以实现为小尺寸便携(或者移动)电子设备的一部分。计算设备100还可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。在一些实施例中,计算设备100被配置为执行根据本发明的自动化测试方法200,其中应用122包括根据本发明的自动化测试装置300。
现有的自动化测试中,尤其是在uiautomator测试框架下,对控件的操作实质上是对坐标的操作。以点击控件为例,在封装UiObject.click()方法时,实质上是先获取UiObject的中心点(x=UiObject.getBounds().centerX();y=UiObject.getBounds().centerY()),然后再点击该x,y坐标(clickOnScreen(x,y)),进入相应的界面后,再进行后续的测试操作。但在该测试方法中,容易出现待测试的目标控件在测试界面底部被上一层控件所覆盖的情况,此时若无“补救措施”,则该控件将无法被实际点击到,导致无法进入下一操作界面,输出stack=com.android.uiautomator.core.UiObjectNotFoundException:UiSelector[RESOURCE_ID_REGEX]的错误信息,从而对测试结果产生错误的判断,输出不准确的测试报告。而本发明提供的自动化测试方法,在进行测试操作之前,先判断目标控件是否被上层控件覆盖,若确定被覆盖,则将目标控件向界面中心区域(可操作区域)移动后,再进行相应的自动化测试,从而保证了测试结果及测试报告的准确性。
图2示出了根据本发明一个实施例的自动化测试方法200的流程图。如图2所示,该方法始于步骤S210。在步骤S210中,获取当前测试界面上的所有控件类型信息。
Android系统中常见的控件类型有:TextView文本控件,是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域;EditText编辑框控件,和TextView功能类似,但提供了可编辑的文本框;Button按钮控件,如常见的的“取消”、“确定”等Button按钮控件;CheckBox复选框控件,用于显示当前对象处于可勾选或取消勾选状态;Toast提示控件,用于对上一操作产生的效果进行合理的文本提示,如删除某文件后出现的“删除成功”提示控件;ListView列表控件,用于显示一个列表的控件,如显示当前所有歌曲的ListView音乐列表。除此之外,在基于安卓系统的开发与测试中,还有很多常见的其他控件。
在步骤S210中所获取到的控件类型信息,包括如上所述的TextView文本控件、EditText编辑框控件、Button按钮控件、CheckBox复选框控件、Toast提示控件、ListView列表控件及其他自动化测试控件中的至少一个。控件信息的获取可以通过uiautomatorviewer.bat工具、HierachyView+Monkey方式、accessibilityservice以及其他常见的自动化测试工具获取,本发明对此不做限制。
随后,在步骤S220中,获取位于测试界面底部的目标控件的中心点坐标,以及在步骤S230中,获取测试界面底部且位于目标控件上一层的上层控件的上边界坐标。具体地,目标控件中心点的纵坐标可以通过y0=UiObject0.getBounds().centerY())方法获取,上层控件上边界的纵坐标可以通过y1=UiObject1.getBounds().top方法获取。此外,还可以先把目标控件和上层控件封装为对象,再通过测试工具进行坐标获取,本发明对这两个坐标的具体获取方法不作限定。
随后,在步骤S240中,判断目标控件的中心点是否低于上层控件的上边界,若是,则确认该目标控件被上层控件所覆盖。随后,在步骤S250中将目标控件向上滑动预定距离以脱离覆盖,反之不作调整。
在安卓开发中,通常认为屏幕的左上角为坐标系统原点,原点向右延伸为X轴正方向,向下延伸为Y轴正方向。应用到本发明中的控件坐标系统中,当目标控件中心点的纵坐标值y0大于上层控件上边界的纵坐标值y1时,即目标控件的中心点低于上层控件的上边界,则表示目标控件被上层控件所覆盖,此时可以通过UiObject0.dragTo(destX,destY,steps)方法将目标控件稍微向上滑动一定距离,其中destX、destY表示拖动控件到指定的坐标,steps表示完成的步数。应当注意的是,本发明可以自动根据不同的位置情况,自动调整向上滑动的预定距离,通常是将目标控件向上滑动到略高于上层控件上边界的某一坐标位置。
比如,对于目标控件为Filemanager文件夹的Textview控件,其中心点的纵坐标为1700,而位于其上一层的线性布局控件的上边界坐标为1719,此时目标控件的中心点低于上层控件的上边界,说明目标控件被上层控件所覆盖,则根据本发明的自动化测试方法,可以将目标控件向上滑动到略高于1719的某一坐标位置。以上述安卓操作系统的坐标考虑,即将目标控件向上滑动到坐标值为1718、1716、1714等坐标位置处,本发明对其具体数值不作具体限制。显然,通过对目标控件进行位置调整,保证了目标控件自动化测试的准确性。
随后,在步骤S260中,对调整后的测试界面上的各个控件执行自动化测试脚本,并输出相应的测试报告。当然,若在步骤S240中判断目标控件未被覆盖,则直接对测试界面中的控件执行测试脚本。其中,测试脚本适于在运行过程中执行多个事件动作,其中多个事件动作包括在被测试设备的输入事件动作、点击事件动作、获取事件控件动作、滑动事件动作中的至少一个。例如,测试在电话薄添加联系人的操作,自动输入要添加的联系人的名称,并点击添加联系人按钮,保存联系人,滑动查看联系人文本框中的内容。
此外,根据本发明的一个实施例,还可以解决目标控件在顶部被覆盖后导致测试不准确的问题,具体的实现方法类似如上所述的测试方法200。具体地,先获取目标控件的中心点坐标和上层控件的下边界坐标,并判断这两个坐标的位置关系。若目标控件的中心点位于上层控件的下边界以上的位置,即中心点坐标小于下边界坐标,则确认目标控件被上层控件覆盖,并将目标控件向下滑动一定距离以脱离覆盖,反之不作调整。其中,向下滑动的距离设定为滑动到略低于上层控件下边界的某一位置。之后,再对该测试界面上的所有控件执行自动化测试脚本。
同样,若目标控件在界面中部被上层控件覆盖,同样可以通过对比两者的位置坐标而将目标控件的位置进行适当调整,此时可以根据目标控件的中心点与上层控件上下边界的位置关系,选择不同的滑动方向以脱离覆盖。
图3示出了根据本发明一个实施例的自动化测试装置300的结构图。如图3所示,该装置包括控件获取单元310、坐标获取单元320、控制单元330以及脚本测试单元340。
控件获取单元310适于获取当前测试界面上的所有控件类型信息,其中的控件类型信息包括TextView文本控件、EditText编辑框控件、Button按钮控件、CheckBox复选框控件、Toast提示控件、ListView列表控件及其他自动化测试控件中的至少一个。
坐标获取单元320适于获取测试界面底部的目标控件的中心点坐标,以及获取测试界面底部且位于目标控件上一层的上层控件的上边界坐标。具体地,坐标获取单元320可以通过y0=UiObject0.getBounds().centerY())方法获取目标控件的中心点坐标,通过y1=UiObject1.getBounds().top方法获取上层控件的上边界坐标。此外,坐标获取单元320还可以先把目标控件和上层控件封装为对象,再通过测试工具进行坐标获取,本发明对这两个坐标的获取方法不作限定。
控制单元330适于适于判断所述目标控件中心点与上层控件上边界的位置关系,并在确认所述目标控件的中心点低于所述上层控件的上边界时,将所述目标控件向上滑动预定距离以脱离覆盖。具体地,可以通过UiObject0.dragTo(destX,destY,steps)方法将目标控件稍微向上滑动一定距离,其中destX、destY表示拖动控件到指定的坐标,steps表示完成的步数。此外,本方法可以根据不同的位置情况,自动调整向上滑动的预定距离,通常是将目标控件向上滑动到略高于上层控件上边界的某一坐标位置。
脚本测试单元340适于对调整后的测试界面上的各个控件执行测试脚本,并输出相应测试结果。当然,若测试界面中未出现目标控件被覆盖的情况,则直接对该界面中的各个控件执行测试脚本。
此外,根据本发明的一个实施例,该自动化测试装置也可以将测试界面顶部被覆盖的目标控件向下移动,此时坐标获取单元320适于获取界面顶部的目标控件的中心点坐标,以及界面顶部且位于目标控件上一层的上层控件的下边界坐标。控制单元330则判断目标控件中心点和上层控件下边界的位置关系,若中心点的位置高于下边界,则自动的将目标控件向下滑动一定距离。
根据本发明的自动化测试装置,其具体细节已在图2中的自动化测试方法中详细公开,在此不再赘述。
根据本发明提供的技术方案,通过判断目标控件和上层控件的位置关系,在确认目标控件被上层控件覆盖时,将其向测试界面的中部滑动,再对测试界面中的控件执行下一步的自动化测试脚本。而且,滑动距离的适应性设定,既保证了被覆盖的目标控件脱离上层控件的覆盖,又不会影响其他控件的测试结果,从而避免了无法对该控件准确测试的情况发生,并保证了最终测试结果与测试报告的准确性。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。