一种并行化安卓应用UI自动探索方法转让专利

申请号 : CN201910248660.4

文献号 : CN110096323B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曹春邓靖余萍马晓星

申请人 : 南京大学

摘要 :

本申请提供一种并行化安卓应用UI自动探索方法,系统包括控制设备和一个以上测试设备,方法包括:控制设备从任务队列中取出待执行的探索任务,将该探索任务分配给空闲测试设备;空闲测试设备接收到该探索任务后,进入待探索activity,在待探索activity内持续执行输入事件直至达到预设条件;控制设备记录完成待探索activity的UI探索任务的过程中的UI跳转图,并在该过程中触发新的activity后生成新的activity的UI探索任务并将其放入所述任务队列中;当任务队列中无待执行的探索任务且各测试设备均已完成各自的探索任务时,控制设备拼接记录的各activity的UI跳转图。如此,极大提高了UI遍历的效率。

权利要求 :

1.一种并行化安卓应用UI自动探索方法,其特征在于,应用于互相通信连接的控制设备和一个以上测试设备,所述一个以上测试设备中均安装有待测应用,所述方法包括:所述控制设备从任务队列中取出待执行的探索任务,其中,该探索任务为所述待测应用的待探测activity的UI探索任务;

所述控制设备从所述一个以上测试设备中确定当前未执行探索任务的空闲测试设备,将所述待执行的探索任务分配给所述空闲测试设备;

所述空闲测试设备接收到所述待执行的探索任务后,进入待探索activity,在待探索activity内持续根据所述待测应用当前的UI执行输入事件直至达到预设条件,以完成待探索activity的UI探索任务;

所述控制设备记录所述空闲测试设备在完成待探索activity的UI探索任务的过程中的UI跳转图,并在该过程中触发新的activity后生成所述新的activity的UI探索任务并将其作为新的待执行的探索任务放入所述任务队列中;

当所述任务队列中不存在待执行的探索任务且执行探索任务的测试设备均已完成各自的探索任务时,所述控制设备拼接记录的各activity的UI跳转图。

2.根据权利要求1所述的一种并行化安卓应用UI自动探索方法,其特征在于,所述探索任务包括所述待测应用的启动activity的初始UI探索任务;

在所述控制设备从任务队列中取出待执行的探索任务之前,所述方法还包括:所述控制设备分析所述待测应用的安装包,确定所述待测应用的启动activity,生成所述初始UI探索任务并将其作为待执行的探索任务放入所述任务队列中。

3.根据权利要求1所述的一种并行化安卓应用UI自动探索方法,其特征在于,所述方法还包括:

针对每个activity,所述控制设备记录从所述待测应用启动到该activity被触发的过程中的所有输入事件的序列,得到该activity的重现序列。

4.根据权利要求1所述的一种并行化安卓应用UI自动探索方法,其特征在于,在待探索activity内持续根据所述待测应用当前的UI执行输入事件直至达到预设条件,包括:执行预设数量的输入条件;

若当前执行的预设数量的输入条件触发新的UI,则继续执行预设数量的输入条件;

若当前执行的预设数量的输入条件未触发新的UI,则停止执行输入事件;

其中,若当前执行的输入条件触发新的activity,则执行BACK事件,以跳转回待探索activity。

5.根据权利要求1所述的一种并行化安卓应用UI自动探索方法,其特征在于,所述方法还包括:

所述控制设备记录各activity触发的先后顺序;

将所述待执行的探索任务分配给所述空闲测试设备,包括:针对一个以上待执行的探索任务,根据与所述一个以上待执行的探索任务一一对应的一个以上activity触发的先后顺序,优先将与先触发的activity对应的待执行的探索任务分配给所述空闲测试设备。

6.一种并行化安卓应用UI自动探索方法,其特征在于,包括互相通信连接的控制设备和一个以上测试设备;其中,所述一个以上测试设备中均安装有待测应用所述控制设备从任务队列中取出待执行的探索任务,其中,该探索任务为所述待测应用的待探测activity的UI探索任务;

所述控制设备从所述一个以上测试设备中确定当前未执行探索任务的空闲测试设备,将所述待执行的探索任务分配给所述空闲测试设备;

所述空闲测试设备接收到所述待执行的探索任务后,进入待探索activity,在待探索activity内持续根据所述待测应用当前的UI执行输入事件直至达到预设条件,以完成待探索activity的UI探索任务;

所述控制设备记录所述空闲测试设备在完成待探索activity的UI探索任务的过程中的UI跳转图,并在该过程中触发新的activity后生成所述新的activity的UI探索任务并将其作为新的待执行的探索任务放入所述任务队列中;

当所述任务队列中不存在待执行的探索任务且执行探索任务的测试设备均已完成各自的探索任务时,所述控制设备拼接记录的各activity的UI跳转图。

说明书 :

一种并行化安卓应用UI自动探索方法

技术领域

[0001] 本申请涉及软件测试技术领域,具体而言,涉及一种并行化安卓应用UI自动探索方法。

背景技术

[0002] UI(User Interface,用户界面)遍历是应用(例如,Android应用、IOS应用等等)测试的一部分,通过构建应用的UI跳转图,能够帮助开发以及测试人员更加深入地理解、开
发、完善应用。
[0003] 目前,针对应用UI的自动化遍历技术通常是基于模型来探索应用UI,主要方法包括深度优先搜索和广度优先搜索,这两种方法都存在状态回溯困难的问题。具体地,应用执
行到无法发现新的UI时,应用需要回溯以回到之前的UI继续探索未探索新的UI,而应用的
回溯往往需要重新启动应用,重新执行之前执行的输入事件,这个过程十分繁琐,导致UI遍
历效率低下。
[0004] 并且,现有的UI遍历技术仅在一台测试设备上进行应用UI的遍历,限制了遍历效率。

发明内容

[0005] 为了至少部分地克服现有技术中的上述不足,本申请实施例提出如下技术方案:
[0006] 第一方面,本申请实施例提供一种并行化安卓应用UI自动探索方法,应用于互相通信连接的控制设备和一个以上测试设备,所述一个以上测试设备中均安装有待测应用,
所述方法包括:
[0007] 所述控制设备从任务队列中取出待执行的探索任务,其中,该探索任务为所述待测应用的待探测activity的UI探索任务;
[0008] 所述控制设备从所述一个以上测试设备中确定当前未执行探索任务的空闲测试设备,将所述待执行的探索任务分配给所述空闲测试设备;
[0009] 所述空闲测试设备接收到所述待执行的探索任务后,进入所述待探索activity,在所述待探索activity内持续根据所述待测应用当前的UI执行输入事件直至达到预设条
件,以完成所述待探索activity的UI探索任务;
[0010] 所述控制设备记录所述空闲测试设备在完成所述待探索activity的UI探索任务的过程中的UI跳转图,并在该过程中触发新的activity后生成所述新的activity的UI探索
任务并将其作为新的待执行的探索任务放入所述任务队列中;
[0011] 当所述任务队列中不存在待执行的探索任务且执行探索任务的测试设备均已完成各自的探索任务时,所述控制设备拼接记录的各activity的UI跳转图。
[0012] 第二方面,本申请实施例提供一种并行化安卓应用UI自动探索方法,包括互相通信连接的控制设备和一个以上测试设备;其中,所述一个以上测试设备中均安装有待测应
用,
[0013] 所述控制设备从任务队列中取出待执行的探索任务,其中,该探索任务为所述待测应用的待探测activity的UI探索任务;
[0014] 所述控制设备从所述一个以上测试设备中确定当前未执行探索任务的空闲测试设备,将所述待执行的探索任务分配给所述空闲测试设备;
[0015] 所述空闲测试设备接收到所述待执行的探索任务后,进入所述待探索activity,在所述待探索activity内持续根据所述待测应用当前的UI执行输入事件直至达到预设条
件,以完成所述待探索activity的UI探索任务;
[0016] 所述控制设备记录所述空闲测试设备在完成所述待探索activity的UI探索任务的过程中的UI跳转图,并在该过程中触发新的activity后生成所述新的activity的UI探索
任务并将其作为新的待执行的探索任务放入所述任务队列中;
[0017] 当所述任务队列中不存在待执行的探索任务且执行探索任务的测试设备均已完成各自的探索任务时,所述控制设备拼接记录的各activity的UI跳转图。
[0018] 相对于现有技术而言,本申请具有以下有益效果:
[0019] 本申请提供一种并行化安卓应用UI自动探索方法,系统包括控制设备和一个以上测试设备,方法包括:控制设备从任务队列中取出待执行的探索任务,将该探索任务分配给
空闲测试设备;空闲测试设备接收到该探索任务后,进入待探索activity,在待探索
activity内持续执行输入事件直至达到预设条件;控制设备记录完成待探索activity的UI
探索任务的过程中的UI跳转图,并在该过程中触发新的activity后生成新的activity的UI
探索任务并将其放入所述任务队列中;当任务队列中无待执行的探索任务且各测试设备均
已完成各自的探索任务时,控制设备拼接记录的各activity的UI跳转图。如此,极大提高了
UI遍历的效率。

