CN112783764A - 应用程序的自动化测试方法及装置、存储介质、终端 - Google Patents
应用程序的自动化测试方法及装置、存储介质、终端 Download PDFInfo
- Publication number
- CN112783764A CN112783764A CN202110027999.9A CN202110027999A CN112783764A CN 112783764 A CN112783764 A CN 112783764A CN 202110027999 A CN202110027999 A CN 202110027999A CN 112783764 A CN112783764 A CN 112783764A
- Authority
- CN
- China
- Prior art keywords
- interface
- current interface
- application program
- elements
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种应用程序的自动化测试方法及装置、存储介质、终端,所述方法包括:A.根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;B.选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;C.基于本次探索跳转得到的目标界面更新界面有向网络图,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息。通过本发明方案能够兼顾对应用程序进行自动化探索遍历时的广度和深度,极大地提高应用程序自动化测试的覆盖率。
Description
技术领域
本发明涉及应用程序测试技术领域,具体地涉及一种应用程序的自动化测试方法及装置、存储介质、终端。
背景技术
为评价一款应用程序(Application,简称APP)的性能,需要对应用程序在终端上的运行情况进行测试。传统的自动化测试一般都是由测试人员人工编写测试用例来进行的。但是,要想对某个应用程序的所有操作覆盖完全,光靠人工编写测试用例是很难做到的。这就导致现有人工编写测试用例来进行应用程序自动化测试的方式维护成本非常高。
探索测试可以从深度和广度对应用程序进行遍历测试,且无需编写测试用例。并且,在测试遇到问题时还能调整测试策略。
现有通常采用的探索测试方法为猴子(Monkey)测试,这种测试方法可以针对一个或多个应用程序进行随机性的操作测试。具体而言,猴子测试的原理是模拟用户触摸屏幕、滑动、按键等操作来对安卓设备上的应用程序进行压力测试。但是,猴子测试只能测一些稳定性的问题,其测试的广度和深度都不够,存在测试覆盖率不高、无法检测界面异常等缺陷。
发明内容
本发明解决的技术问题是如何提高应用程序自动化测试的覆盖率。
为解决上述技术问题,本发明实施例提供一种应用程序的自动化测试方法,包括:A.根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;B.选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;C.基于本次探索跳转得到的目标界面更新界面有向网络图,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息。
可选的,所述自动化测试方法还包括:将所述目标界面确定为所述当前界面并重复执行步骤A至步骤C,直至所述应用程序的所有界面的所有测试项均探索完成。
可选的,所述根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识包括:至少根据所述当前界面的层次结构文件,确定所述元素和布局的唯一标识;根据所述元素和布局的唯一标识以及所述当前界面对应的活动,生成所述当前界面的界面唯一标识。
可选的,所述至少根据所述当前界面的层次结构文件,确定所述元素和布局的唯一标识包括:解析所述层次结构文件以得到所述当前界面中元素和布局的属性信息;将所述属性信息组合得到所述元素和布局的唯一标识。
可选的,所述至少根据所述当前界面的层次结构文件,确定所述元素和布局的唯一标识还包括:获取所述当前界面的界面快照;当所述元素为图标时,根据所述元素在当前界面上的区域范围从所述界面快照中截取得到所述元素对应的图标;将所述属性信息和所述图标组合得到所述元素和布局的唯一标识。
可选的,所述属性信息包括以下任一项或任多项:元素的类型;元素在所述层次结构文件中的标识;元素在所述层次结构文件中的层级;布局在所述层次结构文件中的标识;文本元素的文本信息;文本元素的子元素的文本组合。
可选的,在根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识之后,所述自动化测试方法还包括:根据所述当前界面的层次结构文件判断所述当前界面是否属于所述应用程序;如果判断结果为所述当前界面属于所述应用程序,则选择所述当前界面上未探索过的测试项进行探索。
可选的,在根据所述当前界面的层次结构文件判断所述当前界面是否属于所述应用程序之后,所述自动化测试方法还包括:如果判断结果为所述当前界面不属于所述应用程序,则直接根据所述当前界面更新所述界面有向网络图,并重启所述应用程序以重新获得所述当前界面。
可选的,所述操作信息包括:测试项;操作的奖励;界面跳转等待时间。
可选的,当所述目标界面不属于所述应用程序时,所述操作的奖励为-1;当所述目标界面与当前界面的界面唯一标识相同时,所述操作的奖励为0;当所述目标界面为所述应用程序的其他界面时,所述操作的奖励为1。
可选的,所述自动化测试方法还包括:如果所述当前界面上的所有测试项均探索完成,则将所述应用程序的未探索完成的界面确定为当前界面并重复执行步骤A至步骤C。
为解决上述技术问题,本发明实施例还提供一种应用程序的自动化测试装置,包括:生成模块,用于根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;选择并探索模块,用于选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;更新模块,用于基于本次探索跳转得到的目标界面更新界面有向网络图,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息。
为解决上述技术问题,本发明实施例还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述方法的步骤。
为解决上述技术问题,本发明实施例还提供一种终端,包括应用程序的自动化测试装置,或者包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行上述方法的步骤。
与现有技术相比,本发明实施例的技术方案具有以下有益效果:
本发明实施例提供一种应用程序的自动化测试方法,包括:A.根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;B.选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;C.基于本次探索跳转得到的目标界面更新界面有向网络图,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息。
较之现有的猴子测试是随机地触发对应用程序的某个界面进行某种操作,本实施方案能够兼顾对应用程序进行自动化探索遍历时的广度和深度,极大地提高应用程序自动化测试的覆盖率。具体而言,以界面唯一标识来区分应用程序的不同界面,界面上的元素、布局和对应的活动(activity)中的任一个发生变化即认为是不同的界面。通过标识应用程序的界面,能够在探索时记录各界面的探索结果,以便区分各界面上已经探索的测试项和未探索过的测试项。在此基础上,以基于界面唯一标识表征的界面为单位,对应用程序进行自动化探索遍历,且每次探索的是当前界面上未探索过的测试项,使得对应用程序的自动化探索遍历不再是完全随机的,利于兼顾测试的广度和深度。进一步,通过形成界面有向网络图来记录自动化探索遍历结果,以记录应用程序各界面之间的有向路径,能够辅助测试和研发快速定位和复现问题出现的场景。
进一步,将所述目标界面确定为所述当前界面并重复执行步骤A至步骤C,直至所述应用程序的所有界面的所有测试项均探索完成。由此,基本能探索测试应用程序的所有界面,以及各界面上所有的可操作元素和布局。
进一步,采用本实施方案,除了能支持稳定性测试目的外,还能兼顾覆盖率和通用性的遍历测试、检测各类界面的和应用程序异常问题。本实施方案能够提升应用程序自动化测试的覆盖率,大大节省了测试投入和维护成本。
进一步,本实施方案所述自动化探索遍历测试无需编写测试脚本,并支持跨平台/跨版本/跨应用程序测试。
进一步,本实施方案所述自动化探索遍历测试还能检测应用程序版本演进过程中的界面上变化的差异,从中分析新版本可能引入的问题。
附图说明
图1是本发明实施例一种应用程序的自动化测试方法的流程图;
图2是本发明实施例一个典型应用场景的自动化测试进程示意图;
图3是本发明实施例一种应用程序的自动化测试装置的结构示意图。
具体实施方式
如背景技术所言,现有应用程序的自动化测试方法在测试深度和广度上均有不足。
为解决上述技术问题,本发明实施例提供一种应用程序的自动化测试方法,包括:A.根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;B.选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;C.基于本次探索跳转得到的目标界面更新界面有向网络图,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息。
本实施方案能够兼顾对应用程序进行自动化探索遍历时的广度和深度,极大地提高应用程序自动化测试的覆盖率。具体而言,以界面唯一标识来区分应用程序的不同界面,界面上的元素、布局和对应的活动(activity)中的任一个发生变化即认为是不同的界面。
通过标识应用程序的界面,能够在探索时记录各界面的探索结果,以便区分各界面上已经探索的测试项和未探索过的测试项。在此基础上,以基于界面唯一标识表征的界面为单位,对应用程序进行自动化探索遍历,且每次探索的是当前界面上未探索过的测试项,使得对应用程序的自动化探索遍历不再是完全随机的,利于兼顾测试的广度和深度。
进一步,通过形成界面有向网络图来记录自动化探索遍历结果,以记录应用程序各界面之间的有向路径,能够辅助测试和研发快速定位和复现问题出现的场景。
在本实施方案中,“自动化探索遍历”是指对应用程序进行深度以及广度上的遍历探索。其方法可以通过adb命令获取层次结构文件(hierarchy xml)以及界面快照,然后获取界面中的可操作元素、布局和可操作元素对应的图标,最后针对这些可操作元素和布局进行点击(click)、长按(long-click)、滑动(swipe)、滚动条(scroll)等操作,并通过一些算法和策略确保自动化探索遍历到应用程序的所有界面。其中,滑动操作包括上下左右四个方向,滚动条操作根据滚动条分为左右或上下滚动。针对应用程序的单个界面上的元素,主要执行点击和长按操作;针对界面上的布局,主要执行滑动和滚动条操作。
在本实施方案中,被执行自动化测试的应用程序可以是智能终端中的应用程序。所述智能终端可以为智能手机、IPAD、智能手环等。
在本实施方案中“深度遍历”是指尽可能地探索应用程序的更多界面。
在本实施方案中“广度遍历”是指探索应用程序的某个界面时,尽可能对该界面中所有的可操作元素和布局进行操作。
在本实施方案中,“子元素的text组合”是指某些元素或布局包含多个子元素,但子元素是不可操作的,则在确定界面唯一标识时用最底层的子元素的标识表征父节点的区域。例如,界面中某个按钮包含图标和文字描述,图标和文字描述在层次结构文件(hierarchy xml)中是两个元素,而可操作的元素是包含这两个元素的父元素,则该界面对应的界面唯一标识中用图标和文字的标识作为该按钮的标识。其中,所述层次结构文件用于记录应用程序中各个元素的属性和位置,所述层次结构文件包括层次排布的节点。一个节点代表一个元素,这里的元素包括布局元素和可操作元素。
在本实施方案中,“可操作元素或布局”是指根据层次结构文件中元素的对用户可见“visible-to-user”,可滚动“scrollable”,可点击“clickable”,可长按“long-clickable”等属性确定该元素是否可操作;布局是指一组元素所在的区域,通常以横轴进行划分布局即把整个界面以行为单位进行拆分。布局也有属性,如某个布局的滚动属性记录为真(true)则表示该布局可以做滑动操作,又如不带滚动条的布局只做点击操作不做滑动操作。在实际应用中,层次结构文件中对元素和布局的属性描述不是绝对的,因而在本实施方案中,层次结构文件中各元素和布局的属性是真(true)还是假(false)的描述仅供参考,本实施方案在探索时会对所有可操作元素尝试所有可操作类型。在本实施方案中,对用户可见属性描述为真的元素均确定为可操作元素。
在本实施方案中,“活动(activity)”是安卓(Android)组件中最基本也是最为常见用的四大组件之一。用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。每个活动都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。一个应用通常由多个彼此松散联系的活动组成。一般会指定应用中的某个活动为“主”活动,即首次启动应用时呈现给用户的那个活动。而且每个活动均可启动另一个活动,以便执行不同的操作。每次新活动启动时,前一活动便会停止,但系统会在堆栈(“返回栈”)中保留该活动。当新活动启动时,系统会将其推送到返回栈上,并取得用户焦点。返回栈遵循基本的“后进先出”堆栈机制,因此,当用户完成当前活动并按“返回”按钮时,系统会从堆栈中将其弹出(并销毁),然后恢复前一活动。
为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
图1是本发明实施例一种应用程序的自动化测试方法的流程图。
本实施方案可以由安装有所述应用程序的智能终端执行,以对安装的所述应用程序进行自动化测试。所述智能终端可以是专门进行程序测试的测试机,也可以是面向市场销售的商用机。
具体地,参考图1,本实施例所述应用程序的自动化测试方法可以包括如下步骤:
在101处,执行步骤A,根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;
在102处,执行步骤B,选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;
在103处,执行步骤C,基于本次探索跳转得到的目标界面更新界面有向网络图,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息。
进一步,所述界面唯一标识可以根据界面上可操作元素和布局的唯一标识以及界面对应的活动组合而成。
在一个具体实施中,所述步骤A可以进一步包括步骤:至少根据所述当前界面的层次结构文件,确定所述元素和布局的唯一标识;根据所述元素和布局的唯一标识以及所述当前界面对应的活动,生成所述当前界面的界面唯一标识。
具体地,可以通过adb命令获取所述当前界面的层次结构文件和界面快照。进一步,可以通过相应命令获取当前界面对应的活动。
进一步,解析所述层次结构文件以得到所述当前界面中元素和布局的属性信息;将所述属性信息组合得到所述元素和布局的唯一标识。例如,可以优选地根据层次结构文件中的节点(node)属性以及相应的组合策略确定当前界面中的可操作元素,并获取确定的可操作元素的属性信息和布局的属性信息。例如,布局的宽度以智能终端的屏幕宽度为准,当存在多个宽度相同的布局时,取最底层的布局。
进一步,所述属性信息可以包括以下任一项或任多项:元素的类型(class);元素在所述层次结构文件中的标识(resource-id);元素在所述层次结构文件中的层级(level);布局在所述层次结构文件中的标识(resource-id);文本元素的文本信息(text);文本元素的子元素的文本(text)组合。
例如,元素的类型可以包括文本和图标。
例如,文本信息可以是文本的文字描述,对应层次结构文件中“content-desc=”开头的内容。
进一步,当所述元素为图标时,还可以根据所述元素在当前界面上的区域范围从所述界面快照中截取得到所述元素对应的图标。进而将所述属性信息和所述图标组合得到所述元素和布局的唯一标识。以摄像应用程序为例,基于本实施方案,闪光灯开和闪光灯关时的图标是不同的,对应的闪光灯开时的界面和闪光灯关时的界面会对应不同的界面唯一标识。
进一步,用于组合形成所述元素和布局的唯一标识的属性信息的数量和内容是可调的,以能够与应用程序的其他界面区分开为准。
在一个具体实施中,多个界面可以属于同一界面组并对应一个界面组唯一标识(group ID),所述界面组唯一标识可以是取所述多个界面各自界面唯一标识的共同内容生成的。例如,界面组唯一标识可以由元素的类型、元素或布局在层次结构文件中的标识以及元素在所述层次结构文件中的层级组合而成。
界面组可以用于解决应用程序的记忆功能导致的跳转路径计算偏差问题。具体而言,很多应用程序都有记忆功能,具体体现在应用程序界面上有些元素的图标或文字在不同场景中是可变的,但基于本实施方案这些场景下的界面可以认为是不同界面(即对应不同的界面唯一标识)。例如,拍照应用程序(camera)中的闪光灯图标有打开、关闭、自动等状态,也即闪光灯的图标是可变的。而拍照应用程序通常是具备记忆功能的,也即每次退出拍照界面前所处界面的闪光灯图标状态与重新进入拍照界面时到达界面的闪光灯图标状态保持一致。在此情况下,闪光灯处于不同状态的这些界面可以认为是一个界面组。
例如,假设当前界面的界面快照中最下方一行有3个可操作元素,且这3个可操作元素在层次结构文件中主要是以下三个节点:
resource-id="com.android.camera2:id/rounded_thumbnail_view"
resource-id="com.android.camera2:id/shutter_button"
resource-id="com.android.camera2:id/btn_mode_switch"
假设这3个元素所在布局是:
resource-id="com.android.camera2:id/bottom_bar"
基于以上可操作元素和布局可以各自对应的生成唯一标识:
android.view.View@com.android.camera2:id/rounded_thumbnail_view@11@1_0.png
android.widget.ImageView@com.android.camera2:id/shutter_button@11@2_0.png
android.widget.ImageView@com.android.camera2:id/btn_mode_switch@11@3_0.png
其中,@是各个属性之间的连接符;这3个元素的文本属性是空的,所以没有记录在内;倒数第2个属性“11”是该元素在整个节点树形结构中的层级;最后一个属性是图标的名称,该图标是从界面快照中根据元素的区域(bounds属性)截取出来的。
该界面快照所对应的活动是“com.android.camera.CameraActivity”。
最终得到的当前界面的界面唯一标识可以是一个数值,也就是上面三个字符串在数组中的下标值。其中,所述数组是指存储探索期间生成的所有界面的所有元素和布局的唯一标识的列表,所述下标值是指在列表中的排序。
或者,在得到上述字符串后,可以对字符串进行哈希算法处理或散列函数处理等操作,以得到唯一的值作为界面唯一标识。
相应的,所述界面组唯一标识可以是删除上述字符串中图标名称相关属性后组合而成的。例如,上述示例中3个界面唯一标识所述界面组的界面组唯一标识可以为下述3个字符串的组合:
android.view.View@com.android.camera2:id/rounded_thumbnail_view@11
android.widget.ImageView@com.android.camera2:id/shutter_button@11
android.widget.ImageView@com.android.camera2:id/btn_mode_switch@11
在一个具体实施中,本实施例所述自动化测试方法还可以包括步骤:将所述目标界面确定为所述当前界面并重复执行步骤A至步骤C,直至所述应用程序的所有界面的所有测试项均探索完成。由此,基本能探索测试应用程序的所有界面,以及各界面上所有的可操作元素和布局。
在一个具体实施中,在步骤A之后,本实施例所述自动化测试方法还可以包括步骤:根据所述当前界面的层次结构文件判断所述当前界面是否属于所述应用程序;如果判断结果为所述当前界面属于所述应用程序,则选择所述当前界面上未探索过的测试项进行探索。
例如,层次结构文件中的封装(package)属性用于表征当前界面所述应用程序,相应的,可以根据封装属性来判断当前界面是否属于需要测试的应用程序。
进一步,如果判断结果为所述当前界面不属于所述应用程序,则直接根据所述当前界面更新所述界面有向网络图,并重启所述应用程序以重新获得所述当前界面。
在一个具体实施中,所述操作信息可以包括:测试项;操作的奖励;界面跳转等待时间。
例如,当所述目标界面不属于所述应用程序时,所述操作的奖励为-1。例如,当所述目标界面与当前界面的界面唯一标识相同时,所述操作的奖励为0。例如,当所述目标界面为所述应用程序的其他界面时,所述操作的奖励为1。
例如,界面跳转等待时间可以指,从当前界面(称作源界面)跳转到另一界面(称作目标界面)时,需要等待多少时间才能操作所述目标界面。所述界面跳转等待时间通常是由于目标界面上存在悬浮窗、广告等导致的。
基于本实施方案,能够根据探索得到的界面形成界面有向网络图,图中各节点是应用程序的每个界面,两个节点之间的有向路径记录所述操作信息。所述操作信息可以包括被操作的元素或布局(即触发本次跳转的元素或布局)和操作类型(即触发本次跳转的操作),即测试项。所述操作信息还可以包括源界面的界面唯一标识、被操作元素或布局的唯一标识、操作的索引以及目标界面的界面唯一标识。
在一个具体实施中,本实施例所述自动化测试方法还可以包括步骤:如果所述当前界面上的所有测试项均探索完成,则将所述应用程序的未探索完成的界面确定为当前界面并重复执行步骤A至步骤C。
具体地,进入到某个界面时可以随机或指定选择某个元素或布局和某个操作,并记录下该探索过程,下次不会执行相同的探索操作。该界面的所有元素和布局的所有相关操作都遍历过一遍就表示该界面已探索完成。
在一个具体实施中,如果在当前界面探索过程中因执行某个测试项而跳转到应用程序的其他界面(称作目标界面),就开始探索该目标界面。
进一步,如果目标界面已经探索完成,则查找并跳转到应用程序的其他未探索完成的界面。
由此,基于本实施方案,能够确保广度遍历优先,然后实现深度遍历。
假设界面A有5个元素(A.E.1,…,A.E.5)和2个布局(A.L.1,A.L.2),且点击A.E.1时跳转到界面B。此时,界面有向网络图就有两个节点(节点A和节点B),且节点A向节点B的有向路径A→B是通过A.E.1+点击动作实现跳转的。
在一个典型的应用场景中,参考图2,本实施例所述应用程序的自动测试过程可以包括:
首先,执行操作s21以启动需要测试的应用程序1,并执行操作s22以获取当前进入的界面(即当前界面)的层次结构文件、界面快照和对应的活动。
然后,执行操作s23以解析所述层次结构文件和界面快照以得到当前界面的界面唯一标识。
接下来,执行操作s24以判断所述当前界面是否属于应用程序1以外的其他应用程序。
如果当前界面属于其他应用程序,则执行操作s25,以确定本次操作的奖励为-1,执行操作s26,以记录本次探索过程并更新所述应用程序1的界面有向网络图。所述界面有向网络图可以包括所述当前界面的节点以及从应用程序1的界面跳转过去的有向路径,虽然该当前界面不属于应用程序1。同时,执行操作s27,以重启应用程序1并重新自步骤s22开始执行自动化测试进程。
如果当前界面属于应用程序1,则可以进一步执行操作s28,以判断本次是否为第一次进入所述应用程序1。
如果本次是第一次进入应用程序1,则可以执行操作s29,以随机选择或指定当前界面的某个未探索过的测试项(即元素或布局+操作的组合)执行测试。将执行测试后跳转到的目标界面确定为新的当前界面进行重新自操作s22开始执行自动化测试进程。
如果本次不是第一次进入应用程序1,则可以执行操作s30,以判断应用程序1的所有界面是否都已经完成探索。
如果应用程序1的所有界面都已经完成探索,则结束本次自动化测试进程。
如果应用程序1尚有界面没有探索完成,则执行操作s31,若当前界面与前一个界面(即触发跳转至当前界面前的界面)是一样的,即两者的界面唯一标识相同,则确定本次对当前界面的操作的奖励为0;否则确定本次对当前界面的操作的奖励为1。同时,执行操作s32,以记录本次探索过程,并更新界面有向网络图。
接下来,执行操作s33,以判断当前界面是否已经探索完成。如果当前界面尚存未探索的测试项,则执行操作s29;否则,即如果当前界面已经完成探索,则执行操作s34,以跳转到应用程序1未探索完成的界面然后跳转至操作s22,并重新开始执行自动化测试进程。
本实施方案能够兼顾对应用程序进行自动化探索遍历时的广度和深度,极大地提高应用程序自动化测试的覆盖率。具体而言,以界面唯一标识来区分应用程序的不同界面,界面上的元素、布局和对应的活动(activity)中的任一个发生变化即认为是不同的界面。
通过标识应用程序的界面,能够在探索时记录各界面的探索结果,以便区分各界面上已经探索的测试项和未探索过的测试项。在此基础上,以基于界面唯一标识表征的界面为单位,对应用程序进行自动化探索遍历,且每次探索的是当前界面上未探索过的测试项,使得对应用程序的自动化探索遍历不再是完全随机的,利于兼顾测试的广度和深度。
进一步,通过形成界面有向网络图来记录自动化探索遍历结果,以记录应用程序各界面之间的有向路径,能够辅助测试和研发快速定位和复现问题出现的场景。
进一步,将所述目标界面确定为所述当前界面并重复执行步骤A至步骤C,直至所述应用程序的所有界面的所有测试项均探索完成。由此,基本能探索测试应用程序的所有界面,以及各界面上所有的可操作元素和布局。
进一步,采用本实施方案,除了能支持稳定性测试目的外,还能兼顾覆盖率和通用性的遍历测试、检测各类界面的和应用程序异常问题。本实施方案能够提升应用程序自动化测试的覆盖率,大大节省了测试投入和维护成本。
进一步,本实施方案所述自动化探索遍历测试无需编写测试脚本,并支持跨平台/跨版本/跨应用程序测试。
进一步,本实施方案所述自动化探索遍历测试还能检测应用程序版本演进过程中的界面上变化的差异,从中分析新版本可能引入的问题。
图3是本发明实施例一种应用程序的自动化测试装置的结构示意图。本领域技术人员理解,本实施例所述应用程序的自动化测试装置3可以用于实施上述图1和图2所述实施例中所述的方法技术方案。
具体地,参考图3,本实施例所述应用程序的自动化测试装置3可以包括:生成模块31,用于根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;选择并探索模块32,用于选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;更新模块33,用于基于本次探索跳转得到的目标界面更新界面有向网络图,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息。
关于所述应用程序的自动化测试装置3的工作原理、工作方式的更多内容,可以参照上述图1和图2中的相关描述,这里不再赘述。
进一步地,本发明实施例还公开一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述图1和图2所示实施例中所述的方法技术方案。优选地,所述存储介质可以包括诸如非挥发性(non-volatile)存储器或者非瞬态(non-transitory)存储器等计算机可读存储介质。所述存储介质可以包括ROM、RAM、磁盘或光盘等。
进一步地,本发明实施例还公开一种终端,包括图3所示应用程序的自动化测试装置3。
进一步地,本发明实施例还公开一种终端,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行上述图1和图2所示实施例中所述的方法技术方案。具体地,所述终端可以为安装有所述应用程序的终端设备。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (14)
1.一种应用程序的自动化测试方法,其特征在于,包括:
A.根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;
B.选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;
C.基于本次探索跳转得到的目标界面更新界面有向网络图,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息。
2.根据权利要求1所述的自动化测试方法,其特征在于,还包括:
将所述目标界面确定为所述当前界面并重复执行步骤A至步骤C,直至所述应用程序的所有界面的所有测试项均探索完成。
3.根据权利要求1所述的自动化测试方法,其特征在于,所述根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识包括:
至少根据所述当前界面的层次结构文件,确定所述元素和布局的唯一标识;
根据所述元素和布局的唯一标识以及所述当前界面对应的活动,生成所述当前界面的界面唯一标识。
4.根据权利要求3所述的自动化测试方法,其特征在于,所述至少根据所述当前界面的层次结构文件,确定所述元素和布局的唯一标识包括:
解析所述层次结构文件以得到所述当前界面中元素和布局的属性信息;
将所述属性信息组合得到所述元素和布局的唯一标识。
5.根据权利要求4所述的自动化测试方法,其特征在于,所述至少根据所述当前界面的层次结构文件,确定所述元素和布局的唯一标识还包括:
获取所述当前界面的界面快照;
当所述元素为图标时,根据所述元素在当前界面上的区域范围从所述界面快照中截取得到所述元素对应的图标;
将所述属性信息和所述图标组合得到所述元素和布局的唯一标识。
6.根据权利要求4或5所述的自动化测试方法,其特征在于,所述属性信息包括以下任一项或任多项:元素的类型;元素在所述层次结构文件中的标识;元素在所述层次结构文件中的层级;布局在所述层次结构文件中的标识;文本元素的文本信息;文本元素的子元素的文本组合。
7.根据权利要求1所述的自动化测试方法,其特征在于,在根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识之后,还包括:
根据所述当前界面的层次结构文件判断所述当前界面是否属于所述应用程序;
如果判断结果为所述当前界面属于所述应用程序,则选择所述当前界面上未探索过的测试项进行探索。
8.根据权利要求7所述的自动化测试方法,其特征在于,在根据所述当前界面的层次结构文件判断所述当前界面是否属于所述应用程序之后,还包括:
如果判断结果为所述当前界面不属于所述应用程序,则直接根据所述当前界面更新所述界面有向网络图,并重启所述应用程序以重新获得所述当前界面。
9.根据权利要求1所述的自动化测试方法,其特征在于,所述操作信息包括:
测试项;操作的奖励;界面跳转等待时间。
10.根据权利要求9所述的自动化测试方法,其特征在于,当所述目标界面不属于所述应用程序时,所述操作的奖励为-1;当所述目标界面与当前界面的界面唯一标识相同时,所述操作的奖励为0;当所述目标界面为所述应用程序的其他界面时,所述操作的奖励为1。
11.根据权利要求1所述的自动化测试方法,其特征在于,还包括:
如果所述当前界面上的所有测试项均探索完成,则将所述应用程序的未探索完成的界面确定为当前界面并重复执行步骤A至步骤C。
12.一种应用程序的自动化测试装置,其特征在于,包括:
生成模块,用于根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;
选择并探索模块,用于选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;
更新模块,用于基于本次探索跳转得到的目标界面更新界面有向网络图,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息。
13.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器运行时执行权利要求1至11任一项所述方法的步骤。
14.一种终端,包括如权利要求12所述的装置,或者包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机程序,其特征在于,所述处理器运行所述计算机程序时执行权利要求1至11任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110027999.9A CN112783764B (zh) | 2021-01-08 | 2021-01-08 | 应用程序的自动化测试方法及装置、存储介质、终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110027999.9A CN112783764B (zh) | 2021-01-08 | 2021-01-08 | 应用程序的自动化测试方法及装置、存储介质、终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112783764A true CN112783764A (zh) | 2021-05-11 |
CN112783764B CN112783764B (zh) | 2022-07-19 |
Family
ID=75756298
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110027999.9A Active CN112783764B (zh) | 2021-01-08 | 2021-01-08 | 应用程序的自动化测试方法及装置、存储介质、终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112783764B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113791786A (zh) * | 2021-09-23 | 2021-12-14 | 安然 | 基于ios系统的app页面控件自动化方法及装置 |
CN113836028A (zh) * | 2021-09-28 | 2021-12-24 | 奇安信科技集团股份有限公司 | 软件界面的测试建模方法及装置、电子设备、存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104615538A (zh) * | 2015-02-05 | 2015-05-13 | 天津市康凯特软件科技有限公司 | 一种基于手机界面控件元素的手机应用测试方法 |
CN107678940A (zh) * | 2017-08-30 | 2018-02-09 | 苏州朗动网络科技有限公司 | 基于安卓app的自动化探索测试方法及系统 |
US20180137025A1 (en) * | 2016-11-14 | 2018-05-17 | Microsoft Technology Licensing, Llc | Multi-language playback framework |
CN110716853A (zh) * | 2018-07-13 | 2020-01-21 | 中移信息技术有限公司 | 一种测试脚本录制方法、应用程序测试方法和相关装置 |
CN111309622A (zh) * | 2020-02-27 | 2020-06-19 | 中国平安人寿保险股份有限公司 | 应用程序测试方法、装置、终端设备以及存储介质 |
-
2021
- 2021-01-08 CN CN202110027999.9A patent/CN112783764B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104615538A (zh) * | 2015-02-05 | 2015-05-13 | 天津市康凯特软件科技有限公司 | 一种基于手机界面控件元素的手机应用测试方法 |
US20180137025A1 (en) * | 2016-11-14 | 2018-05-17 | Microsoft Technology Licensing, Llc | Multi-language playback framework |
CN107678940A (zh) * | 2017-08-30 | 2018-02-09 | 苏州朗动网络科技有限公司 | 基于安卓app的自动化探索测试方法及系统 |
CN110716853A (zh) * | 2018-07-13 | 2020-01-21 | 中移信息技术有限公司 | 一种测试脚本录制方法、应用程序测试方法和相关装置 |
CN111309622A (zh) * | 2020-02-27 | 2020-06-19 | 中国平安人寿保险股份有限公司 | 应用程序测试方法、装置、终端设备以及存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113791786A (zh) * | 2021-09-23 | 2021-12-14 | 安然 | 基于ios系统的app页面控件自动化方法及装置 |
CN113791786B (zh) * | 2021-09-23 | 2024-01-19 | 安然 | 基于ios系统的app页面控件自动化方法及装置 |
CN113836028A (zh) * | 2021-09-28 | 2021-12-24 | 奇安信科技集团股份有限公司 | 软件界面的测试建模方法及装置、电子设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112783764B (zh) | 2022-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9182981B2 (en) | Systems and methods for implementing pixel-based reverse engineering of interface structure | |
CN112783764B (zh) | 应用程序的自动化测试方法及装置、存储介质、终端 | |
CN104268006A (zh) | 键鼠脚本的回放方法及装置 | |
CN105468529A (zh) | 一种安卓应用ui控件精准遍历方法和装置 | |
US20160004629A1 (en) | User workflow replication for execution error analysis | |
CN108345485A (zh) | 用于界面视图的标识方法及装置 | |
CN113076257A (zh) | 测试脚本录制方法、装置、介质及计算机设备 | |
EP2951680B1 (en) | Acquiring identification of an application lifecycle management entity associated with similar code | |
CN115525563A (zh) | 一种测试方法、装置、计算机设备和存储介质 | |
CN112835786B (zh) | 应用程序界面跳转的最优路径计算方法及装置、存储介质、终端 | |
CN110737573B (zh) | 用户界面ui自动化测试的方法和装置 | |
AU2005200513B2 (en) | Data processing system | |
CN112835787B (zh) | 应用程序界面跳转的路径纠正方法及装置、存储介质、终端 | |
CN109558307B (zh) | 一种游戏程序的测试方法及系统 | |
CN109240678B (zh) | 代码生成方法及装置 | |
CN113220564A (zh) | 页面的自动化测试方法、装置、设备以及存储介质 | |
US20170308379A1 (en) | Evaluating documentation coverage | |
CN112835785B (zh) | 应用程序界面跳转的单向路径锚点记忆方法及装置、存储介质、终端 | |
US8826233B2 (en) | Graphical representation of a JAVA bytecode | |
CN110209593B (zh) | 一种面向偏好设置的安卓应用测试方法 | |
CN111597119A (zh) | 测试脚本更新方法、装置、存储介质及处理器 | |
JP6079868B2 (ja) | エラー分析方法、情報処理装置およびエラー分析プログラム | |
CN115982018B (zh) | 一种基于ocr的ui测试方法、系统、计算机设备和存储介质 | |
CN114968687B (zh) | 遍历测试方法、装置、电子设备、程序产品以及存储介质 | |
US20240143482A1 (en) | Systems and methods for providing a timeline view of log information for a client application |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |