UI自动化功能测试方法、测试装置、测试设备及存储介质
技术领域
本发明涉及UI功能测试技术领域,特别涉及一种UI自动化功能测试方法、测试装置、测试设备及存储介质。
背景技术
UI界面(包括APP界面或网页或可穿戴设备)是网络信息交流的重要平台,由于它承载的内容和功能具有多样性和不确定性的特点,就需要根据不同的应用需求和网络环境设计它的内容,为保证界面性能的可靠性,也需要对设计后的用户界面进行测试。
目前大多数的软件开发公司基本上使用人工测试方式,有软件测试工程师编写测试用例,然后手工对用户界面进行测试,效率低,并且容易遗漏测试用例,且无法对测试过程进行有效追溯。
基于此,用户界面功能的自动化测试技术的开发显得尤为迫切。用户界面自动化测试实则是对被测试用户界面的输入、输出进行自动化验证,即模拟用户的输入和界面按钮控件点击跳转动作,验证输入操作的输出结果。现有技术中缺乏有效发现用户界面缺陷的UI自动化功能测试方法。
发明内容
为了解决现有技术的问题,本发明提供了一种UI自动化功能测试方法、测试装置、测试设备及存储介质,利用用户界面跳转流程及配置的参数自动生成用于测试该用户界面的测试代码,并生成一目了然的测试报告,所述技术方案如下:
一方面,本发明提供了一种UI自动化功能测试方法,包括以下步骤:
获取待测试用户界面的跳转信息,所述跳转信息包括跳转前界面节点、跳转元素及跳转后界面节点;
获取根据所述跳转信息建立得到的拓扑流程图,所述拓扑流程图包括一个根界面节点和一个或多个分支路径,每个分支路径上至少有一个跳转元素及对应的跳转后界面节点;
对所述拓扑流程图进行深度遍历,根据自遍历起始节点向后的每一条完整分支路径生成与其对应的测试代码,所述测试代码包括对各个跳转元素执行用户界面跳转操作的程序;
在测试运行环境中运行所述测试代码,得到测试结果。
进一步地,所述方法还包括在获取拓扑流程图之前或之后获取断言设置结果,所述断言设置结果为对所述跳转前界面节点或跳转后界面节点中的显示元素设置的预期值;
生成测试代码包括:在跳转到对应于设置有预期值的跳转前界面节点或跳转后界面节点后引用断言操作的程序。
进一步地,所述方法还包括在获取拓扑流程图之后获取初始化参数配置结果,所述初始化参数配置结果包括测试起始界面节点及其URL,所述初始化参数配置结果用于在生成测试代码时实现参数初始化,包括:将所述遍历起始节点初始化为所述测试起始界面节点,所述测试起始界面节点可以为所述拓扑流程图中任意一个分支路径上的任意一个跳转元素所对应的跳转前界面节点。
进一步地,所述初始化参数配置结果还包括测试界面深度,所述测试界面深度的配置值大于或等于以配置的测试起始界面节点为起点的流程图最长深度值。
进一步地,所述方法还包括在获取拓扑流程图之前或之后获取输入参数配置结果,所述输入参数配置结果包括为实现跳转前界面节点跳转到相应的跳转后界面节点所需输入的参数;
生成测试代码包括:将上述输入参数配置结果赋值给相应跳转前界面节点处的输入参数元素的程序。
进一步地,所述拓扑流程图的建立步骤包括以下操作:
对应于同一跳转前界面节点的不同跳转元素形成不同的分支路径,和/或
基于第一跳转元素对应的跳转后界面节点为第二跳转元素对应的跳转前界面节点的情况,将所述第一跳转元素、第二跳转元素设为同一分支路径上的相邻跳转元素。
进一步地,所述拓扑流程图的局部或全部能够进行移动、复制、剪切和/或粘贴操作。
可选地,所述在测试运行环境中运行所述测试代码的步骤包括本地运行方式和/或云端运行方式,所述本地运行方式包括:从云端下载所述测试代码到本地计算机中,并在所述计算机中的测试软件中运行所述测试代码,得到测试结果;
所述云端运行方式包括:向云端发送运行请求,所述运行请求中包括待测试用户界面;根据所述运行请求,获取对应的测试代码;接收基于所述运行请求在云端的测试软件中运行所述测试代码得到的测试结果。
进一步地,所述测试结果包括视频、图片、和/或文字形式的测试报告,所述测试报告中或者还包括测试失败例情况说明,所述测试失败例包括界面跳转错误和/或断言判断错误的情况。
进一步地,将所述在测试运行环境中运行所述测试代码得到的每一条测试用例中的流程信息与数据信息关联并分离存储。
另一方面,本发明提供了一种UI自动化功能测试装置,包括以下模块:
跳转信息获取模块,用于获取待测试用户界面的跳转信息,所述跳转信息包括跳转前界面节点、跳转元素及跳转后界面节点;
流程图获取模块,用于获取根据所述跳转信息建立得到的拓扑流程图,所述拓扑流程图包括一个根界面节点和一个或多个分支路径,每个分支路径上至少有一个跳转元素及对应的跳转后界面节点;
代码生成模块,用于对所述拓扑流程图进行深度遍历,根据自遍历起始节点向后的每一条完整分支路径生成与其对应的测试代码,所述测试代码包括对各个跳转元素执行用户界面跳转操作的程序;
代码运行模块,用于在测试运行环境中运行所述测试代码,得到测试结果。
再一方面,本发明提供了一种UI自动化功能测试设备,包括处理器以及存储器,所述存储器中存储有程序,其特征在于,在所述处理器执行所述程序时,进行以下操作:
获取待测试用户界面的跳转信息,所述跳转信息包括跳转前界面节点、跳转元素及跳转后界面节点;
获取根据所述跳转信息建立得到的拓扑流程图,所述拓扑流程图包括一个根界面节点和一个或多个分支路径,每个分支路径上至少有一个跳转元素及对应的跳转后界面节点;
对所述拓扑流程图进行深度遍历,根据自遍历起始节点向后的每一条完整分支路径生成与其对应的测试代码,所述测试代码包括对各个跳转元素执行用户界面跳转操作的程序;
在测试运行环境中运行所述测试代码,得到测试结果。
再一方面,本发明提供了一种存储介质,用于存储程序,所述程序在被执行时进行以下操作:
获取待测试用户界面的跳转信息,所述跳转信息包括跳转前界面节点、跳转元素及跳转后界面节点;
获取根据所述跳转信息建立得到的拓扑流程图,所述拓扑流程图包括一个根界面节点和一个或多个分支路径,每个分支路径上至少有一个跳转元素及对应的跳转后界面节点;
对所述拓扑流程图进行深度遍历,根据自遍历起始节点向后的每一条完整分支路径生成与其对应的测试代码,所述测试代码包括对各个跳转元素执行用户界面跳转操作的程序;
在测试运行环境中运行所述测试代码,得到测试结果。
本发明提供的技术方案带来的有益效果如下:
a.拓扑流程图加强了对测试软件的语义支持;
b.利用代码自动生成引擎自动生成测试代码;
c.将测试用例中的流程和数据分离存储,并在产品上有效展示出来,提高测试人员的使用便捷性;
d.能够对计算机网页、移动终端网页、移动终端App、微信小程序、微信公众号,PC应用程序,工控软件等界面进行自动化测试,应用范围广泛;
e.测试报告全面准确,报告形式包括文字、图片和/或视频格式,测试过程可追溯性强,测试结果一目了然。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的UI自动化功能测试方法的流程图;
图2是本发明实施例提供的拓扑流程图的示意图;
图3是本发明实施例提供的加入参数配置和断言的UI自动化功能测试方法流程图;
图4是本发明实施例提供的UI自动化功能测试装置的模块示意图;
图5是本发明实施例提供的实际拓扑流程图的应用界面截图;
图6是本发明实施例提供的测试报告的应用界面截图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、装置、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本发明的一个实施例中,提供了一种UI自动化功能测试方法,参见图1,包括以下流程:
S1、获取待测试用户界面的跳转信息。
本发明申请保护关于UI(User Interface,用户界面)测试的技术,界面泛指用户的操作界面,包含移动APP、网页、微信小程序、微信公众号、PC应用程序、工控软件等界面,以下简称界面。
具体地,所述跳转信息包括跳转前界面节点、跳转元素及跳转后界面节点,比如:在跳转前界面节点上设有多个控件按钮,按下该控件按钮可跳转到后一界面节点,以携程网首页界面为例,跳转元素以酒店和机票为例,则分别得到订酒店界面和订机票界面;在订酒店界面输入查询条件(日期、地址或酒店类型等等),搜索得到酒店查询结果界面,在订机票界面输入查询条件(起飞城市、终点城市、日期等),搜索得到机票查询结果界面,然后选择其中一条结果条目,进入下订单界面,在下订单界面点击付款按钮,进入支付界面等等,则这里至少出现了以下跳转信息:①首页-“hotel”-订酒店界面,②首页-“air-ticket”-订机票界面,③订酒店界面-“search”-酒店查询结果界面,④订机票界面-“search”-机票查询结果界面,⑤机票查询结果界面-“term1”-下订单界面,⑥下订单界面-“pay”-支付界面,每一个跳转信息的中间项为跳转元素(即交互按钮),实际上以界面交互按钮的控件名称命名,跳转元素前后的界面节点优选以简单明了的原则自由命名。
S2、获取根据所述跳转信息建立得到的拓扑流程图。
具体地,所述拓扑流程图包括一个根界面节点和一个或多个分支路径,每个分支路径上至少有一个跳转元素及对应的跳转后界面节点,其具体的建立过程如下:
对应于同一跳转前界面节点的不同跳转元素形成不同的分支路径,
基于第一跳转元素对应的跳转后界面节点为第二跳转元素对应的跳转前界面节点的情况,将所述第一跳转元素、第二跳转元素设为同一分支路径上的相邻跳转元素,比如以上述携程中的六个跳转信息为例,可以建立得到如图2所示的拓扑流程图,图中跳转元素的命名仅为示意,实际以待测试对象的底层控件名称为准,如图5所示。
S3、对所述拓扑流程图进行深度遍历,根据自遍历起始节点向后的每一条完整分支路径生成与其对应的测试代码。
具体地,利用代码引擎生成测试代码的过程实际上是代码引擎遍历拓扑流程图的过程:在遍历的过程中,当检测到跳转元素时,获取其控件名称,以执行点击跳转操作,具体可利用click(id)函数实现,其中id即为跳转元素对应的控件名称,最后生成的所述测试代码包括对各个跳转元素执行用户界面跳转操作的程序。
S4、在测试运行环境中运行所述测试代码,得到测试结果。
将测试代码以符合运行条件的模板形式放入测试运行环境中,运行所述测试代码,得到测试结果。运行的方式包括但不限于以下两种方式:
云端运行方式:向云端发送运行请求,所述运行请求中包括待测试用户界面;云端服务器根据所述运行请求,获取与所述待测试用户界面对应的测试代码,并将所述测试代码放入项目模版,使其符合云端测试环境的运行要求,比如,将所述测试代码拷贝到指定地址的文件夹下,并调用所述待测试用户界面的源配置文件,根据所述源配置文件,将所述项目模板中的参数进行自动填充,完成填充后的包括有测试代码的项目模版可以放入云端的测试软件中运行,接收基于所述运行请求在云端的测试软件中运行所述测试代码得到的测试结果;
本地运行方式:从云端下载所述测试代码到本地计算机中,并在所述计算机中的测试软件中运行所述测试代码,在运行所述测试代码之前,同样需要对其进行项目配置,其配置的方式与云端运行方式中将所述测试代码放入项目模版的操作一致,不同之处在于,云端运行方式中是由云端服务器自动完成,而本地运行方式由操作用户完成,为了方便完成,在云端下载测试代码的同时,还一并下载项目模板、源配置文件及操作说明,可根据所述操作说明完成项目配置,放入本地测试环境进行运行,得到测试结果。需要说明的是,若界面的载体为移动终端,则需要先将所述移动终端与本地计算机连接。
其中,所述测试软件包括但不限于IntelliJ Idea,Android Studio,其中,所述Android Studio用于测试安卓系统内的界面,所述IntelliJ Idea可以用于测试安卓、iOS系统、Web或PC界面。
对于大部分需要测试的用户界面来说,在自动生成代码之前还需要配置好初始化参数、输入参数及断言条件,方法流程如图3所示,下面对步骤S3中生成对应的测试代码之前的参数初始化进行说明:
在获取拓扑流程图之后进行初始化参数配置,所述初始化参数配置结果包括测试起始界面节点及其URL,所述初始化参数配置结果用于在生成测试代码时实现参数初始化,包括:将所述遍历起始节点初始化为所述测试起始界面节点,所述测试起始界面节点可以为所述拓扑流程图中任意一个分支路径上的任意一个跳转元素所对应的跳转前界面节点,可以看出,所述遍历起始节点可以为拓扑流程图的根界面节点,也可以是拓扑流程图中中间某一个(不是最后一个)界面节点,自遍历起始节点向后的每一条完整分支路径,包括遍历到最后一个界面节点,在本发明的一个实施例中,所述拓扑流程图为流程树结构(单向),在本发明的一个优选实施例中,所述拓扑流程图中两个界面节点可以双向跳转,比如图2中订机票界面通过search跳转元素跳转至机票查询结果界面,然后通过back跳转元素跳转到订机票界面,在这种情况下,以订机票界面为遍历起始节点的话,完整的遍历路径下的界面节点流程为订机票界面→机票查询结果界面→订机票界面→机票查询界面→下订单界面→支付界面,起始界面节点的URL即为订机票界面的网址。所述遍历起始节点可以选择流程中间的任意一个节点,这样使得当增加了一种新功能需要测试的时候,无需从头开始重新测,而仅需从增加新功能的界面节点作为遍历起始节点,有效提高测试效率。现有技术中的自动化测试系统无法实现仅针对增加的新功能进行局部测试,导致自动化测试效率低下,测试过程冗长。
除了测试起始界面节点及其URL,所述初始化参数配置结果还包括测试界面深度,所述测试界面深度的配置值大于或等于以配置的测试起始界面节点为起点的流程图最长深度值,其中,深度配置值等于以配置的测试起始界面节点为起点的流程图最长深度值,可以确保能够完整地遍历以测试起始界面节点起起点的每一个分支路径流程;若多个所述分支路径之间具有交互,比如贷款App中,既有贷款业务流程界面,又有还款业务流程界面,贷款业务和还款业务之间有交互,比如应当是先贷款后还款,因此,若要测试两条分支路径之间的交互功能,则需要设置界面深度为两条分支流程的深度值之和。
下面对步骤S3中生成对应的测试代码之前的输入参数配置进行说明:
在获取拓扑流程图之前或之后获取输入参数配置结果,所述输入参数配置结果包括为实现跳转前界面节点跳转到相应的跳转后界面节点所需输入的参数,比如在订机票界面,需要配置的输入参数包括起飞地、目的地、日期,还可以包括筛选条件,比如,时间段、航空公司、票价范围等等,再比如在机票查询结果界面,需要设置选择条目信息,比如选择第二条机票信息点击后进入下订单界面。当然,对于有些界面,不一定需要输入参数,比如新闻app或者网页,可采取随机点击新闻标题而进入下一界面。通过预先设置的各个界面对应的输入参数,在生成测试代码过程中,代码引擎将用户的输入参数设置放在合适的位置,即将上述输入参数配置结果赋值给相应跳转前界面节点处的输入参数元素以便于完成到下一界面的跳转。
下面对步骤S3中生成对应的测试代码之前的断言配置进行说明:
在获取拓扑流程图之前或之后进行断言设置,所述断言设置结果为对所述跳转前界面节点或跳转后界面节点中的显示元素设置的预期值;在生成代码过程中,对于预设有断言配置的某一界面节点,在跳转到该界面节点后,引用断言操作,比如利用assert(实际值==期待值)进行断言判断,比如对于机票查询结果界面,如果在订机票界面中输入的参数为北京到上海,那么显示的机票查询结果条目中都是起飞城市均应当为北京,目的城市均应为上海,则在自动生成测试代码过程中,则会从后台调取机票查询结果界面的list表,根据list表配置可知,列表第一列为起飞城市信息,第二列为目的城市,代码中插入的断言判断则为判断list表的第一列值是否等于“北京”,第二列值是否等于“上海”。
所述测试结果包括文字形式的测试报告,所述测试报告中包括测试失败例情况说明,比如界面跳转错误和/或断言判断错误的情况,参见图6,左侧Tests条目栏中比如testCase004ab1对应fail标记,点击它,右面则出现具体的失败细节,在本发明的一个优选实施例中,所述测试报告还可以结合视频或图片的形式,具体实现方式可以在移动终端上或者本地计算机上或者云端运行环境中开启录屏工具,就可以得到视频测试报告,或者在断言判断失败时,利用截屏工具将当前界面截图保存,形成图片测试报告。
在本发明的一个优选实施例中,所述拓扑流程图的局部或全部能够进行移动、复制、剪切和/或粘贴操作,这在建立拓扑流程图时提供了较大的便利,减少重复工作。
进一步地,将所述在测试运行环境中运行所述测试代码得到的每一条测试用例中的流程信息与数据信息关联并分离存储,并在产品上有效展示出来。由于流程与数据分不同的文件夹进行存放,条理清晰,测试人员一目了然,无论是涉及流程还是数据的查看或者修改,都能显著提高测试人员的工作效率。
在本发明的一个实施例中,提供了一种UI自动化功能测试装置,参见图4,所述装置包括以下模块:
跳转信息获取模块,用于获取待测试用户界面的跳转信息,所述跳转信息包括跳转前界面节点、跳转元素及跳转后界面节点;
流程图获取模块,用于获取根据所述跳转信息建立得到的拓扑流程图,所述拓扑流程图包括一个根界面节点和一个或多个分支路径,每个分支路径上至少有一个跳转元素及对应的跳转后界面节点;
代码生成模块,用于对所述拓扑流程图进行深度遍历,根据自遍历起始节点向后的每一条完整分支路径生成与其对应的测试代码,所述测试代码包括对各个跳转元素执行用户界面跳转操作的程序;
代码运行模块,用于在测试运行环境中运行所述测试代码,得到测试结果。
总的来说,UI自动化功能测试模块的测试工作过程如下:跳转信息模块为根据待测试用户界面的功能区得到各个功能区的跳转信息,将跳转前界面节点跳转到跳转后界面节点过程中,所述跳转前界面节点上需要填的信息被预设为输入参数,并在所述跳转后界面节点上设置断言设置;再根据所述跳转信息建立拓扑流程图,然后在所述拓扑流程图中选择一个节点为测试起始界面节点,初始化其URL及测试深度值;接下来遍历流程图并自动生成代码,自动生成代码的实质为利用代码引擎遍历到界面节点,若有断言设置,则进行断言判断,若无断言设置,则代码中加入当前界面节点的输入参数,完成输入参数后,根据跳转节点的id名称进行点击跳转操作,进入到下一界面再进行上述操作,直至跳转到分支路径上的最后一个界面节点(完成相应的断言判断,如果该界面有断言设置的话)。
需要说明的是:上述实施例提供的UI自动化功能测试装置在进行UI自动化功能测试时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将UI自动化功能测试装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,本实施例提供的UI自动化功能测试装置实施例与上述实施例提供的UI自动化功能测试方法属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
在本本发明的一个实施例中,提供了一种UI自动化功能测试设备,包括处理器以及存储器,所述存储器中存储有程序,在所述处理器执行所述程序时,进行以下操作:
获取待测试用户界面的跳转信息,所述跳转信息包括跳转前界面节点、跳转元素及跳转后界面节点;
获取根据所述跳转信息建立得到的拓扑流程图,所述拓扑流程图包括一个根界面节点和一个或多个分支路径,每个分支路径上至少有一个跳转元素及对应的跳转后界面节点;
对所述拓扑流程图进行深度遍历,根据自遍历起始节点向后的每一条完整分支路径生成与其对应的测试代码,所述测试代码包括对各个跳转元素执行用户界面跳转操作的程序;
在测试运行环境中运行所述测试代码,得到测试结果。
在本发明的一个实施例中,提供了一种存储介质,用于存储程序,所述程序在被执行时进行以下操作:
获取待测试用户界面的跳转信息,所述跳转信息包括跳转前界面节点、跳转元素及跳转后界面节点;
获取根据所述跳转信息建立得到的拓扑流程图,所述拓扑流程图包括一个根界面节点和一个或多个分支路径,每个分支路径上至少有一个跳转元素及对应的跳转后界面节点;
对所述拓扑流程图进行深度遍历,根据自遍历起始节点向后的每一条完整分支路径生成与其对应的测试代码,所述测试代码包括对各个跳转元素执行用户界面跳转操作的程序;
在测试运行环境中运行所述测试代码,得到测试结果。
以上关于UI自动化功能测试设备及相应存储介质的实施例与上述实施例提供的UI自动化功能测试方法属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。