CN112148608B - 一种基于控件功能标注的移动端自动化软件测试方法 - Google Patents
一种基于控件功能标注的移动端自动化软件测试方法 Download PDFInfo
- Publication number
- CN112148608B CN112148608B CN202011014912.6A CN202011014912A CN112148608B CN 112148608 B CN112148608 B CN 112148608B CN 202011014912 A CN202011014912 A CN 202011014912A CN 112148608 B CN112148608 B CN 112148608B
- Authority
- CN
- China
- Prior art keywords
- control
- interface
- controls
- software
- tested
- 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.)
- Active
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/3684—Test management for test design, e.g. generating new test cases
-
- 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/3688—Test management for test execution, e.g. scheduling of test suites
Abstract
本发明属于软件测试的技术领域,公开了一种基于控件功能标注的移动端自动化软件测试方法,对待测软件的各个界面中的所有可交互控件进行功能标注,建立界面功能性控件模型,进而生成快速兼容性测试用例、初始界面快捷进入函数、单界面稳定性测试用例和跳出控件屏蔽黑名单,自动完成对待测软件的测试。本发明通过对可交互控件进行功能性标注,高效自动地产生了UI自动化遍历测试用例,使得开发人员能精准定位、复现软件的兼容性问题,最终节省开发人员在兼容性测试上投入的大量人工时间与精力。
Description
技术领域
本发明涉及软件测试的技术领域,尤其涉及一种基于控件功能标注的移动端自动化软件测试方法。
背景技术
由于安卓移动操作系统的碎片化,厂商对安卓系统做不同程度的定制化,导致设备差异广泛存在,使得App开发人员需要耗费大量的时间与精力来进行不同机型不同版本下的兼容性测试。修复设备差异带来的兼容性的问题能大大提高使用者的用户体验。然而,由于差异化设备数量众多,每年更有大量新增设备,因此需要自动化的测试方法高效自动地在各个硬件设备上探索App的各个功能,并标出潜在的兼容性差异。
App开发人员需要高效的工具来帮助找出App存在的兼容性问题以及导致该问题的具体控件。除了需要对不同设备、不同安卓版本组合进行兼容性测试外,开发人员需要对App每一项功能进行重复操作。这些测试既需要大量的重复人工工作,又需要通过不同配置来实现移动App不同的兼容性测试需求,很多开发人员对此浪费了大量的人工时间与精力。业界自动化测试方案普遍采用UI自动化脚本或者Monkey随了机测试的方式,但是UI自动化脚本的编写周期长、维护成本更高、稳定性差。一些Monkey测试方法,如一种基于Android的自动化软件黑盒测试系统及方法CN103336742B,需要人工编写脚本提供初始输入,且无法场景复现,精准的定位产生兼容性问题的控件,而一种Android测试事件记录回放方法及装置CN102999419B,需将Monkey随机事件转换为脚本,测试用例冗余,浪费大量时间,且无法提供从任意时间回放测试场景来定位问题的能力。
发明内容
本发明提供了一种基于控件功能标注的移动端自动化软件测试方法,解决了现有自动化测试方法的编写周期长、维护成本更高、稳定性差等问题。
本发明可通过以下技术方案实现:
一种基于控件功能标注的移动端自动化软件测试方法,对待测软件的各个界面中的所有可交互控件进行功能标注,建立界面功能性控件模型,进而生成快速兼容性测试用例、初始界面快捷进入函数、单界面稳定性测试用例和跳出控件屏蔽黑名单,自动完成对待测软件的测试。
进一步,采用深度优先探索的方式遍历整个待测软件的各个界面,在遍历的过程中,对每个界面的信息进行结构化分析,筛选出所有可交互控件,然后根据可交互控件被点击时产生的行为,对其进行相应的功能属性标注。
进一步,根据功能属性不同,将所有可交互控件划分为Portal控件、Back控件、弹框控件Popup控件、输入控件EditText控件、标签卡控件Tab控件、普通控件Normal控件和同构控件Isomorphic控件。
进一步,进行相应的功能性标注的方法包括以下步骤:
S1、使用Android系统内置的uiautomator系统服务,自动启动待测软件并截取待测软件启动后界面上的控件结构;
S2、通过adb shell dumpsys activity activities命令,获取系统界面访问堆栈;
S3、遍历S1中当前界面上的所有控件,筛选出class属性是待测软件,并且clickable属性为true的控件,组成未遍历的可交互控件集合;
S4、遍历S1中当前界面上的所有控件,对每个控件构造其对应的特征字符串,将具有相同的特征字符串的且为S3中的可交互控件,标注为同构控件Isomorphic控件;
S5、从未遍历的可交互控件集合中剩余的可交互控件中任取一个,根据其bounds属性参数计算其中心位置(x+w/2,y+h/2),使用adb shell input命令接收中心位置为参数,模拟用户点击中心位置,并在完成后,重复S1获取对应界面的控件结构,重复S2获取界面访问堆栈;
S6、如果S5中获取的界面访问堆栈有新增界面,则标注此时S5中选取的可交互控件为Portal控件,
如果界面访问堆栈有减少,则标注此时S5中选取的可交互控件为Back控件,
如果界面访问堆栈没有变化,则执行S7-S9;
S7、执行adb shell dumpsys window InputMethod命令,并检查输出,如果发现有“mHasSurface”字段,则标注为输入控件即EditText控件,
执行adb shell dumpsys window windows命令,并检查输出,如果“mCurrentFocus”字段的popup不为空,则标注为弹框控件即Popup控件;
S8、如果与S5中选取的可交互控件交互后,重复S1获取的控件结构发生变化或者执行adb shell dumpsys activity top命令,结果“added fragments”产生变化,则标注为标签卡控件即Tab控件;
S9、如果非S4、S6、S7、S8所述的情况,则标注为普通控件即Normal控件;
S10、重复步骤S5-S9,直到当前界面的未遍历的可交互控件集合中所有的可交互控件都被标注;
然后通过Back控件回到上一个界面,重复S4-S9,直到上一个界面所有的控件也被标注完成;
然后通过S6中标注的Portal控件,进入还存在未遍历可交互控件的界面,重复S4-S9,直到待测软件的所有界面中的所有可交互控件全部被标注。
进一步,构造对应的特征字符串的方法包括:从通过S1获取的控件结构中最深子节点对应的可交互控件开始,对同层的节点进行递归遍历,对于所遇到的每个可交互控件,提取出当前控件的index属性,resource-id属性和class属性进行拼接,组成对应的特征字符串;
在同层的所有节点遍历完成之后,递归遍历父节点所在的层次,直到遍历完所有的节点为止,其中父节点对应的可交互控件的特征字符串为左孩子特征字符串与右孩子特征字符串的拼接。
进一步,每次对S5选取的可交互控件进行模拟用户点击输入后,采用弹性延迟适配机制延迟指定时间,再执行S6-S9进行标注。
进一步,所述弹性延迟适配机制设置为在S5中选取的可交互控件后,等待第一指定时间后,立即执行S2重新获取界面访问堆栈,如果界面没有变化,直接执行S7-S9进行标注;如果界面发生变化,则继续等待第二指定时间后,执行S6进行标注。
进一步,所述界面功能性控件模型设置为连通图数据结构,其中的每个节点代表一个界面activity,每条边则设置为Portal控件或Back控件,且有方向性,每个节点均包含其所代表界面中的所有的Normal控件、PopUp控件、EditText控件、Tab控件的完整信息。
进一步,所述快速兼容性测试用例用于完成待测软件的兼容性测试,所述初始界面快捷进入函数用于完成待测软件的初始界面进入测试,所述跳出控件屏蔽黑名单用于完成待测软件的稳定性测试,所述单界面稳定性测试用例集成初始界面快捷进入函数、跳出控件屏蔽黑名单用于完成待测软件的压力测试。
进一步,利用所述快速兼容性测试用例,首先,同时在多台不同型号的测试设备上启动待测软件,从进入待测软件的界面开始,每次从界面功能性控件模型中选取一个Portal或者Back可交互控件进行交互,进入另一个界面,直到遍历完所有界面为止,在遍历的过程中,配合软件崩溃捕捉技术,快速验证待测软件的各个功能在不同机型上是否存在兼容性问题导致的崩溃;
利用所述初始界面快捷进入函数,首先,通过adb shell am start-n launcher_activity命令启动待测软件,再通过最短路径算法产生从初始界面到待测界面的最短路径,进入待测软件的待测界面,在待测界面执行测试脚本,完成测试。
利用所述跳出控件屏蔽黑名单,筛选出待测界面在跳出控件屏蔽黑名单中的可交互控件不作为测试用例的使用,或者判定待触发的可交互控件的bounds属性是否存在于跳出控件屏蔽黑名单中控件的bounds属性之中,若是,则阻止触发;
利用所述单界面稳定性测试用例,首先,通过初始界面快捷进入函数启动待测软件,进入待测界面,筛选出不在跳出控件屏蔽黑名单中的可交互控件集合,每次从中选取多个可交互控件进行交互,完成待测软件的压力测试。
本发明有益的技术效果在于:
首先采用深度优先探索的方式遍历整个待测软件,在遍历的过程中,首先对整个界面的信息进行结构化分析,筛选出所有可被点击的组件,然后根据组件被点击时产生的行为,对其标注相应的属性,接着在动态探索的过程中,对已经标注过属性的组件进行建模,得到界面功能性控件模型,根据此模型,自动产生快速兼容性测试用例,初始界面快捷进入函数,单界面稳定性测试用例和跳出控件屏蔽黑名单。该方法不仅能通过快速兼容性测试用例帮助开发人员快速验证待测软件的兼容性问题,并且可以通过将初始界面快捷进入函数和跳出控件屏蔽黑名配合测试脚本,提高测试脚本的稳定性,简化测试环境的配置,能广泛应用于手机终端、智能手表、车载电视等各类移动设备软件的测试,减少开发人员开发与维护测试脚本的成本。
附图说明
图1为本发明的总体流程示意图;
图2为本发明的某个界面上的控件进行功能标注的示意图。
具体实施方式
下面结合附图及较佳实施例详细说明本发明的具体实施方式。
如图1和2所示,本发明提供了一种基于控件功能标注的移动端自动化软件测试方法,通过对待测软件的各个界面中的所有可交互控件进行功能标注,建立界面功能性控件模型,进而生成快速兼容性测试用例、初始界面快捷进入函数、单界面稳定性测试用例和跳出控件屏蔽黑名单,自动完成对待测软件的测试。这样,通过对可交互控件进行功能性标注,高效自动地产生了UI自动化遍历测试用例,使得开发人员能精准定位、复现App的兼容性问题,最终节省开发人员在兼容性测试上投入的大量人工时间与精力。
具体过程如下:
S1.使用Android系统内置的uiautomator系统服务自动启动待测软件,并截取待测软件启动后屏幕上的控件结构,即执行adb shell uiautomator dump命令。该屏幕控件结构为XML格式,每个XML结点代表一个屏幕控件,例如输入框、图片框、按钮等,结点间有树形层次结构,表示控件的嵌套关系。每个控件都包含多个不同的属性,如下面的XML示例,其中,index属性表示同级多个控件的叠放位置,数字越大表示越在上层;resource-id属性表示控件的识别名,可以不唯一;class属性表示控件所属的软件,用于区分屏幕上的系统提供导航控件以及属于待测软件的控件;clickable属性表示控件是否可以交互;bounds属性是四个整数组合,分别表示控件的左上坐标位置(x,y)以及宽度和高度。
XML示例:
<node index="0"resource-id="resourceid"class="com.xxx.xxx"clickable="true"...bounds=[0,0][1600,2452]>
<node index="0"resource-id="resourceid1"class="com.xxx.xxx"clickable="true"...bounds=[0,0][1600,2452]>
<node index="1"resource-id="resourceid2"class="com.xxx.xxx"clickable="true"...bounds=[0,0][1611,2342]>
<node index="2"resource-id="resourceid3"class="com.xxx.xxx"clickable="true"...bounds=[0,0][1900,3332]>
<node/>
S2.待测软件是由多个界面组成的,每个界面在Android系统里都被称为一个activity。通过adb shell dumpsys activity activities命令,获取系统的界面访问堆栈,该界面访问堆栈是一个堆栈Stack数据结构,每一项为一个待测软件的界面,用户在使用软件过程中进入新的界面会触发压栈Push操作,向界面访问堆栈新增进入的待测软件界面;用户按下回退键或者等效功能按键,会触发退栈Pop操作,去除界面访问堆栈的栈顶界面并进入之前的界面。
S3.筛选S1中当前界面的所有控件即XML结构中的每一个结点,筛选出class属性是待测软件,并且clickable属性为true的控件,组成未遍历的可交互控件集合。
S4.识别同构控件:
同构控件,即Isomorphic控件,该种类型的控件被触发后,会产生相同的效果。S1中的屏幕控件结构中的每个XML节点的多个属性值在一般情况下不会同时相同,例如,两个XML节点的index、resource-id、class属性不会取完全相同的值,若存在多个XML节点这三个属性的值相同,但填充数据的属性,例如text属性值不同,那么这些XML节点为结构相同,数据不同的同构控件,例如ListView/RecyclerView/ViewPager,这些控件中的每个子控件具有相同的结构,且每个子控件都可交互,但是依次点击每个子控件会浪费大量时间,因此,本发明通过构造特征字符串的方式,识别同构控件,减少大量重复测试用例与节省时间。
构造特征字符串:
对S1中XML格式的屏幕控件结构进行分析,从最深子节点的控件开始,对同层次的节点进行遍历。对于所遇到的每个控件,提取出当前控件的index属性,resource-id属性和class属性进行拼接,组成特征字符串,在同层所有节点遍历完成之后,遍历父节点所在的层次,其中父节点控件的特征字符串为左孩子特征字符串与右孩子特征字符串的拼接,均采用递归遍历方式,直到遍历完所有的节点为止。
通过这种构造方式,每个节点的特征字符串具有唯一性,在不同结构下节点的字符串具有差异性,而相同结构的节点的特征字符串则相同,将这些具有相同特征字符串的节点标注为Isomorphic控件。
在探索Isomorphic控件时,如果未采用本发明的控件标注,会遍历每一个Isomorphic控件,而这些控件仅仅是在填充内容上的不同,因此会浪费大量的时间,而在经过本发明的控件标注后,遇到Isomorphic控件则会只选择其中一个进行访问,可以有效减少探索时间。
S5.从未遍历的可交互控件集合中剩余的可交互控件任取一个,即从S3获取的集合中除去S4标注的同构控件,根据其bounds属性计算中心位置(x+w/2,y+h/2),使用adbshell input命令接收中心位置为参数,模拟用户点击输入,完成后重复S1获取屏幕控件结构,重复S2获取界面访问堆栈。
S6.识别Portal控件以及Back控件:
识别出这两类控件,可以帮助测试生成算法准确地进入或者退出某个软件界面。
如果S5中获取的界面访问堆栈有新增界面,则说明S5中选取的可交互控件的功能特性为进入一个新的界面,标注为Portal控件。
Portal控件到达的目标界面分为两类,一类是待测软件中存在的界面,一类是待测软件外的界面,例如广告界面,系统设置界面等。
如果界面访问堆栈有减少,则说明S5中选取的可交互控件的功能特性等效于设备的回退按键,定义为Back控件。
如果界面访问堆栈没有变化,则将遵循S7、S8、S9情况对S5选取的可交互控件进行分类。
S7.识别弹框控件Popup控件和输入控件EditText控件:
如果与S5中选取的可交互控件交互后,界面访问堆栈没有变化,继续通过以下步骤识别:
执行adb shell dumpsys window InputMethod命令,并检查输出,如果发现有“mHasSurface”字段,说明S5中选取的控件导致了拉起输入法,即等效于输入控件,标注该控件为EditText控件。
执行adb shell dumpsys window windows命令,并检查输出,如果“mCurrentFocus”字段的popup不为空,说明S5中选取的控件触发了弹框,标记该控件为弹框控件Popup控件。
标注这两类控件能够有效地在测试用例中生成字符串输入的测试代码以及更有效地探索隐藏在弹框菜单中的功能。
S8.识别标签卡控件Tab控件:
如果与S5中选取的控件交互后,重复S1获取的屏幕控件结构发生变化或者执行adb shell dumpsys activity top命令,结果的“added fragments”产生变化,即表示与该控件交互导致当前界面局部区域内的原有控件会被替换为新的控件,即标签卡功能,标注该控件为标签卡控件Tab控件。
标注该种类型的控件能帮助测试用例探索到隐藏在标签卡里的待测软件内容和功能。
S9.如果非S4,S6,S7,S8所述的情况,标注该控件为普通控件Normal控件,这类控件直接在当前界面完成其功能并且不会产生任何界面控件的增减变化,常见有“点赞”按钮、“收藏”按钮等。
S10.经过S5选取的可交互控件应被准确地标注为S6-S9中的任意一类功能性控件。重复步骤S5,直到当前界面所有的可交互控件都被功能性标注;
然后通过Back控件回到上一个界面,重复S4-S9,直到上一个界面所有的控件也被标注完成;
然后通过S6中识别出的Portal控件,进入还存在未遍历可交互控件的界面,重复S4-S9,直到待测软件所有界面的所有可交互控件都被标注。
S11.完成S10后生成待测软件完整的界面功能性控件模型,下文简称为模型,其形式为连通图数据结构directed graph,图中的每个节点都代表一个activity,每条边则是由S6中定义的Portal控件或Back控件,表示通过该控件可以从连接的一个activity到达另一个activity,并且有方向性,反之不成立。每个activity节点进而包含其所有的Normal控件、PopUp控件、EditText控件、Tab控件的完整信息,可从S1的界面控件结构中获取。除此之外,Tab控件还包含了与该Tab控件交互后会引入的新的控件的集合。
S12.每次对S5选取的可交互控件模拟用户点击输入后,需要延迟一段时间,因为界面可能需要时间进行更新。默认等待时间可设置为4秒,保证S6-S9获取的信息稳定。
由于各类控件在被触发后到界面稳定的时间不尽相同,例如Normal控件交互后基本是即刻稳定,而Portal/Back控件需要4秒才能稳定,优选地,本发明采用弹性延迟适配机制,即在S5交互后等待1秒立即执行S2重新获取界面访问堆栈,如果界面没有变化,可以判定该控件非S6所标注的控件Portal/Back控件,直接判断S7-S9;如果界面发生变化,则继续等待3秒确保界面完全更新后,再执行S6进行控件标注。
总体来说,采用了弹性延迟适配机制后,非Portal和Back控件的标注时间可以从4秒减少到1秒,在实际使用中,Portal与Back控件占总控件数量的30%-50%,因此,采用弹性延迟适配机制可以节省总体标注时间42.5%-52.5%。
S13.根据S10获取的界面功能性控件模型,产生“快速兼容性测试用例”。该测试用例为测试脚本形式,包括但不仅限于常用UI自动化脚本形式,例如adb脚本、Appium脚本、uiautomator脚本、cucumber脚本、RobotFramework脚本,从启动待测软件开始,每次从模型中选取一个Portal/Back控件进行交互,进入另一个界面,直到遍历完所有界面为止。在遍历过程中,配合常用的软件崩溃捕捉技术,在多台不同型号的测试设备上运行,可以快速验证待测软件的各个主要功能在不同机型上是否存在兼容性问题导致的崩溃。
优选地,该快速兼容性测试用例采用深度优先搜索结合最短路径的方式选取Portal或者Back控件,确保可以从待测软件启动开始以最少的步数进入所有界面。
S14.根据S10获取的界面功能性控件模型,产生初始界面快捷进入函数,其功能为测试人员给定一个待测界面,本发明自动产生测试脚本,形式同S13,首先,利用adb shellam start-n launcher_activity命令启动待测软件,再通过最短路径算法产生从初始界面到待测界面的最短路径,进入待测软件的待测界面;该路径由一系列S6Portal/Back控件组成,触发这些控件到达待测软件的初始界面,从而减少测试人员编写初始界面的前置准备工作,简化测试环境配置,减少脚本冗余度,降低测试脚本的维护成本。
S15.根据S10获取的界面功能性控件模型,产生跳出控件屏蔽黑名单。跳出控件即界面中的会导致测试过程中进入其他软件或者系统的“Portal控件”,例如外连广告、进入系统设置等,而普通Portal控件被触发后到达的界面为待测软件所包括的界面,因此,在测试过程中应当避免与这类控件进行交互。测试脚本可在触发测试用例前,根据bounds属性匹配跳出控件屏蔽黑名单中的控件,若待触发的可交互控件的bounds属性存在于跳出控件屏蔽黑名单中控件的bounds属性之中,则阻止触发该测试用例,增加测试脚本的稳定性。
S16.根据S10获取的界面功能性控件模型,产生单界面稳定性测试用例。该用例为测试脚本形式,形式同S13,首先,利用S14产生的初始界面快捷进入函数从启动待测软件开始进入待测界面,然后,在待测界面上,筛选出不在S15产生的跳出控件屏蔽黑名单中的可交互控件集合,该测试用例针对筛选后的可交互控件集合产生高速随机交互,交互后立即通过系统回退键返回,模拟用户在该界面上的高频操作,完成压力测试,进而配合常用的软件崩溃捕捉技术以及软件其他的错误捕捉技术,判断该界面在高频率交互的压力下是否会发生故障。
本发明通过S10获取的界面功能性控件模型,筛选出所有符合条件的Portal控件,在测试人员编写的测试脚本或者Monkey类自动化工具需要进行界面交互时,自动检测是否是“跳出控件”,如果是,则屏蔽交互并提示。该自动化屏蔽名单可以避免测试过程中因误触“跳出控件”而导致测试失败,从而达到提高测试脚本稳定性、减少人工干预、提高测试效率的目的。
为验证本发明的有效性,我们对Google Play商店和腾讯应用市场的25个应用进行测试,涵盖主要软件类别,如新闻,音乐,视频,社交媒体,阅读,购物,制作,工具等,所有挑选的软件都有广泛的用户接受度(超过10万次下载),至少有4.3的正面评分。同时对多个应用在不同的机型和安卓系统版本下进行实验,执行S13产生的快速兼容性测试用例后,共识别出80个兼容性问题,每个软件大约有3个问题。将S16产生的单界面稳定性测试用例集成S15产生的跳出控件屏蔽黑名单与S14产生的初始界面快捷进入函数,执行测试用例后,共找出了25个软件崩溃问题,每次执行减少了20%-30%的配置工作,在执行过程中,未发生跳出软件界面行为,无需人工干预重新拉起软件操作。
实验证明,本发明产生的快速兼容性测试用例能高效规模化地找出软件存在的兼容性问题,跳出控件屏蔽黑名单能提高脚本执行的稳定性,减少软件拉起的次数,降低人工参与度,初始界面快捷进入函数可以帮助开发者简化测试环境配置。跳出控件屏蔽黑名单和初始界面快捷进入函数配合单界面稳定性测试用例能高效稳定地对软件界面进行压力测试。本发明能广泛地适用于手机终端、车载电视、智能手表等各类移动设备的软件,帮助开发者提高脚本的稳定性,简化开发者测试环境的配置,高效的诊断软件的兼容性问题。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这些仅是举例说明,在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,因此,本发明的保护范围由所附权利要求书限定。
Claims (7)
1.一种基于控件功能标注的移动端自动化软件测试方法,其特征在于:对待测软件的各个界面中的所有可交互控件进行功能标注,建立界面功能性控件模型,进而生成快速兼容性测试用例、初始界面快捷进入函数、单界面稳定性测试用例和跳出控件屏蔽黑名单,自动完成对待测软件的测试;
采用深度优先探索的方式遍历整个待测软件的各个界面,在遍历的过程中,对每个界面的信息进行结构化分析,筛选出所有可交互控件,然后根据可交互控件被点击时产生的行为,对其进行相应的功能属性标注;
根据功能属性不同,将所有可交互控件划分为Portal控件、Back控件、弹框控件Popup控件、输入控件EditText控件、标签卡控件Tab控件、普通控件Normal控件和同构控件Isomorphic控件;
进行相应的功能性标注的方法包括以下步骤:
S1、使用Android系统内置的uiautomator系统服务,自动启动待测软件并截取待测软件启动后界面上的控件结构;
S2、通过adb shell dumpsys activity activities命令,获取系统界面访问堆栈;
S3、遍历S1中当前界面上的所有控件,筛选出class属性是待测软件,并且clickable属性为true的控件,组成未遍历的可交互控件集合;
S4、遍历S1中当前界面上的所有控件,对每个控件构造其对应的特征字符串,将具有相同的特征字符串的且为S3中的可交互控件,标注为同构控件Isomorphic控件;
S5、从未遍历的可交互控件集合中剩余的可交互控件中任取一个,根据其bounds属性参数计算其中心位置(x+w/2,y+h/2),使用adb shell input命令接收中心位置为参数,模拟用户点击中心位置,并在完成后,重复S1获取对应界面的控件结构,重复S2获取界面访问堆栈;
S6、如果S5中获取的界面访问堆栈有新增界面,则标注此时S5中选取的可交互控件为Portal控件,
如果界面访问堆栈有减少,则标注此时S5中选取的可交互控件为Back控件,
如果界面访问堆栈没有变化,则执行S7-S9;
S7、执行adb shell dumpsys window InputMethod命令,并检查输出,如果发现有“mHasSurface”字段,则标注为输入控件即EditText控件,
执行adb shell dumpsys window windows命令,并检查输出,如果“mCurrentFocus”字段的popup不为空,则标注为弹框控件即Popup控件;
S8、如果与S5中选取的可交互控件交互后,重复S1获取的控件结构发生变化或者执行adb shell dumpsys activity top命令,结果“added fragments”产生变化,则标注为标签卡控件即Tab控件;
S9、如果非S4、S6、S7、S8所述的情况,则标注为普通控件即Normal控件;
S10、重复步骤S5-S9,直到当前界面的未遍历的可交互控件集合中所有的可交互控件都被标注;
然后通过Back控件回到上一个界面,重复S4-S9,直到上一个界面所有的控件也被标注完成;
然后通过S6中标注的Portal控件,进入还存在未遍历可交互控件的界面,重复S4-S9,直到待测软件的所有界面中的所有可交互控件全部被标注。
2.根据权利要求1所述的基于控件功能标注的移动端自动化软件测试方法,其特征在于构造对应的特征字符串的方法包括:从通过S1获取的控件结构中最深子节点对应的可交互控件开始,对同层的节点进行递归遍历,对于所遇到的每个可交互控件,提取出当前控件的index属性,resource-id属性和class属性进行拼接,组成对应的特征字符串;
在同层的所有节点遍历完成之后,递归遍历父节点所在的层次,直到遍历完所有的节点为止,其中父节点对应的可交互控件的特征字符串为左孩子特征字符串与右孩子特征字符串的拼接。
3.根据权利要求1所述的基于控件功能标注的移动端自动化软件测试方法,其特征在于:每次对S5选取的可交互控件进行模拟用户点击输入后,采用弹性延迟适配机制延迟指定时间,再执行S6-S9进行标注。
4.根据权利要求3所述的基于控件功能标注的移动端自动化软件测试方法,其特征在于:所述弹性延迟适配机制设置为在S5中选取的可交互控件后,等待第一指定时间后,立即执行S2重新获取界面访问堆栈,如果界面没有变化,直接执行S7-S9进行标注;如果界面发生变化,则继续等待第二指定时间后,执行S6进行标注。
5.根据权利要求1所述的基于控件功能标注的移动端自动化软件测试方法,其特征在于:所述界面功能性控件模型设置为连通图数据结构,其中的每个节点代表一个界面activity,每条边则设置为Portal控件或Back控件,且有方向性,每个节点均包含其所代表界面中的所有的Normal控件、PopUp控件、EditText控件、Tab控件的完整信息。
6.根据权利要求5所述的基于控件功能标注的移动端自动化软件测试方法,其特征在于:所述快速兼容性测试用例用于完成待测软件的兼容性测试,所述初始界面快捷进入函数用于完成待测软件的初始界面进入测试,所述跳出控件屏蔽黑名单用于完成待测软件的稳定性测试,所述单界面稳定性测试用例集成初始界面快捷进入函数、跳出控件屏蔽黑名单用于完成待测软件的压力测试。
7.根据权利要求6所述的基于控件功能标注的移动端自动化软件测试方法,其特征在于:利用所述快速兼容性测试用例,首先,同时在多台不同型号的测试设备上启动待测软件,从进入待测软件的界面开始,每次从界面功能性控件模型中选取一个Portal或者Back可交互控件进行交互,进入另一个界面,直到遍历完所有界面为止,在遍历的过程中,配合软件崩溃捕捉技术,快速验证待测软件的各个功能在不同机型上是否存在兼容性问题导致的崩溃;
利用所述初始界面快捷进入函数,首先,通过adb shell am start-nlauncher_activity命令启动待测软件,再通过最短路径算法产生从初始界面到待测界面的最短路径,进入待测软件的待测界面,在待测界面执行测试脚本,完成测试;
利用所述跳出控件屏蔽黑名单,筛选出待测界面在跳出控件屏蔽黑名单中的可交互控件不作为测试用例的使用,或者判定待触发的可交互控件的bounds属性是否存在于跳出控件屏蔽黑名单中控件的bounds属性之中,若是,则阻止触发;
利用所述单界面稳定性测试用例,首先,通过初始界面快捷进入函数启动待测软件,进入待测界面,筛选出不在跳出控件屏蔽黑名单中的可交互控件集合,每次从中选取多个可交互控件进行交互,完成待测软件的压力测试。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011014912.6A CN112148608B (zh) | 2020-09-24 | 2020-09-24 | 一种基于控件功能标注的移动端自动化软件测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011014912.6A CN112148608B (zh) | 2020-09-24 | 2020-09-24 | 一种基于控件功能标注的移动端自动化软件测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112148608A CN112148608A (zh) | 2020-12-29 |
CN112148608B true CN112148608B (zh) | 2021-11-05 |
Family
ID=73897947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011014912.6A Active CN112148608B (zh) | 2020-09-24 | 2020-09-24 | 一种基于控件功能标注的移动端自动化软件测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112148608B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106326104A (zh) * | 2015-07-08 | 2017-01-11 | 腾讯科技(深圳)有限公司 | 终端控件测试方法及装置 |
CN106649103A (zh) * | 2016-11-25 | 2017-05-10 | 深圳大学 | 一种安卓应用程序自动化黑盒测试的方法及系统 |
CN109634831A (zh) * | 2017-10-09 | 2019-04-16 | 飞狐信息技术(天津)有限公司 | 一种Android应用程序GUI自动遍历测试方法及系统 |
CN109871316A (zh) * | 2019-01-10 | 2019-06-11 | 北京云测信息技术有限公司 | 一种控件识别方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3314440A4 (en) * | 2015-06-26 | 2019-03-20 | Intel Corporation | TECHNOLOGIES FOR DEVICE INDEPENDENT AUTOMATED APPLICATION TESTS |
-
2020
- 2020-09-24 CN CN202011014912.6A patent/CN112148608B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106326104A (zh) * | 2015-07-08 | 2017-01-11 | 腾讯科技(深圳)有限公司 | 终端控件测试方法及装置 |
CN106649103A (zh) * | 2016-11-25 | 2017-05-10 | 深圳大学 | 一种安卓应用程序自动化黑盒测试的方法及系统 |
CN109634831A (zh) * | 2017-10-09 | 2019-04-16 | 飞狐信息技术(天津)有限公司 | 一种Android应用程序GUI自动遍历测试方法及系统 |
CN109871316A (zh) * | 2019-01-10 | 2019-06-11 | 北京云测信息技术有限公司 | 一种控件识别方法和装置 |
Non-Patent Citations (1)
Title |
---|
《app控件获取之uiautomatorviewer》;lazytest;《https://www.cnblogs.com/lazytest/p/5612709.html》;20160624;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112148608A (zh) | 2020-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Memon | Automatically repairing event sequence-based GUI test suites for regression testing | |
US6986125B2 (en) | Method and apparatus for testing and evaluating a software component using an abstraction matrix | |
US6941546B2 (en) | Method and apparatus for testing a software component using an abstraction matrix | |
CN103164300A (zh) | 一种移动终端触摸屏自动测试方法及装置 | |
CN111382070B (zh) | 兼容性测试方法、装置、存储介质和计算机设备 | |
CN101996131A (zh) | 基于xml封装关键字的gui自动测试方法及自动测试平台 | |
CN102567201B (zh) | 跨模型的图形用户界面测试脚本自动修复方法 | |
CN101025686A (zh) | 一种自动化测试系统及测试脚本的生成和运行方法 | |
CN102184138A (zh) | 一种软件错误自动重现和定位的方法及系统 | |
US6763360B2 (en) | Automated language and interface independent software testing tool | |
CN107622017B (zh) | 一种通用自动化软件测试的解析方法 | |
CN104320793A (zh) | 一种手机短信自动化测试方法及系统 | |
CN114416547A (zh) | 基于测试用例的测试方法 | |
CN109284222B (zh) | 软件单元、数据处理系统中的项目测试方法、装置及设备 | |
CN112148608B (zh) | 一种基于控件功能标注的移动端自动化软件测试方法 | |
CN115344268A (zh) | 一种多平台嵌入式开发环境编译方法及装置 | |
CN101727384B (zh) | 自动测试一应用软件的控件的方法 | |
CN114168470A (zh) | 软件系统的测试方法及装置、电子设备、存储介质 | |
CN114691491A (zh) | 一种用于智慧屏的用例模板生成方法、系统及介质 | |
CN113672509A (zh) | 自动化测试方法、装置、测试平台及存储介质 | |
CN109374038B (zh) | 一种基于应用样机的核安全级仪控产品的变更测试方法 | |
CN113805861A (zh) | 基于机器学习的代码生成方法、代码编辑系统及存储介质 | |
CN112860587B (zh) | Ui自动测试方法和装置 | |
CN113688029B (zh) | 一种面向移动平台的自动化蜕变测试方法 | |
Pradhan | User interface test automation and its challenges in an industrial scenario |
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 |