附图说明

[0020] 为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对
范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这
些附图获得其他相关的附图。
[0021] 图1为本申请实施例提供的一种并行化安卓应用UI自动探索方法的组成示意图;
[0022] 图2为本申请实施例提供的一种并行化安卓应用UI自动探索方法的流程示意图;
[0023] 图3为执行BACK事件可以回退到跳转回所述待探索activity的UI的原理示意图;
[0024] 图4为本申请实施例中各activity与任务队列的关系示意图。

具体实施方式

[0025] 为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是
本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施
例的组件可以以各种不同的配置来布置和设计。
[0026] 因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通
技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范
围。
[0027] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
[0028] 请参照图1,图1是本申请实施例提供的一种并行化安卓应用UI自动探索方法的组成示意图。所述应用UI自动探索方法包括互相通信连接的控制设备和一个以上测试设备。
采用下文将要描述的应用UI自动探索方法,将待测应用输入所述控制设备后,可以得到待
测应用的UI遍历图作为输出。
[0029] 本实施例中,所述控制设备可以是计算机设备,所述测试设备可以是具有显示屏的电子设备(例如,手机、平板等等),所述测试设备中安装有待测应用(例如,Android应用、
IOS应用等等)。可选地,所述控制设备和所述一个以上测试设备之间通信连接的方式可以
如图1所示:所述控制设备可以是中心主机,每个测试设备与通信连接于该中心主机的从主
机连接,连接的方式可以是USB连接。
[0030] 请参照图2,图2是本申请提供的一种可以应用于上述一种并行化安卓应用UI自动探索方法的流程示意图。下面对该方法的具体步骤进行详细说明。
[0031] 步骤一,从任务队列中取出待执行的探索任务,其中,该探索任务为所述待测应用的待探索activity的UI探索任务;
[0032] 本实施例中,每个探索任务与一个特定的activity对应。在一种实施方式中,所述探索任务包括所述待测应用的启动activity的初始UI探索任务。相应地,在开始测试时,所
述控制设备分析所述待测应用的安装包,确定所述待测应用的启动activity,生成并储存
所述初始UI探索任务。在后续的步骤中,被分配到所述初始UI探索任务的测试设备启动所
述待测应用,即进入所述待测应用的启动activity。
[0033] 步骤二,所述控制设备从所述一个以上测试设备中确定当前未执行探索任务的空闲测试设备,将所述待执行的探索任务分配给所述空闲测试设备。
[0034] 本实施例中,所述控制设备可以监测各测试设备的当前的工作状态:当测试设备当前未执行被分配到的探索任务时,该测试设备(即,所述空闲测试设备)的工作状态为空
闲状态;当测试设备当前在执行被分配到的探索任务时,该测试设备的工作状态为忙碌状
态。
[0035] 步骤三,所述空闲测试设备接收到所述待执行的探索任务后,进入所述待探索activity,在所述待探索activity内持续根据所述待测应用当前的UI执行输入事件直至达
到预设条件,以完成所述待探索activity的UI探索任务。
[0036] 本实施例中,当所述空闲测试设备进入一个待探索activity后,通过持续执行输入事件探索所述待探索activity的UI。可选地,每次执行的输入条件可以是所述空闲测试
设备根据所述待测应用当前的UI随机生成的。执行的任一输入事件可能不会触发新的UI,
也可能触发新的UI。进一步地,所触发的新的UI可能属于所述待探索activity,也可能属于
新的activity(即,触发了新的activity)。当触发新的activity后,所述空闲测试设备继续
执行输入条件(例如,Android系统的BACK事件)以跳转回所述待探索的activity,进而继续
探索所述待探索activity的UI。
[0037] 如图3所示,展示了执行BACK事件可以跳转回所述待探索activity的UI的原理。当触发新的Activity时,新的Activity会被压入到Activity的回退栈(Back Stack)中,成为
在测试设备上显示的Activity,而上一个Activity(即,所述待探索activity)则进入睡眠
状态。当输入BACK事件后,测试设备显示的Activity(即,所述新的activity)将被退出,从
回退栈栈顶出栈,出栈后将被销毁,而上一个Activity(即,所述待探索activity)又重新成
为栈顶的Activity,成为显示在测试设备上的Activity。
[0038] 因此,执行器在发现输入事件触发跳转到别的Activity时,此时栈顶的Activity是别的Activity,任务指定的Activity在回退栈中被压下去了,为了回退到任务指定的
Activity,只需要输入Android系统内的BACK事件,就可以退出当前Activity。
[0039] 本实施例中,当达到预设条件后,所述空闲测试设备完成对所述待探索的activity的UI的探索,不再执行输入事件。可选地,所述空闲测试设备可以执行预设数量的
输入条件,若当前执行的预设数量的输入条件触发新的UI,则继续执行预设数量的输入条
件,若当前执行的预设数量的输入条件未触发新的UI(即,达到所述预设条件),则停止执行
输入事件。
[0040] 可选地,如图2所示,针对每个activity,所述控制设备还可以记录从所述待测应用启动到该activity被触发的过程中的所有输入事件的序列,得到该activity的重现序
列。如此,测试设备通过执行所述控制设备记录的所述待探索activity的重现序列,即可进
入所述待探索activity。
[0041] 步骤四,所述控制设备记录所述空闲测试设备在完成所述待探索activity的UI探索任务的过程中的UI跳转图,并在该过程中触发新的activity后生成所述新的activity的
UI探索任务并将其作为新的待执行的探索任务放入所述任务队列中。
[0042] 请参照图4,图4是个activity与所述任务队列的关系示意图。从第一个待探索activity(假设为图4中的A)开始,如图4所示,所述控制设备生成A的UI探索任务作为第一
个待执行的探索任务并将其放入所述任务队列中。在开始测试时,各测试设备均处于空闲
状态,所述控制设备可以将A的UI探索任务从所述任务队列中取出并分配给任一测试设备
执行。进一步地,如图4所示,假设在A的UI探索任务的执行过程中触发了新的activity B和
C,则所述控制设备生成B的UI探索任务和C的UI探索任务并将其放入所述任务队列中。若此
时所述控制设备检测到两台测试设备处于空闲状态,则可以将B的UI探索任务和C的UI探索
任务分别从所述任务队列中取出并分配给这两台测试设备执行。更进一步地,如图4所示,
若B被分配到空闲的测试设备被执行的过程中又触发了新的 activity D和E,则所述控制
设备生成D的UI探索任务和E的UI探索任务放入所述任务序列中。若此时所述控制设备检测
到两台测试设备(例如,A和C)处于空闲状态,则可以将D的UI探索任务和E的UI探索任务分
别从所述任务队列中取出并分配给这两台测试设备执行。
[0043] 随着新的activity以及新的探索任务的不断出现,在同一时刻,可以由不同的测试设备各自执行不同的待执行的探索任务,即,能够并行地对多个待探索activity进行UI
探索。
[0044] 可选地,所述控制设备还可以记录各activity触发的先后顺序,并针对一个以上待执行的探索任务,根据与所述一个以上待执行的探索任务一一对应的一个以上activity
触发的先后顺序,优先将与先触发的activity对应的待执行的探索任务分配给所述空闲测
试设备。
[0045] 步骤五,当所述任务队列中不存在待执行的探索任务且执行探索任务的测试设备均已完成各自的探索任务时,所述控制设备拼接记录的各activity的UI跳转图。
[0046] 本实施例中,当所述任务队列中不存在待执行的探索任务且执行探索任务的测试设备均已完成各自的探索任务时,表明整个待测应用的UI探索已经完成,所述控制设备拼
接记录的各activity的UI跳转图,实现对所述待测应用的UI遍历。
[0047] 如此,本申请实施例采用多台测试设备并行地对待测应用的各activity的UI进行探索,无需重启应用、重复执行之前的输入事件,极大提高了UI遍历的效率。
[0048] 以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵
盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。