具体实施方式
下面结合附图,对本发明的实施例进行描述。
本申请实施例提供的应用程序的测试方法及装置适用于对包括多个页面的应用程序进行测试的场景。上述页面可以包括多个页面元素,其中,每个页面元素可以与页面的文件对象模型(Document Object Model,DOM)树中的节点相对应。本申请中,可以将与DOM树中的叶子节点相对应的页面元素称为目标页面元素,当页面中有效的目标页面元素被触发时,可以使该页面发生改变或者可以跳转至其它页面。需要说明的是,本申请中的目标页面元素是指有效的页面元素,其触发方式可以包括:测试脚本触发,或者用户点击页面中与目标页面元素相对应的内容触发,其中,页面中与目标页面元素相对应的内容可以为图片控件、音频控件以及文本控件等,其可以采用可扩展标记语言(Extensible MarkupLanguage,XML)格式文档表示。
图1为本申请一种实施例提供的应用程序的测试方法流程图。所述方法的执行主体可以为具有处理能力的设备:服务器或者系统或者装置,如测试脚本,如图1所示,所述方法具体可以包括:
步骤110,从应用程序的至少一个页面中选取第一页面。
本申请的应用程序可以包括至少一个页面,其中,第一页面可以为至少一个页面中的任一页面,如,可以为首页页面,也可以为其它页面。
步骤120,对第一页面进行测试。
需要说明的是,本申请中,对应用程序进行测试,就是对应用程序的各个页面一一进行测试。
其中,对第一页面进行测试的步骤包括:
1201,确定第一页面相关联的第一目标页面。
此处,第一目标页面可以是指第一页面发生改变后的页面,也可以是指跳转至的其它页面。
可选地,在执行步骤1201之前,本申请的实施例还可以包括如下步骤:
步骤A,获取第一页面对应的页面元素集合。
在一个例子中,可以通过谷歌(Google)公司的uiautomatorviewer工具来获取页面元素集合中的页面元素。
其中,上述页面元素集合中可以包括至少一个页面元素,此处的页面元素可以是指第一页面对应的源代码中由XML标签标识的代码,或者包含在两个相对应的XML标签中的代码等。在一个例子中,XML标签标识的代码可以举例为:<merge aaaaaa>,此处的“merge”即为XML标签;包含在两个相对应的xml标签中的代码可以举例为:
<merge aaaaaa>
<bbbbbbbbbbb>
</merge>
上述“<merge>”和“</merge>”即为两个相对应的XML标签,而“<bbbbbbbbbbb>”即为包含在两个相对应的XML标签中的代码。
当然,在实际应用中,页面元素也可以不限于如上两种形式,其还可以为其它的形式,只需其在第一页面中对应的内容为XML格式的文档,如:图片控件、音频控件以及文本控件等即可,本申请对此不作限定。
步骤B,从页面元素集合中选取至少一个目标页面元素。
在一种实现方式中,可以结合第一页面对应的DOM树来选取目标页面元素,此处的DOM树由至少一个节点构成,其中,节点的类型可以包括:根节点、分支节点以及叶子节点等。该DOM树的节点与页面元素集合中的页面元素一一对应,具体过程可以为:从DOM树的节点中选取至少一个叶子节点,将选取的至少一个叶子节点对应的页面元素作为至少一个目标页面元素。
在还执行上述步骤A-步骤B的情况下,确定第一页面相关联的第一目标页面的过程可以为:从至少一个目标页面元素中选取第一目标页面元素,将该第一目标页面元素对应的页面作为第一目标页面。此处,第一目标页面元素对应的页面可以是指:在第一目标页面元素被触发时,第一页面发生改变后的页面或者跳转至的其它页面。在一个例子中,当用户点击第一页面中与第一目标页面元素相对应的内容(如,上述图片控件、音频控件以及文本控件等)时,该第一目标页面元素被触发,当然也可能是由测试脚本触发。
当然,在实际应用中,在执行步骤1201之前,还可以先判断第一页面是否已经发生了跳转,若未发生跳转,则确定第一页面相关联的第一目标页面;若已经发生了跳转,则确定跳转后的新的页面,并根据对第一页面进行测试的步骤,对新的页面进行测试,在对新的页面测试完成后,再确定第一页面相关联的第一目标页面。
步骤1202,计算第一页面与第一目标页面的相似度值。
此处,可以是根据预设的算法,来计算第一页面与第一目标页面的相似度值。如,根据汉明距离算法等,来计算第一页面与第一目标页面的相似度值。其中,页面之间相似度值的计算属于传统常规技术,在此不复赘述。
步骤1203,根据相似度值,确定是否中断对第一页面进行测试的步骤。
具体地,可以判断相似度值是否在预设的范围内,若相似度值在预设的范围内,则不中断对第一页面进行测试的步骤;若相似度值不在预设的范围内,则中断对第一页面进行测试的步骤。
在一个例子中,预设的范围可以设定为:[80%,100%],因为相似度值最大可以为100%,所以当相似度值不在预设的范围内,则该相似度值<80%。而容易理解的是,两个页面的相似度值越大,则该两个页面越相似;而两个页面的相似度值越小,则两个页面差别越大。结合实际可知,若两个页面差别比较大时,也即页面变化比较大时,有可能会出现页面发生改变或者跳转之后,无法返回至之前的页面的情况,由此就有可能会导致无法对应用程序的所有页面进行测试的问题,所以本申请对该种情况进行了识别。当然,在实际应用中,上述预设的范围的下限值80%也可以设定为其它值,如,75%等,本申请对此不作限定。
本申请中,页面变化可以是指页面布局的变化,如,XML标签的变化。
步骤1204,若否,则继续对第一页面进行测试的步骤。
此处,继续对第一页面进行测试的步骤是指继续执行上述步骤1201-步骤1203,也即重新确定与第一页面相关联的第二目标页面,此处的第二目标页面与上述第一目标页面的定义相同,即为与页面元素集合中的第二目标页面元素相对应的页面。并计算第一页面与第二目标页面的相似度值,之后根据相似度值来确定是否中断对第一页面进行测试的步骤;依次类推,直至中断对第一页面进行测试的步骤或者计算完成第一页面与所有相关联的目标页面的相似度值(也即计算完成第一页面与页面元素集合中所有的目标页面元素对应的页面的相似度值)。
步骤1205,若是,则中断对第一页面进行测试的步骤,并在对至少一个页面中的其它页面测试完成后,继续对第一页面进行测试。
即当确定相似度值不在预设的范围内,则中断对第一页面进行测试的步骤。
需要说明的是,在中断对第一页面进行测试之后,可以将第一目标页面元素标记为有效元素,由此来缩减后续测试耗时。此外,还可以执行压栈的操作,以达到保留现场的作用。之后,在对至少一个页面中的其它页面测试完成之后,可以通过出栈操作,来恢复现场,从而可以继续对第一页面进行测试,由此来达到对应用程序的所有页面进行测试的目的。
还需要说明的是,在恢复现场之后,继续对第一页面进行测试的过程可以为:确定第一页面相关联的其它目标页面,此处的其它目标页面与上述第一、二目标页面的定义相同,即为与页面元素集合中另外的目标页面元素相对应的页面。并计算第一页面与其它目标页面的相似度值,若相似度值在预设的范围内,则继续执行上述步骤;而若相似度值不在预设的范围内,则将目标页面相对应的目标页面元素记录为有效元素;直至计算完成第一页面与所有相关联的目标页面的相似度值。也即在恢复现场之后,不再中断对第一页面的测试过程,而只需记录相应的有效元素即可。
步骤130,根据对第一页面进行测试的步骤,对其它页面进行测试。
可以理解的是,上述第一页面为应用程序的任一页面,其并没有特殊性,因此,在对其它页面进行测试的过程中,也可能会出现测试中断的情况,当其它页面的测试过程被中断时,也会执行压栈的操作,之后再通过恢复现场,来继续对其它页面进行测试。此处,因为栈有后进先出的特点,因此,最先执行的压栈操作,往往最后被恢复。举例来说,假设应用程序有5个页面,分别为:页面1、页面2、页面3、页面4以及页面5,且在对该5个页面依次进行测试时,测试页面1和页面3的过程先后发生了中断,则在之后恢复现场时,先恢复对页面3的测试过程,之后再恢复对页面1的测试过程。
综上,本申请在对应用程序进行测试的过程中,会对页面发生改变之后或者跳转之后,页面的变化情况进行识别,具体地,在对某个页面测试的过程中,当识别到页面发生改变之后或者跳转之后,页面变化比较大时,则中断对该页面的测试,而是执行相应的压栈操作。之后在对应用程序的其它页面测试完成之后,通过出栈操作,来恢复现场的方式,来继续对中断的页面进行测试,由此来达到对应用程序的所有页面进行测试的目的,从而提高了应用程序测试的准确性。
为了更清楚的说明本申请的应用程序的测试方法,以下将通过图2来进行进一步的说明。
图2为本申请另一实施例提供的应用程序的测试方法,如图2所示,所述方法具体可以包括如下步骤:
步骤210,从应用程序的至少一个页面中选取第一页面。
其中,第一页面可以为至少一个页面中的任一页面,如,可以为首页页面,也可以为其它页面。
步骤220,获取第一页面对应的页面元素集合。
在一个例子中,可以通过谷歌(Google)公司的uiautomatorviewer工具来获取页面元素集合中的页面元素。
步骤230,从页面元素集合中选取至少一个目标页面元素。
在一种实现方式中,可以结合第一页面对应的DOM树来选取目标页面元素,此处的DOM树由至少一个节点构成,其中,节点的类型可以包括:根节点、分支节点以及叶子节点等。该DOM树的节点与页面元素集合中的页面元素一一对应,具体过程可以为:从DOM树的节点中选取至少一个叶子节点,将选取的至少一个叶子节点对应的页面元素作为至少一个目标页面元素。
步骤240,判断第一页面是否已经发生了跳转,若已经发生了跳转,则跳转到步骤220;若未发生跳转,则跳转到步骤250。
上述判断第一页面是否已经发生了跳转的过程可以为:判断是否进入新的Activity。
可以理解的是,在跳转到步骤220之前,可以先确定跳转到的新的页面。之后在执行步骤220时,步骤220变更为:获取新的页面对应的页面元素集合。
步骤250,从至少一个目标页面元素中选取第一目标页面元素。
步骤260,点击该第一目标页面元素。
此处,当点击该第一目标页面元素之后,就可以确定与该第一目标页面元素对应的第一目标页面。此处的第一目标页面可以是指第一页面发生改变后的页面,也可以是指跳转至的其它页面。
步骤270,计算第一页面与第一目标页面的相似度值。
此处,可以是根据汉明距离算法等,来计算第一页面与第一目标页面的相似度值。
步骤280,判断相似度值是否为100%,若是,则跳转到步骤290,否则跳转到步骤2110。
可以理解的是,当第一页面与第一目标页面的相似度值为100%时,说明第一页面基本上没有发生改变,也即能返回至第一页面,因此可以不中断第一页面的测试过程。
步骤290,判断至少一个目标页面元素是否全部点击完成,若是,则跳转到步骤2100;否则跳转到步骤250。
此处,至少一个目标页面元素全部点击完成可以理解为第一页面的测试过程结束。
步骤2100,判断栈中是否还有迭代没有完成,若是,则返回上一层迭代,并跳转到步骤250;否则结束。
此处,栈中的迭代可以是在中断对某个页面的测试时压入的,返回上一层迭代是为了继续对中断的页面进行测试。
步骤2110,判断相似度值是否小于80%,若是,则跳转到步骤210;否则,跳转到步骤290。
此处,在相似度值小于80%时,跳转到步骤210,是因为如果第一页面与第一目标页面的相似度值小于80%,则说明第一页面的页面变化比较大,有可能会导致不能返回至第一页面的情况,所以需要中断对第一页面的测试,而开始对应用程序的其它页面进行测试。在对其它页面测试完成后,在继续对第一页面进行测试。因此,在跳转到步骤210之后,步骤210变更为:从应用程序的至少一个页面中选取其它页面。
可以理解的是,在跳转至步骤210之前,可以先执行压栈的操作,以便于后续恢复现场。
与上述应用程序的测试方法对应地,本申请实施例还提供的一种应用程序的测试装置,如图3所示,该装置包括:
选取单元301,用于从应用程序的至少一个页面中选取第一页面。
测试单元302,用于对选取单元301选取的第一页面进行测试,其中,测试单元302包括:
确定单元3021,用于确定第一页面相关联的第一目标页面。
计算单元3022,用于计算第一页面与确定单元3021确定的第一目标页面的相似度值。
确定单元3021,还用于根据计算单元3022计算的相似度值,确定是否中断对第一页面进行测试的步骤。
处理单元3023,用于中断对第一页面进行测试的步骤,并在对至少一个页面中的其它页面测试完成后,继续对第一页面进行测试。
测试单元302,还用于根据对第一页面进行测试的步骤,对其它页面进行测试。
可选地,该装置还可以包括:
获取单元303,用于获取第一页面对应的页面元素集合。
选取单元301,还用于从获取单元303获取的页面元素集合中选取至少一个目标页面元素。
选取单元301具体可以用于:
获取第一页面对应的文件对象模型DOM树,其中,DOM树的节点与页面元素集合中的页面元素一一对应;
从DOM树的节点中选取至少一个叶子节点,将至少一个叶子节点对应的页面元素作为至少一个目标页面元素。
确定单元3021具体可以用于:
从至少一个目标页面元素中选取第一目标页面元素,将第一目标页面元素对应的页面作为第一目标页面。
可选地,确定单元3021还可以具体用于:
判断相似度值是否在预设的范围内;
若相似度值不在预设的范围内,则中断对第一页面进行测试的步骤;
若相似度值在预设的范围内,则不中断对第一页面进行测试的步骤。
可选地,确定单元3021还可以具体用于:
判断第一页面是否已经发生了跳转;
若未发生跳转,则确定第一页面相关联的第一目标页面;
若已经发生了跳转,则确定跳转后的新的页面;
根据对第一页面进行测试的步骤,对新的页面进行测试,在对新的页面测试完成后,确定第一页面相关联的第一目标页面。
本申请实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本申请提供的装置的具体工作过程,在此不复赘述。
本申请提供的应用程序的测试装置,选取单元301从应用程序的至少一个页面中选取第一页面。测试单元302对第一页面进行测试:确定单元3021,确定第一页面相关联的第一目标页面。计算单元3022计算第一页面与第一目标页面的相似度值。确定单元3021根据相似度值,确定是否中断对第一页面进行测试的步骤。处理单元3023中断对第一页面进行测试的步骤,并在对至少一个页面中的其它页面测试完成后,继续对第一页面进行测试。测试单元302根据对第一页面进行测试的步骤,对其它页面进行测试。由此,可以提高应用程序测试的准确性。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。