CN112835785A - 应用程序界面跳转的单向路径锚点记忆方法及装置、存储介质、终端 - Google Patents
应用程序界面跳转的单向路径锚点记忆方法及装置、存储介质、终端 Download PDFInfo
- Publication number
- CN112835785A CN112835785A CN202110025141.9A CN202110025141A CN112835785A CN 112835785 A CN112835785 A CN 112835785A CN 202110025141 A CN202110025141 A CN 202110025141A CN 112835785 A CN112835785 A CN 112835785A
- Authority
- CN
- China
- Prior art keywords
- interface
- path
- jump
- jumping
- application program
- 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/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Human Computer Interaction (AREA)
- User Interface Of Digital Computer (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种应用程序界面跳转的单向路径锚点记忆方法及装置、存储介质、终端,所述方法包括:根据界面有向网络图计算从所述应用程序的源界面跳转到目标界面的跳转路径;当所述跳转路径包含单向路径,且从所述单向路径的起点界面执行跳转到达的实际界面不是所述单向路径的终点界面时,将所述单向路径记录为锚点;针对所述锚点执行至少一轮跳转操作,并根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径,直至按所述跳转路径跳转到达所述终点界面。通过本发明方案能够在单向路径不可达时通过仿照人的思维方式探索出满足单向路径跳转目标的各种操作的有效组合,使得应用程序界面自动化探索时能够正确地从源界面跳转到目标界面。
Description
技术领域
本发明涉及应用程序测试技术领域,具体地涉及一种应用程序界面跳转的单向路径锚点记忆方法及装置、存储介质、终端。
背景技术
为评价一款应用程序(Application,简称APP)的性能,需要对应用程序在终端上的运行情况进行测试。例如,有针对性的控制应用程序从某一界面跳转到其另一界面以对应用程序进行广度和深度上的自动化探索测试。
现有主流做法是计算两个界面之间的跳转路径,如采用最短路径算法以便快速到达目标界面。现有较常用的最短路径算法包括迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法和最短路径快速算法(Shortest Path Faster Algorithm,简称SPFA)等技术。
但是,在实际应用中,应用程序的界面自动化探索是一个复杂且难度较高的过程,尤其是要从深度和广度两个维度进行探索。这是因为应用程序界面的可变因素太多,功能越复杂的应用程序界面就越多。此外,现在很多应用程序都具有记忆性功能,以及应用程序中不少操作都会带来很多界面上的变化。
上述各种因素均会导致,如果只采用传统的计算最短或最优路径的方法来计算测试时的跳转路径是不可行,严重的会导致路径死循环,无法真正跳转到最终期望到达的目标界面。
例如,应用程序的有些界面之间的跳转路径只有一条,这样的界面跳转路径称作单向路径。也即,只有通过操作界面A上的特定元素才能跳转到目标界面,除此以外没有其他可操作元素或界面能够跳转到达所述目标界面。但是,在实际跳转时,从界面A到目标界面的这条路径是不可达的。
针对上述单向路径不可达问题,现有技术无法提供合适的解决方案,导致对应用程序的自动化探索测试无法顺利进行。
发明内容
本发明解决的技术问题是在应用程序探索测试过程中,如何在单向路径不可达时确保正确、成功地跳转至目标界面。
为解决上述技术问题,本发明实施例提供一种应用程序界面跳转的单向路径锚点记忆方法,包括:根据界面有向网络图计算从所述应用程序的源界面跳转到目标界面的跳转路径,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息;当所述跳转路径包含单向路径,且从所述单向路径的起点界面执行跳转到达的实际界面不是所述单向路径的终点界面时,将所述单向路径记录为锚点;针对所述锚点执行至少一轮跳转操作,并根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径,直至按所述跳转路径跳转到达所述终点界面。
可选的,所述跳转操作结果包括每轮跳转操作引起的单向路径跳转界面变化,以及不同轮跳转操作之间的关系。
可选的,所述根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径包括:根据所述历次跳转操作结果确定非互斥的跳转操作组合;以当前界面为起点、所述终点界面为终点,根据所述界面有向网络图和所述跳转操作组合计算下一轮跳转操作时的跳转路径。
可选的,所述根据所述历次跳转操作结果确定非互斥的跳转操作组合包括:根据所述历次跳转操作结果从所述至少一轮跳转操作中选取有效操作;将跳转到达的实际界面不同的多轮有效操作确定为所述非互斥的跳转操作组合。
可选的,所述有效操作是指完成一轮跳转操作后使得单向路径跳转操作到达的实际界面,与执行该轮跳转操作之前单向路径跳转操作到达的实际界面不同。
可选的,在按跳转路径进行跳转期间,以经过所述锚点为单轮跳转操作的完成标志。
可选的,单轮跳转操作包括至少一次界面跳转动作,其中每次界面跳转动作包括对应的操作信息。
可选的,所述界面跳转动作对应的操作信息包括源界面的界面唯一标识、实际跳转界面的界面唯一标识以及被操作的元素或布局的唯一标识。
可选的,所述单向路径是指所述界面有向网络图中不存在替代路径的跳转路径,其中,所述替代路径为从其他界面跳转至所述终点界面的跳转路径,所述其他路径是指所述界面有向网络图中除了所述起点界面之外的界面。
可选的,所述锚点包括所述起点界面的界面唯一标识、所述终点界面的界面唯一标识以及被操作的元素或布局的唯一标识。
可选的,所述界面有向网络图是历史上对所述应用程序进行自动化测试得到的,所述自动化测试包括如下步骤:A.根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;B.选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;C.基于本次探索跳转得到的目标界面更新界面有向网络图;D.将所述目标界面确定为所述当前界面并重复执行步骤A至步骤C,直至所述应用程序的所有界面的所有测试项均探索完成。
为解决上述技术问题,本发明实施例还提供一种应用程序界面跳转的单向路径锚点记忆装置,包括:处理模块,用于根据界面有向网络图计算从所述应用程序的源界面跳转到目标界面的跳转路径,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息;锚点记录模块,当所述跳转路径包含单向路径,且从所述单向路径的起点界面执行跳转到达的实际界面不是所述单向路径的终点界面时,将所述单向路径记录为锚点;确定模块,用于针对所述锚点执行至少一轮跳转操作,并根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径,直至按所述跳转路径跳转到达所述终点界面。
为解决上述技术问题,本发明实施例还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述方法的步骤。
为解决上述技术问题,本发明实施例还提供一种终端,包括上述应用程序界面跳转的单向路径锚点记忆装置,或者包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行上述方法的步骤。
与现有技术相比,本发明实施例的技术方案具有以下有益效果:
本发明实施例提供一种应用程序界面跳转的单向路径锚点记忆方法,包括:根据界面有向网络图计算从所述应用程序的源界面跳转到目标界面的跳转路径,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息;当所述跳转路径包含单向路径,且从所述单向路径的起点界面执行跳转到达的实际界面不是所述单向路径的终点界面时,将所述单向路径记录为锚点;针对所述锚点执行至少一轮跳转操作,并根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径,直至按所述跳转路径跳转到达所述终点界面。
采用本实施方案,能够在单向路径不可达时通过仿照人的思维方式探索出满足单向路径跳转目标的各种操作的有效组合,使得应用程序界面自动化探索时能够正确地从源界面跳转到目标界面。具体而言,将实际探索时发现不可达的单向路径记录为锚点,通过以此锚点进行一轮或多轮的操作来尝试不同操作所带来的界面变化和界面间跳转情况。通过历次跳转操作结果指导计算下一轮跳转操作的跳转路径,最终找到能够连通至终点界面的路径。由此,通过仿照人的操作思维方式,针对界面的可操作元素或布局进行相关操作,并记录操作带来的正向或反向的变化,从而探索出满足单向路径跳转目标的各种操作的有效组合。
进一步,所述界面有向网络图是历史上对所述应用程序进行自动化测试得到的,所述自动化测试包括如下步骤:A.根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;B.选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;C.基于本次探索跳转得到的目标界面更新界面有向网络图;D.将所述目标界面确定为所述当前界面并重复执行步骤A至步骤C,直至所述应用程序的所有界面的所有测试项均探索完成。
较之现有的猴子测试是随机地触发对应用程序的某个界面进行某种操作,本实施方案能够兼顾对应用程序进行自动化探索遍历时的广度和深度,极大地提高应用程序自动化测试的覆盖率,使得最终得到的界面有向网络图更为全面。具体而言,以界面唯一标识来区分应用程序的不同界面,界面上的元素、布局和对应的活动(activity)中的任一个发生变化即认为是不同的界面。通过标识应用程序的界面,能够在探索时记录各界面的探索结果,以便区分各界面上已经探索的测试项和未探索过的测试项。在此基础上,以基于界面唯一标识表征的界面为单位,对应用程序进行自动化探索遍历,且每次探索的是当前界面上未探索过的测试项,使得对应用程序的自动化探索遍历不再是完全随机的,利于兼顾测试的广度和深度。进一步,通过形成界面有向网络图来记录自动化探索遍历结果,以记录应用程序各界面之间的有向路径,能够辅助测试和研发快速定位和复现问题出现的场景。进一步,将所述目标界面确定为所述当前界面并重复执行步骤A至步骤C,直至所述应用程序的所有界面的所有测试项均探索完成。由此,基本能探索测试应用程序的所有界面,以及各界面上所有的可操作元素和布局。
附图说明
图1是本发明实施例一种应用程序的自动化测试方法的流程图;
图2是本发明实施例一个典型应用场景的自动化测试进程示意图;
图3是现有技术一种界面有向网络图的示意图;
图4是本发明实施例一种应用程序界面跳转的单向路径锚点记忆方法的流程图;
图5是图4中步骤S403的一个具体实施方式的流程图;
图6是本发明实施例一个典型应用场景的单向路径锚点记忆进程示意图;
图7是本发明实施例一种应用程序界面跳转的单向路径锚点记忆装置的结构示意图。
具体实施方式
如背景技术所言,现有技术无法解决实际探索时发生的单向路径不可达问题,导致对应用程序的自动化探索测试无法顺利进行。
本申请发明人经过分析发现,由于应用程序界面的自动化探索是随机性的,任何操作是否会影响界面有向网络图中某两个节点之间的路径是不可知的,所以也就无法通过记录来保存这些操作和界面变化之间的关系。
以图3所示界面有向网络图为例,参考图3,所述界面有向网络图包括界面1至界面7共七个界面,各界面之间的跳转如图中各界面间的连线所示,连线的箭头方向表示跳转方向。
假设期望从界面1跳转到界面5,根据图3所示界面有向网络图看似从界面1是可以跳转到界面5的,但实际跳转时这条路径是不可达的。原因是界面5需要通过界面2、界面3、界面4、界面6和界面7进行一定的操作组合才能将界面5显示出来,而在基于界面有向网络图计算最优路径时只能是1→5这条路径。在实际跳转过程中,按1→5的路径进行跳转无法到达界面5,若将该路径设置为不可达并更新界面有向网络图,则重新计算最优路径时最终得到的计算结果是无路径可以到达界面5;若不设置1→5这条路径不可达,最终跳转会变成死循环。无论哪一种,现有技术均无法使得界面成功跳转到界面5。
假设图3中界面2、界面3、界面4和界面5属于同一界面组,其中界面2上的图标包括开启定时和开启录音,界面3上的图标包括关闭定时和开启录音,界面4上的图标包括开启定时和关闭录音,界面5上的图标包括关闭定时和关闭录音。假设在界面2或界面4操作开启定时可到达界面6或界面7,在界面2、界面3、界面4和界面5操作关闭定时、开启录音或关闭录音可跳转到界面1。假设应用程序具备记忆功能,则在界面1操作同一个元素可到达界面2、界面3、界面4和界面5中上一次跳转出去时显示的那个界面。
如果首次进入界面2,想要跳转到界面5,则可以有如下两种操作方式:
操作方式1,从界面1跳转到界面2,在界面2操作开启定时跳转到界面6,然后在界面6操作定时时间后回到界面1;在界面1再次操作会进入界面3,然后在界面3操作开启录音回到界面1;在界面1再次操作就会进入界面5。
操作方式2,从界面1跳转到界面2,在界面2操作开启录音回到界面1;在界面1再次操作会进入界面4,在界面4操作开启定时跳转到界面6,然后在界面6操作定时时间回到界面1;在界面1再次操作就会进入界面5。
以上两种操作方式的示例只是两种组合的操作,如果有三种或更多种组合的操作能够到达界面5,按传统的编码方式没有办法实现这种组合方式以及执行的先后顺序。
为解决上述技术问题,本发明实施例提供一种应用程序界面跳转的单向路径锚点记忆方法,包括:根据界面有向网络图计算从所述应用程序的源界面跳转到目标界面的跳转路径,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息;当所述跳转路径包含单向路径,且从所述单向路径的起点界面执行跳转到达的实际界面不是所述单向路径的终点界面时,将所述单向路径记录为锚点;针对所述锚点执行至少一轮跳转操作,并根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径,直至按所述跳转路径跳转到达所述终点界面。
采用本实施方案,能够在单向路径不可达时通过仿照人的思维方式探索出满足单向路径跳转目标的各种操作的有效组合,使得应用程序界面自动化探索时能够正确地从源界面跳转到目标界面。具体而言,将实际探索时发现不可达的单向路径记录为锚点,通过以此锚点进行一轮或多轮的操作来尝试不同操作所带来的界面变化和界面间跳转情况。通过历次跳转操作结果指导计算下一轮跳转操作的跳转路径,最终找到能够连通至终点界面的路径。由此,通过仿照人的操作思维方式,针对界面的可操作元素或布局进行相关操作,并记录操作带来的正向或反向的变化,从而探索出满足单向路径跳转目标的各种操作的有效组合。
进一步,所述界面有向网络图可以是历史上对所述应用程序进行自动化测试得到的。也即,根据历史上对所述应用程序进行自动化测试得到的历史测试结果,将应用程序各界面之间的跳转情况、触发跳转的相关操作信息等以界面有向网络图的方式进行记录。生成的界面有向网络图能够作为后续应用程序自动化测试的索引基础,供测试程序合理确定测试时的跳转路径。
例如,所述界面有向网络图可以是采用猴子测试等随机式的自动化测试方式探索得到的。
又例如,所述界面有向网络图可以是采用如图1和图2所示自动化测试方法探索得到的。且较之采用猴子测试得到的界面有向网络图,采用图1和图2所示自动化测试方法得到的界面有向网络图更为全面,能够更好的满足应用程序自动化探索测试在广度和深度上的要求。
为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
在本实施方案中,“自动化探索遍历”是指对应用程序进行深度以及广度上的遍历探索。其方法可以通过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点击元素A1跳转到界面B时,不是说点击元素A1后过1秒(second,简称s)或0.5s就能看到界面B的,而且不同性能的手机上操作同一应用程序的同一界面后的界面跳转等待时间是不同的。在自动化测试期间,该参数可以是在第一次触发从界面A跳转到界面B时计算获取并记录的,下次再从界面A跳转到界面B时就会按这个时间来等待。
基于本实施方案,能够根据探索得到的界面形成界面有向网络图,图中各节点是应用程序的每个界面,两个节点之间的有向路径记录所述操作信息。所述操作信息可以包括被操作的元素或布局(即触发本次跳转的元素或布局)和操作类型(即触发本次跳转的操作),即测试项。所述操作信息还可以包括源界面的界面唯一标识、被操作元素或布局的唯一标识、操作的索引以及目标界面的界面唯一标识。
在一个具体实施中,本实施例所述自动化测试方法还可以包括步骤:如果所述当前界面上的所有测试项均探索完成,则将所述应用程序的未探索完成的界面确定为当前界面并重复执行步骤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,直至所述应用程序的所有界面的所有测试项均探索完成。由此,基本能探索测试应用程序的所有界面,以及各界面上所有的可操作元素和布局。
进一步,采用本实施方案,除了能支持稳定性测试目的外,还能兼顾覆盖率和通用性的遍历测试、检测各类界面的和应用程序异常问题。本实施方案能够提升应用程序自动化测试的覆盖率,大大节省了测试投入和维护成本。
进一步,本实施方案所述自动化探索遍历测试无需编写测试脚本,并支持跨平台/跨版本/跨应用程序测试。
进一步,本实施方案所述自动化探索遍历测试还能检测应用程序版本演进过程中的界面上变化的差异,从中分析新版本可能引入的问题。
由此,采用图1和图2所示实施方案,可以生成所述界面有向网络图,连接所述界面有向网络图的节点是界面唯一标识,节点之间的跳转方向(或跳转路径)包括以下参数:被操作元素或布局的唯一标识;操作(点击、长按、滑动等)的索引;操作的奖励;界面跳转等待时间。
在获得所述界面有向网络图的基础上,可以存储所述界面有向网络图以供后续应用程序测试时调用。例如,从应用程序的界面中选取两个界面分别作为源界面和目标界面,探索测试从源界面跳转到目标界面的应用程序运行情况。在此场景中,基于本实施方案可以根据界面有向网络图、最短路径算法和相应策略计算得到最优路径,然后按所述最优路径从源界面快速且准确的跳转到目标界面,从而进行深度和广度的应用程序自动化探索测试。而在实际测试场景中,按前述逻辑计算得到的最优路径进行跳转期间,可能出现单向路径实际不可达现象。此时,需要执行单向路径锚点记忆方法,以通过仿照人的思维方式探索出满足单向路径跳转目标的各种操作的有效组合,使得应用程序界面自动化探索时能够正确地从源界面跳转到目标界面。
所述源界面和目标界面可以是从应用程序的界面中随机选取得到的。
所述源界面和目标界面可以是指定的所述应用程序的两个界面,如为了复现应用程序的问题(bug)而指定的。
接下来结合图4对本实施例所述应用程序界面跳转的单向路径锚点记忆方法进行详细阐述。图4示出的单向路径锚点记忆法可以是在图1和图2所示自动化测试生成完整的界面有向网络图之后执行的。或者,图4所示实施例可以是在图1和图2所示实施例执行期间执行的,也即执行图1和图2所示实施例以探索生成部分界面有向网络图后,即可基于当前生成的界面有向网络图执行图4所示方案,以根据已有的界面有向网络图成功执行特定界面间的跳转操作。
图4示出本发明实施例一种应用程序界面跳转的单向路径锚点记忆方法的流程图。
具体地,所述单向路径是指所述界面有向网络图中不存在替代路径的跳转路径,其中,所述替代路径为从其他界面跳转至所述终点界面的跳转路径,所述其他路径是指所述界面有向网络图中除了所述起点界面之外的界面。
进一步,参考图4,本实施例所述应用程序界面跳转的单向路径锚点记忆方法可以包括如下步骤:
步骤S401,根据界面有向网络图计算从所述应用程序的源界面跳转到目标界面的跳转路径;
步骤S402,当所述跳转路径包含单向路径,且从所述单向路径的起点界面执行跳转到达的实际界面不是所述单向路径的终点界面时,将所述单向路径记录为锚点;
步骤S403,针对所述锚点执行至少一轮跳转操作,并根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径,直至按所述跳转路径跳转到达所述终点界面。
在一个具体实施中,所述步骤S401计算得到的跳转路径可以是从源界面到目标界面的最短路径。相应的,所述步骤S401可以包括步骤:根据所述界面有向网络图计算从所述源界面跳转到目标界面的最短路径。
具体地,所述最短路径可以指从源界面跳转到目标界面所需跳转次数最少的跳转路径,也即,所述最短路径是指界面有向网络图中从源界面到目标界面所需途径节点最少的跳转路径。
在一个具体实施中,所述最短路径的计算过程可以包括步骤:先对所述界面有向网络图进行广度优先搜索,以得到主从关系字典,其中,所述主从关系字典用于记录所述源界面能够达到的所有路径;结合所述主从关系字典,对所述界面有向网络图进行深度优先搜索,以得到所述最短路径。
也就是说,基于界面有向网络图,先用广度优先搜索源界面到界面有向网络图中各个节点的跳转路径,再用深度优先搜索找到源界面到目标界面的最短路径。
具体地,所述广度优先搜索可以是通过循环方式搜索源界面在界面有向网络图中对应的源节点的所有下一级节点,然后循环搜索下一级节点的所有下下一级节点。广度优先搜索的目的是生成一个带主从关系的节点字典,即所述主从关系字典,以提供给深度优先搜索使用。例如,主从关系字典的格式可以为{key:[],…,[]},其中,key是源界面的界面唯一标识,[]存放可跳转的下一个界面的界面唯一标识。
进一步,深度优先搜索可以是指通过递归方式搜索某条路径每个节点直到最后一个节点,如最后一个节点未能找到目标界面在界面有向网络图中对应的目标节点,则返回上一级节点并搜索其他路径。
例如,可以结合所述主从关系字典按照递归方式搜索所述界面有向网络图,以得到多条从所述源界面到达所述目标界面的候选路径;然后,选取跳转次数最少的候选路径作为所述最短路径。
在一个变化例中,界面有向网络图中的界面唯一标识、被操作元素、操作的奖励和界面跳转等待时间等操作信息也可以作为计算最短路径的参考参数。也即,除了跳转次数这一指标外,还可以根据操作信息确定不同路径的推荐度,推荐度越高的路径越优先选择。由此,步骤S401计算得到的最短路径不是单纯意义上的跳转次数最少、途径节点最少的跳转路径,而是综合界面跳转等待时间等因素后计算得到的更优的跳转路径。
具体地,不同的操作信息可以对应不同的加权值,累加单个跳转路径上所有操作信息的加权值得到该条跳转路径的推荐度。如,操作的奖励为1的路径是可用的,该跳转路径对应的加权值大于操作的奖励为0或-1的路径的加权值。又如,界面跳转等待时间越长,对应路径的加权值越小甚至为负数。
相应的,在进行深度优先搜索时,可以结合所述主从关系字典按照递归方式搜索所述界面有向网络图,以得到多条从所述源界面到达所述目标界面的候选路径;然后,根据所述操作信息确定每条候选路径的加权值,其中,所述加权值用于表征所述候选路径的推荐度;最后,选取跳转次数最少且加权值最高的候选路径作为所述最短路径。
在一个变化例中,在采用上述具体实施所述方案计算得到最短路径基础上,所述步骤S401还可以进一步包括如下步骤:
步骤x,根据所述应用程序的历史测试数据判断所述最短路径是否包含不可达路径,其中,所述不可达路径至少是因为所述最短路径途径的界面具有记忆功能导致的,所述历史测试数据记录历史测试时所述应用程序各界面之间的实际跳转结果;
步骤y,若判断结果表明所述最短路径包含不可达路径,则根据所述历史测试数据和所述界面有向网络图调整所述最短路径,以将其中的不可达路径替换为可达路径;
步骤z,将调整后的最短路径确定为所述最优路径。
具体地,所述历史测试数据可以包括:界面组字典,用于记录所述应用程序的一个或多个界面所属界面组。例如,界面组字典包括界面组唯一标识(group ID)、界面唯一标识列表以及界面组唯一标识与界面唯一标识列表的关联关系。
界面组唯一标识可以根据该界面组包括的各界面上可操作元素组和布局组的唯一标识,以及界面对应的活动组合而成。可操作元素组和布局组的唯一标识可以根据元素的类型、元素在所述层次结构文件中的标识以及元素在所述层次结构文件中的层级等组合而成。
所述界面唯一标识列表包括属于同一界面组的各界面的界面唯一标识。
进一步,所述历史测试数据还可以包括:界面跳转限制映射字典,用于记录所述界面组字典中的界面组是否具有记忆功能。记忆功能会导致同一个界面组里的界面不会同时存在,从其他界面组的界面跳转到该界面组时只会跳转到某个特定的界面。
例如,界面跳转限制映射字典可以包括上一个界面(属于其他界面组)的界面唯一标识、当前界面所在界面组的界面组唯一标识、变更界面唯一标识列表和未变更界面唯一标识列表。其中,变更界面唯一标识列表表示离开该界面组前的界面与再次进入该界面组时的界面不同(change),未变更界面唯一标识列表表示离开该界面组前的界面与再次进入该界面组时的界面相同(no-change)。通过界面跳转限制映射字典用来记录应用程序界面切换过程中,所属某组的界面列表是否有记忆功能。判断方式上次离开该界面组时所在界面与再次进入该界面组中某一界面是否相等,相等则表示有记忆功能。也即,未变更界面唯一标识列表包含的界面具有记忆功能。
由此,通过界面组字典记录界面唯一标识和界面组唯一标识之间的关联关系,通过界面跳转限制映射字典预判界面有向网络图中连通的路径实际上是否能走通。
进一步,所述步骤x可以包括步骤:将所述最短路径途径的界面称作途径界面,对于每一途径界面,若所述历史测试数据表明所述途径界面所属界面组具有记忆功能,且所述途径界面并非其所属界面组的记忆界面,则确定所述最短路径中指向所述途径界面的路径为不可达路径。
例如,可以判断途径界面是否属于对应界面跳转限制映射字典中的未变更界面唯一标识列表。如果途径界面属于未变更界面唯一标识列表,则确定该途径界面存在记忆功能,采用上述具体实施所述方案计算得到最短路径中指向该途径界面的路径为不可达路径。
进一步,在步骤y中,当记忆界面能够直接跳转到途径界面时,可以简单地用记忆界面跳转到途径界面的跳转路径替换掉采用上述具体实施所述方案计算得到最短路径中的不可达路径,以使得调整后的最短路径是能够顺利走通的。
进一步,如果无法从记忆界面直接跳转到途径界面,则进一步根据界面跳转限制映射字典和界面有向网络图查找中转界面,并以中转界面为跳板从记忆界面多级跳转到途径界面。
由此,在本变化例中,可以在初步计算得到最短路径后,根据界面有向网络图和历史测试结果先对路径计算结果进行一次筛查,以在正式执行跳转之前先排除掉其中的不可达路径。换言之,采用本变化例的方案,所述步骤S401输出的跳转路径即为最优路径,且所述最优路径是对基于界面有向网络图计算得到的最短路径的优化结果。理论上,所述最优路径是能够顺利到达目标界面的,但仍无法排除按所述最优界面实际跳转期间因界面的动态变化而导致某些路径不可达。因此,在按步骤S401计算得到的最短路径或最优路径进行跳转期间,若出现跳转路径中的单向路径不可达问题,则采用图4所示方案来寻找合适的操作组合,确保成功到达目标界面。
本实施方案所述替代路径,即指前述是从记忆界面直接跳转到途径界面的跳转路径,或者以中转界面为跳板从记忆界面多级跳转到途径界面的跳转路径。
若步骤y中无法找到替代路径,表明当前发现不可达的跳转路径为单向路径。
进一步,在所述步骤S402中,所述锚点可以包括所述起点界面的界面唯一标识、所述终点界面的界面唯一标识以及被操作的元素或布局的唯一标识。
进一步,所述锚点还可以包括所述实际界面的界面唯一标识。
在一个具体实施中,所述跳转操作结果可以包括每轮跳转操作引起的单向路径跳转界面变化,以及不同轮跳转操作之间的关系。
具体地,在按跳转路径进行跳转期间,以经过所述锚点为单轮跳转操作的完成标志。也即,每次经过锚点为一轮操作。
进一步,单轮跳转操作可以包括至少一次界面跳转动作,其中每次界面跳转动作包括对应的操作信息。例如,所述界面跳转动作对应的操作信息可以包括源界面的界面唯一标识、实际跳转界面的界面唯一标识以及被操作的元素或布局的唯一标识。
在一个具体实施中,参见图5,所述步骤S403中根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径可以包括如下步骤:
步骤S4031,根据所述历次跳转操作结果确定非互斥的跳转操作组合;
步骤S4032,以当前界面为起点、所述终点界面为终点,根据所述界面有向网络图和所述跳转操作组合计算下一轮跳转操作时的跳转路径。
具体地,所述步骤S4031可以包括步骤:根据所述历次跳转操作结果从所述至少一轮跳转操作中选取有效操作;将跳转到达的实际界面不同的多轮有效操作确定为所述非互斥的跳转操作组合。
所述有效操作是指完成一轮跳转操作后使得单向路径跳转操作到达的实际界面,与执行该轮跳转操作之前单向路径跳转操作到达的实际界面不同。
也就是说,若执行本轮跳转操作,再执行锚点动作(即锚点所关联起点界面的界面唯一标识、被操作的元素或布局的唯一标识的动作,也称单向路径跳转操作)后,实际跳转到达的实际界面并非单向路径的终点界面,且与上一次执行锚点动作后跳转到达的实际界面不同,则本轮跳转操作标记为有效操作。若与上一次执行锚点动作后跳转到达的实际界面相同,则本轮跳转操作标记为无效操作。
若本轮跳转操作为有效操作,且执行锚点动作后实际跳转到达的界面在之前执行锚点动作后出现过(也就是说回到了记录锚点时的状态,或者以前某轮跳转操作后的状态),则记录本轮跳转操作与上一轮或多轮跳转操作互斥;否则,记录本轮跳转操作与上一轮或多轮操作跳转非互斥,可以组合。
在一个典型的应用场景中,参考图6,本实施例所述应用程序界面跳转的单向路径锚点记忆过程可以包括:
开始执行界面跳转进程,首先,执行操作s61,以计算最优路径。第一次计算时可以计算源界面到目标界面的最优路径,对应步骤S401。
然后,执行操作s62,以从当前界面执行跳转到下一个期望界面。其中,当前界面为当前到达的实际界面,下一个期望界面是指操作s61计算得到的最优路径指示的,以当前到达的实际界面为起点的跳转路径所连接的下一节点。
接下来,执行操作s63,以判断本次跳转实际到达的实际界面是否与所述期望界面相一致。例如,判断实际界面的界面唯一标识与期望界面的界面唯一标识是否一致。
若操作s63的判断结果为肯定的,也即本次成功跳转到了期望界面,则进一步执行操作s64,以判断当前到达的实际界面(也即期望界面)是否为本次界面跳转整体流程期望到达的目标界面。
若操作s64的判断结果为肯定的,则整个界面跳转流程结束。
若操作s64的判断结构为否定的,也即当前到达的实际界面(也即期望界面)还不是目标界面,则进一步执行操作s65,若已经设置有锚点,则记录本次跳转相关的界面跳转动作。然后跳转至操作s62开始执行,以从当前界面继续按最优路径执行跳转到下一个期望界面。
若操作s63的判断结果为否定的,也即实际界面与期望界面不一致,则进一步执行操作s66,以判断上一个界面到期望界面是否为单向路径。其中,所述上一个界面即为执行操作s62时的当前界面。
若操作s66的判断结果为否定的,也即从上一个界面到期望界面还存在其他的替代路径,则可以跳转执行操作s61,以根据当前到达的实际界面和目标界面重新计算最优路径。进一步,在跳转执行操作s61之前,可以先执行操作s67,以在已经设置锚点的情形下记录本次跳转相关的界面跳转动作。
若操作s66的判断结果为肯定的,也即从上一个界面到期望界面为单向路径,则进一步执行操作s68,以判断该单向路径对应的锚点是否已经存在。
若操作s68的判断结果为否定的,也即该单向路径尚未设置锚点,并且经由操作s63的判断结果表明该单向路径不可达,则进一步执行操作s69,以记录该单向路径的锚点关联的对象。本操作对应图4中步骤S402。所述锚点关联的对象可以包括所述上一个界面的界面唯一标识、所述期望界面的界面唯一标识以及被操作的元素或布局的唯一标识。
若操作s68的判断结果为肯定的,也即该单向路径已经设置锚点,则进一步执行操作s610,以判断上一轮跳转操作到达的实际界面与本轮跳转操作到达的实际界面是否一致。其中,上一轮跳转操作到达的实际界面是指上一次执行操作s61、操作s62、操作s63、操作s66和操作s68后跳转到操作s610执行时的实际界面。
若操作s610的判断结果为肯定的,也即前后两轮跳转操作到达的实际界面相同,则执行操作s611,将本轮跳转操作标记为无效操作。
若操作s610的判断结果为否定的,也即前后两轮跳转操作到达的实际界面不同,则执行操作s612,将本轮跳转操作标记为有效操作。进一步,继续执行操作s613,若本轮跳转操作导致回到了历次跳转操作到达过的界面,则将本轮跳转操作记录为与历次跳转操作互斥。
进一步,在操作s611或操作s613之后,可以进一步跳转执行操作s61,以重新计算当前界面到目标界面的最优路径。并且,重新计算最优路径时,优先考虑有效操作中,与历次有效操作非互斥的跳转操作的组合。
在一个典型的应用场景中,以图3所示界面有向网络图为例,对本实施方案所述单向路径锚点记忆方法进行示例性阐述。图中省略了操作元素、操作类型、界面跳转等待时间等操作信息。
1)假设当前界面为界面1,期望跳转到界面5,则执行步骤S401可以计算得到最优路径为1→5。对应图6中操作s61。
2)按最优路径1→5执行跳转,从界面1实际跳转到界面2。由于1→5为单向路径且经测试为不可达,因而设置锚点(源节点1,目标节点5,实际到达节点2,被操作元素或布局的唯一标识)。重新计算从当前所处界面2起的最优路径为2→1→5。对应图6中操作s62、操作s63、操作s66、操作s68、操作s69和操作s61。
3)按最优路径2→1→5执行跳转,从界面2跳转到界面1,由于跳转正确但尚未到达目标界面,且已经设置有锚点,因而添加本轮跳转操作的跳转操作结果1(源节点2,实际到达节点1,被操作元素或布局的唯一标识:开启录音)。继续按剩余的最优路径1→5执行跳转动作。本步骤对应图6中操作s63、操作s64、操作s65和操作s62。
4)按剩余的最优路径1→5执行跳转,从界面1跳转到界面4。锚点已存在,标记第一轮跳转操作为有效操作。重新计算从当前所处界面4起的最优路径为4→1→5。对应图6中操作s62、操作s63、操作s66、操作s68、操作s610、操作s612、操作s613和操作s61。第一轮跳转操作的跳转操作结果为上述跳转操作结果1。
5)按最优路径4→1→5执行跳转,从界面4跳转到界面1,由于跳转正确但尚未到达目标界面,且已经设置锚点,因而添加本轮跳转操作的跳转操作结果2(源节点4,实际到达节点1,被操作元素或布局的唯一标识:关闭录音)。继续按剩余的最优路径1→5执行跳转动作。对应图6中操作s63、操作s64、操作s65和操作s62。
6)按剩余的最优路径1→5执行跳转,从界面1实际跳转到界面2。锚点已存在,标记第二轮跳转操作为有效操作,但上述步骤4)记录的第一轮操作是互斥的。重新计算从当前所处界面2起的最优路径为2→1→5。对应图6中操作s62、操作s63、操作s66、操作s68、操作s610、操作s611和操作s61。第二轮跳转操作的跳转操作结果为上述跳转操作结果2。也就是说第一轮和第二轮跳转操作是互斥的。
7)重复上述步骤3)和步骤4),但第一轮跳转操作中4→1的跳转操作与步骤5)和步骤6)记录的第二轮跳转操作中12→1的跳转操作是互斥的。因而在重复执行步骤4)跳转到达界面4后,重新计算得到的最优路径应为4→7→1→5。
8)按最优路径4→7→1跳转正常,但同样需要记录界面跳转动作4→7和7→1的跳转操作结果。最后执行1→5跳转成功。
由上,采用本实施方案,能够在单向路径不可达时通过仿照人的思维方式探索出满足单向路径跳转目标的各种操作的有效组合,使得应用程序界面自动化探索时能够正确地从源界面跳转到目标界面。具体而言,将实际探索时发现不可达的单向路径记录为锚点,通过以此锚点进行一轮或多轮的操作来尝试不同操作所带来的界面变化和界面间跳转情况。通过历次跳转操作结果指导计算下一轮跳转操作的跳转路径,最终找到能够连通至终点界面的路径。由此,通过仿照人的操作思维方式,针对界面的可操作元素或布局进行相关操作,并记录操作带来的正向或反向的变化,从而探索出满足单向路径跳转目标的各种操作的有效组合。
图7是本发明实施例一种应用程序界面跳转的单向路径锚点记忆装置的结构示意图。本领域技术人员理解,本实施例所述应用程序界面跳转的单向路径锚点记忆装置7可以用于实施上述图4至图6所述实施例中所述的方法技术方案。
具体地,参考图7,本实施例所述应用程序界面跳转的单向路径锚点记忆装置7可以包括:处理模块71,用于根据界面有向网络图计算从所述应用程序的源界面跳转到目标界面的跳转路径,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息;锚点记录模块72,当所述跳转路径包含单向路径,且从所述单向路径的起点界面执行跳转到达的实际界面不是所述单向路径的终点界面时,将所述单向路径记录为锚点;确定模块73,用于针对所述锚点执行至少一轮跳转操作,并根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径,直至按所述跳转路径跳转到达所述终点界面。
关于所述应用程序界面跳转的单向路径锚点记忆装置7的工作原理、工作方式的更多内容,可以参照上述图4至图6中的相关描述,这里不再赘述。
进一步地,本发明实施例还公开一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述图1和图2所示实施例中所述的方法技术方案。或者,所述计算机程序被处理器运行时执行上述图4至图6所示实施例中所述的方法技术方案。优选地,所述存储介质可以包括诸如非挥发性(non-volatile)存储器或者非瞬态(non-transitory)存储器等计算机可读存储介质。所述存储介质可以包括ROM、RAM、磁盘或光盘等。
进一步地,本发明实施例还公开一种终端,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行上述图1和图2所示实施例中所述的方法技术方案。或者,所述处理器运行所述计算机程序时执行上述图4至图6所示实施例中所述的方法技术方案。具体地,所述终端可以为安装有所述应用程序的终端设备。
进一步地,本发明实施例还公开一种终端,所述终端包括如图7所示应用程序界面跳转的单向路径锚点记忆装置7。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (14)
1.一种应用程序界面跳转的单向路径锚点记忆方法,其特征在于,包括:
根据界面有向网络图计算从所述应用程序的源界面跳转到目标界面的跳转路径,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息;
当所述跳转路径包含单向路径,且从所述单向路径的起点界面执行跳转到达的实际界面不是所述单向路径的终点界面时,将所述单向路径记录为锚点;
针对所述锚点执行至少一轮跳转操作,并根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径,直至按所述跳转路径跳转到达所述终点界面。
2.根据权利要求1所述的单向路径锚点记忆方法,其特征在于,所述跳转操作结果包括每轮跳转操作引起的单向路径跳转界面变化,以及不同轮跳转操作之间的关系。
3.根据权利要求2所述的单向路径锚点记忆方法,其特征在于,所述根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径包括:
根据所述历次跳转操作结果确定非互斥的跳转操作组合;
以当前界面为起点、所述终点界面为终点,根据所述界面有向网络图和所述跳转操作组合计算下一轮跳转操作时的跳转路径。
4.根据权利要求3所述的单向路径锚点记忆方法,其特征在于,所述根据所述历次跳转操作结果确定非互斥的跳转操作组合包括:
根据所述历次跳转操作结果从所述至少一轮跳转操作中选取有效操作;
将跳转到达的实际界面不同的多轮有效操作确定为所述非互斥的跳转操作组合。
5.根据权利要求4所述的单向路径锚点记忆方法,其特征在于,所述有效操作是指完成一轮跳转操作后使得单向路径跳转操作到达的实际界面,与执行该轮跳转操作之前单向路径跳转操作到达的实际界面不同。
6.根据权利要求1所述的单向路径锚点记忆方法,其特征在于,在按跳转路径进行跳转期间,以经过所述锚点为单轮跳转操作的完成标志。
7.根据权利要求6所述的单向路径锚点记忆方法,其特征在于,单轮跳转操作包括至少一次界面跳转动作,其中每次界面跳转动作包括对应的操作信息。
8.根据权利要求7所述的单向路径锚点记忆方法,其特征在于,所述界面跳转动作对应的操作信息包括源界面的界面唯一标识、实际跳转界面的界面唯一标识以及被操作的元素或布局的唯一标识。
9.根据权利要求1所述的单向路径锚点记忆方法,其特征在于,所述单向路径是指所述界面有向网络图中不存在替代路径的跳转路径,其中,所述替代路径为从其他界面跳转至所述终点界面的跳转路径,所述其他路径是指所述界面有向网络图中除了所述起点界面之外的界面。
10.根据权利要求1所述的单向路径锚点记忆方法,其特征在于,所述锚点包括所述起点界面的界面唯一标识、所述终点界面的界面唯一标识以及被操作的元素或布局的唯一标识。
11.根据权利要求1所述的单向路径锚点记忆方法,其特征在于,所述界面有向网络图是历史上对所述应用程序进行自动化测试得到的,所述自动化测试包括如下步骤:
A.根据当前界面中的元素、布局以及当前界面对应的活动生成所述当前界面的界面唯一标识,其中,所述界面唯一标识用于唯一地表征所述应用程序的界面;
B.选择所述当前界面上未探索过的测试项进行探索,其中,所述测试项包括所述当前界面上的元素或布局,以及针对所述元素或布局的操作类型;
C.基于本次探索跳转得到的目标界面更新界面有向网络图;
D.将所述目标界面确定为所述当前界面并重复执行步骤A至步骤C,直至所述应用程序的所有界面的所有测试项均探索完成。
12.一种应用程序界面跳转的单向路径锚点记忆装置,其特征在于,包括:
处理模块,用于根据界面有向网络图计算从所述应用程序的源界面跳转到目标界面的跳转路径,其中,所述界面有向网络图用于描述所述应用程序的各个界面之间的跳转路径及触发跳转的操作信息;
锚点记录模块,当所述跳转路径包含单向路径,且从所述单向路径的起点界面执行跳转到达的实际界面不是所述单向路径的终点界面时,将所述单向路径记录为锚点;
确定模块,用于针对所述锚点执行至少一轮跳转操作,并根据历次跳转操作结果以及所述界面有向网络图确定下一轮跳转操作时的跳转路径,直至按所述跳转路径跳转到达所述终点界面。
13.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器运行时执行权利要求1至11任一项所述方法的步骤。
14.一种终端,包括如权利要求12所述的装置,或者包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机程序,其特征在于,所述处理器运行所述计算机程序时执行权利要求1至11任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110025141.9A CN112835785B (zh) | 2021-01-08 | 2021-01-08 | 应用程序界面跳转的单向路径锚点记忆方法及装置、存储介质、终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110025141.9A CN112835785B (zh) | 2021-01-08 | 2021-01-08 | 应用程序界面跳转的单向路径锚点记忆方法及装置、存储介质、终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112835785A true CN112835785A (zh) | 2021-05-25 |
CN112835785B CN112835785B (zh) | 2022-09-27 |
Family
ID=75928994
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110025141.9A Active CN112835785B (zh) | 2021-01-08 | 2021-01-08 | 应用程序界面跳转的单向路径锚点记忆方法及装置、存储介质、终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112835785B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107168705A (zh) * | 2017-05-11 | 2017-09-15 | 电子科技大学 | 图形界面语义描述系统及其建立方法和操作路径生成方法 |
CN109558307A (zh) * | 2017-09-26 | 2019-04-02 | 卓望数码技术(深圳)有限公司 | 一种游戏程序的测试方法及系统 |
CN109857668A (zh) * | 2019-02-03 | 2019-06-07 | 苏州市龙测智能科技有限公司 | Ui自动化功能测试方法、测试装置、测试设备及存储介质 |
CN110795181A (zh) * | 2019-09-18 | 2020-02-14 | 北京你财富计算机科技有限公司 | 基于跳转协议的应用程序界面展示方法、装置及电子设备 |
CN111338954A (zh) * | 2020-02-26 | 2020-06-26 | 平安银行股份有限公司 | 一种测试报告的生成方法及设备 |
CN111694756A (zh) * | 2020-07-31 | 2020-09-22 | 北京字节跳动网络技术有限公司 | 一种应用程序测试方法及装置 |
US20200342029A1 (en) * | 2017-12-06 | 2020-10-29 | DataWalk Spólka Akcyjna | Systems and methods for querying databases using interactive search paths |
-
2021
- 2021-01-08 CN CN202110025141.9A patent/CN112835785B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107168705A (zh) * | 2017-05-11 | 2017-09-15 | 电子科技大学 | 图形界面语义描述系统及其建立方法和操作路径生成方法 |
CN109558307A (zh) * | 2017-09-26 | 2019-04-02 | 卓望数码技术(深圳)有限公司 | 一种游戏程序的测试方法及系统 |
US20200342029A1 (en) * | 2017-12-06 | 2020-10-29 | DataWalk Spólka Akcyjna | Systems and methods for querying databases using interactive search paths |
CN109857668A (zh) * | 2019-02-03 | 2019-06-07 | 苏州市龙测智能科技有限公司 | Ui自动化功能测试方法、测试装置、测试设备及存储介质 |
CN110795181A (zh) * | 2019-09-18 | 2020-02-14 | 北京你财富计算机科技有限公司 | 基于跳转协议的应用程序界面展示方法、装置及电子设备 |
CN111338954A (zh) * | 2020-02-26 | 2020-06-26 | 平安银行股份有限公司 | 一种测试报告的生成方法及设备 |
CN111694756A (zh) * | 2020-07-31 | 2020-09-22 | 北京字节跳动网络技术有限公司 | 一种应用程序测试方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112835785B (zh) | 2022-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Harman et al. | Pareto optimal search based refactoring at the design level | |
CN107622008B (zh) | 一种应用页面的遍历方法和装置 | |
KR101637371B1 (ko) | 스마트기기용 어플리케이션의 테스트 시스템 및 그 방법 | |
CN109189374A (zh) | 基于对象引用链的对象构造代码生成方法及系统 | |
CN109189469A (zh) | 基于反射的安卓应用微服务化方法及系统 | |
CN110162457A (zh) | 用户界面的测试方法、装置、设备及存储介质 | |
CN112783764B (zh) | 应用程序的自动化测试方法及装置、存储介质、终端 | |
CN110221959B (zh) | 应用程序的测试方法、设备以及计算机可读介质 | |
CN110147327B (zh) | 一种基于多粒度的web自动化测试管理方法 | |
CN110046088A (zh) | 一种接口测试方法、装置及设备 | |
CN109240666A (zh) | 基于调用栈和依赖路径的函数调用代码生成方法及系统 | |
CN112835787B (zh) | 应用程序界面跳转的路径纠正方法及装置、存储介质、终端 | |
CN112835786B (zh) | 应用程序界面跳转的最优路径计算方法及装置、存储介质、终端 | |
CN113918126B (zh) | 一种基于图算法的ai建模流程编排方法和系统 | |
US20160019318A1 (en) | Problem structure extraction support system, problem structure extraction support method, and program | |
CN112835785B (zh) | 应用程序界面跳转的单向路径锚点记忆方法及装置、存储介质、终端 | |
CN107786869B (zh) | 一种电视设备菜单路径生成方法、装置及存储介质 | |
CN113220564A (zh) | 页面的自动化测试方法、装置、设备以及存储介质 | |
Wilde et al. | Merge‐Tree: Visualizing the integration of commits into Linux | |
CN107807993B (zh) | 一种网页历史记录功能的实现方法及装置 | |
CN115705291A (zh) | 数据处理方法、装置和计算机可读存储介质 | |
CN116991956B (zh) | 一种基于eda的信号交互方法、电子设备及存储介质 | |
CN117610505B (zh) | 一种基于标准模型的数据处理方法及装置 | |
CN116185520B (zh) | 一种安卓调用图构建方法、系统、设备及介质 | |
CN111124144B (zh) | 输入数据的处理方法和装置 |
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 |