1.本技术涉及软件测试技术领域,具体而言,本技术涉及一种图形用户界面的测试方法及相关设备。
背景技术:2.monkey工具,一个使用随机测试策略的测试工具,被广泛应用于针对安卓应用测试中。
3.目前,原生monkey工具采用随机策略进行图形用户界面(graphicaluserinterface,简称gui)遍历,但在测试结束之后,会出现遗漏部分gui未能进行测试的状况,即遍历过程的覆盖度较低。若无法覆盖更多gui场景,则无法发现更多应用程序崩溃相关的问题。
4.针对该问题,现有技术提出了两种技术方案:(1)单机算法探索能力采用传统强化学习策略的gui遍历策略;(2)依赖中央控制节点的多机并行gui遍历策略。
5.然而,针对于方案(1),未能平衡深度和广度的探索,提高遍历过程中的覆盖度效果不明显;针对于方案(2),若中央控制节点出现故障,则将导致各个测试设备无法自主决策测试动作,即影响了测试过程的稳定性,最终影响了整个测试结果。
技术实现要素:6.本技术旨在解决上述技术问题之一。
7.根据本技术实施例的一个方面,提供了一种图形用户界面的测试方法,该方法对应一个测试过程,该测试过程包括多个回合,每个回合的步数依次递增,该方法包括:
8.在测试过程的当前回合,获取第一待测组件;确定第一待测组件中的待测图形用户界面gui,其中,待测gui携带未完成标志并对应于包括多个测试控件的结构树;按以下方式遍历结构树中每个测试控件,直至满足结束条件:通过筛选出的触发方式触发该测试控件,并根据触发所得的反馈对筛选出的触发方式进行强化操作。
9.在一种可能的实现方式中,每个触发方式包括权重值;通过筛选出的触发方式触发该测试控件,并根据触发所得的反馈对筛选出的触发方式进行强化操作,包括:
10.从预设的多个触发方式中筛选出符合条件的触发方式,其中,符合条件的触发方式的权重值大于预设阈值;针对每个符合条件的触发方式进行以下操作:以符合条件的触发方式触发该测试控件,并得到反馈;根据反馈,对该触发方式进行强化操作。
11.在一种可能的实现方式中,根据该反馈对该触发方式进行强化操作,包括:
12.若反馈为保持待测gui,将该触发方式的权重值设置为预设的第一数值,其中,第一数值小于或者等于预设阈值;若反馈为得到新的待测gui,增加该触发方式的权重值;若反馈为检测到状态循环,减少该触发方式的权重值。
13.在一种可能的实现方式中,测试过程包括用于存储历史待测组件的历史组件集,若该反馈为得到新的待测gui,增加该触发方式的权重值,包括:
14.确定新的待测gui对应的第二待测组件;若第二待测组件与第一待测组件相同,按照预设的第二数值增加该触发方式的权重值;若第二待测组件与第一待测组件不同,且为历史待测组件,按照预设的第三数值增加该触发方式的权重值;若第二待测组件与第一待测组件不同,且不为历史待测组件,按照预设的第四数值增加该触发方式的权重值;其中,第二数值小于第三数值,第三数值小于第四数值。
15.在一种可能的实现方式中,若当前回合已结束且测试过程未结束,该方法还包括:
16.基于第二待测组件进行下一回合的测试。
17.在一种可能的实现方式中,在遍历完结构树之后,该方法还包括:
18.若待测gui对应于叶子节点,确定待测gui的标志为完成,其中,叶子节点对应于没有可跳转gui的gui,可跳转gui为根据结构树上的测试控件对应的触发方式确定的gui;若待测gui对应于非叶子节点,且待测gui的所有的可跳转gui的标志为完成,确定待测gui的标志为完成。
19.在一种可能的实现方式中,确定第一待测组件中的待测图形用户界面gui,具体包括:
20.根据预设的哈希算法对第一待测组件的当前gui对应的结构树进行哈希运算,并将得到的运算结果确定为当前gui的编码,其中,当前gui的标志为未完成;根据当前gui的编码在历史状态集中进行匹配,以确定是否存在相同编码的历史待测gui;若匹配失败,将当前gui确定为待测gui。
21.在一种可能的实现方式中,该方法应用于包括多个设备的系统中任一设备,在测试过程的当前回合,获取第一待测组件,包括:
22.响应于服务器同时向多个设备发送的启动消息,启动第一回合;获取初始化测试过程时得到的至少一个公共组件;将至少一个公共组件中每个公共组件依次确定为第一待测组件并进行测试。
23.在一种可能的实现方式中,在结束针对至少一个公共组件的测试之后,该方法还包括:
24.确定至少一个新的待测组件;向服务器发送至少一个新的待测组件,并接收服务器根据至少一个新的待测组件反馈的最新的历史组件集;根据最新的历史组件集确定第一待测组件。
25.在一种可能的实现方式中,结束条件包括以下至少一项:
26.遍历完结构树;结束当前回合;结束测试过程。
27.根据本技术实施例的另一个方面,提供了一种图形用户界面的测试装置,该装置对应一个测试过程,该测试过程包括多个回合,每个回合的步数依次递增,该装置包括:
28.获取模块,用于在测试过程的当前回合,获取第一待测组件;确定模块,用于确定第一待测组件中的待测gui,其中,待测gui携带未完成标志并对应于包括多个测试控件的结构树;触发模块,用于按以下方式遍历结构树中每个测试控件,直至满足结束条件:通过筛选出的触发方式触发该测试控件,并根据触发所得的反馈对筛选出的触发方式进行强化操作。
29.根据本技术实施例的另一个方面,提供了一种电子设备,该电子设备包括:存储器、处理器及存储在存储器上的计算机程序,该处理器执行计算机程序以实现本技术上述
一个方面所示方法的步骤。
30.根据本技术实施例的再一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以实现本技术上述一个方面所示方法的步骤。
31.本技术实施例提供的技术方案带来的有益效果是:
32.本技术提供了一种图形用户界面的测试方法,该方法对应一个测试过程,该测试过程包括步数递增的多个回合,该方法具体包括:获取第一待测组件,并确定第一待测组件中的待测gui,该待测gui携带未完成标志并且对应于包括多个测试控件的结构树;随后,遍历该结构树中每个测试控件直至满足结束条件;其中遍历包括通过筛选出的触发方式触发测试控件并根据触发所得的反馈对触发所采取的触发方式进行强化操作。本技术的实施通过设置每个回合随步数递增的手段,在初期的回合中可以探索到多个gui从而实现遍历的广度,基于前期的探索很多gui已经被标记为完成,因此在后期可以设置更多的步数去探索不易被发现的gui,从而实现遍历所需的深度;通过设置gui是否携带完成/未完成标志的手段,来确定需要遍历的gui,从而节省时间;通过对触发方式的筛选操作,甄别可以进行触发的触发方式,从而避免因无效触发方式而实施无效触发所耗费的测试时间,然后根据触发的结果对触发所采取的触发方式进行相应的强化,继而给后面的触发操作形成正向反馈。基于上述技术手段,可以在该测试过程的预设时间内提高测试覆盖度。通过覆盖更多场景,发现更多应用崩溃相关的问题。
附图说明
33.为了更清楚地说明本技术实施例中的技术方案,下面将对本技术实施例描述中所需要使用的附图作简单地介绍。
34.图1为本技术实施例提供的一种图形用户界面的测试方法的流程示意图;
35.图2a为本技术实施例提供的一种gui及其结构树的场景示意图;
36.图2b为本技术实施例提供的实验1的结果示意图;
37.图2c为本技术实施例提供的实验2的结果示意图;
38.图3a为本技术实施例提供的一种图形用户界面的测试装置的结构示意图;
39.图3b为本技术实施例提供的另一种图形用户界面的测试装置的结构示意图;
40.图4为本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
41.下面结合本技术中的附图描述本技术的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本技术实施例的技术方案的示例性描述,对本技术实施例的技术方案不构成限制。
42.本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本技术实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该
一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“a和/或b”可以实现为“a”,或者实现为“b”,或者实现为“a和b”。
43.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。
44.首先对本技术涉及的几个名词进行介绍和解释:
45.哈希算法:一种算法,用于把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。
46.monkey工具:一个使用随机测试策略的黑盒测试工具,常用于android应用程序的测试。
47.活动组件(activity):android应用程序的四大组件之一,该组件包括了图形用户界面部分。其中,图形用户界面是指用户操作android应用程序时的交互界面。一个应用程序包括多个activity,一个activity包括多个图形用户界面。
48.图形用户界面(graphicaluserinterface,简称gui):采用图形方式显示的操作用户界面。在移动平台(例如android)上的应用程序,gui是通过activity进行显示。每个activity中包含一个或多个gui,每个gui所包含的控件存在区别。若对当前activity中处于显示状态的gui的任一控件进行触发,都可能会激活另一个新的gui,而新的gui可能属于另一activity,而非当前activity。
49.基于模型的测试(model-basedtesting,mbt):一种测试方法,该方法的特点时,测试用例可以完全或者部分的利用模型自动产生。具体而言,在遍历gui的过程中,首先通过测试工具构建待测应用程序的gui跳转模型,其次再利用该跳转模型来指导遍历。通常情况下,使用控件树结构来描述gui的层次结构,不同的gui对应的控件结构树是不同的,因此,可将gui作为模型的节点,通过对gui上控件采取相应的触发方式(例如:点击、长按、滚动等),即可实现从该gui转换至另一个gui,进而构建待测应用程序的有向有环图的模型。
50.强化学习(reinforcementlearning,rl):是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。强化学习是除了监督学习和非监督学习之外的第三种基本的机器学习方法。与监督学习不同的是,强化学习不需要带标签的输入输出对,同时也无需对非最优解的精确地纠正。其关注点在于寻找探索(对未知领域的)和利用(对已有知识的)的平衡。q-学习(q-learning):一种具体的强化学习方法。q-学习就是要记录下学习过的策略,因而告诉智能体在什么情况下采取什么行动会有最大的奖励值。
51.本技术提供的一种图形用户界面的测试方法、装置、电子设备、计算机可读存储介质,旨在解决背景技术中所示的技术问题之一。
52.下面通过对几个示例性实施方式的描述,对本技术实施例的技术方案以及本技术的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
53.参见图1,本技术实施例提供了一种图形用户界面的测试方法的流程图,该方法包
括步骤s110-s130:
54.s110,在测试过程的当前回合,获取第一待测组件。
55.其中,该方法对应一个测试过程,该测试过程包括多个回合,每个回合的步数依次递增。其中,该“多个回合”可以表示一个回合,或者两个及以上的回合,当前回合可以是多个回合中任一个回合。具体而言,每个回合的步数依次递增可以包括:按照每个回合的执行次序,递增设置相应的步数。
56.在一个示例中,若多个回合总共有3个回合,第一回合可以设置50步,第二回合可以设置100步,第三回合可以设置150步。
57.s120,确定第一待测组件中的待测图形用户界面gui,其中,待测gui携带未完成标志并对应于包括多个测试控件的结构树。
58.s130,遍历结构树中每个测试控件,直至满足结束条件:通过筛选出的触发方式触发该测试控件,并根据触发所得的反馈对筛选出的触发方式进行强化操作。
59.具体而言,该结束条件包括以下至少一项:遍历完结构树、结束当前回合、结束测试过程。
60.示例性地参见图2a所示的结构树,该结构树包括多个层级,在每个层级包括至少一个测试控件。一个结构树完整的遍历过程,可以包括:从第一层级开始,确定第一层级中的多个测试控件,从第一层级的第一个测试控件开始,遍历该第一个测试控件的下一级所有的测试控件,在遍历完之后,从第一层级的第二个测试控件开始,遍历该第二个测试控件下所有的测试控件,以此类推至第一层级的最后一个测试控件。
61.本技术提供了一种图形用户界面的测试方法,该方法对应一个测试过程,该测试过程包括步数递增的多个回合,该方法具体包括:获取第一待测组件,并确定第一待测组件中的待测gui,该待测gui携带未完成标志并且对应于包括多个测试控件的结构树;随后,遍历该结构树中每个测试控件直至满足结束条件;其中遍历包括通过筛选出的触发方式触发测试控件并根据触发所得的反馈对触发所采取的触发方式进行强化操作。本技术的实施通过设置每个回合随步数递增的手段,在初期的回合中可以探索到多个gui从而实现遍历的广度,基于前期的探索很多gui已经被标记为完成,因此在后期可以设置更多的步数去探索不易被发现的gui,从而实现遍历所需的深度;通过设置gui是否携带完成/未完成标志的手段,来确定需要遍历的gui,从而节省时间;通过对触发方式的筛选操作,甄别可以进行触发的触发方式,从而避免因无效触发方式而实施无效触发所耗费的测试时间,然后根据触发的结果对触发所采取的触发方式进行相应的强化,继而给后面的触发操作形成正向反馈。基于上述技术手段,可以在该测试过程的预设时间内提高测试覆盖度。通过覆盖更多场景,发现更多应用崩溃相关的问题。
62.本技术实施例还提供了一种可能的实现方式,通过筛选出的触发方式触发该测试控件,并根据触发所得的反馈对筛选出的触发方式进行强化操作具体可以包括s131-s132。
63.s131,从预设的多个触发方式中筛选出符合条件的触发方式,其中,符合条件的触发方式的权重值大于预设阈值。
64.具体而言,该多个触发方式包括但不限于:点击测试控件的方式、滚动测试控件的方式、长按测试控件的方式。
65.具体而言,获取每个触发方式当前的权重值,将该当前的权重值与预设阈值进行
比较。其中,将当前的权重值大于预设阈值的触发方式,确定为符合条件的触发方式。
66.由于每个测试控件可得到反馈的触发方式尚不清楚,因此为每个测试控件设置的触发方式时,其数量和类型都是相同的。其中,还包括为每个类型的触发方式设置一个权重值,在首次获取控件所属的待测gui时,为该权重值设置一个初始值。在测试过程中,每个触发方式的权重值都会得到相应的调整。
67.s132,针对每个符合条件的触发方式进行以下操作:以该触发方式触发该测试控件,并得到反馈;根据该反馈对该触发方式进行强化操作。
68.在一种可能的实现方式中,根据该反馈对该触发方式进行强化操作,具体可以包括:
69.若反馈为保持待测gui,将该触发方式的权重值设置为预设的第一数值;若反馈为得到新的待测gui,增加该触发方式的权重值;若反馈为检测到状态循环,减少该触发方式的权重值。
70.具体而言,若保持待测gui状态,即没有得到新的gui,需要设置该触发方式的权重值为预设的第一数值。其中,第一数值小于或者等于预设阈值。在一个示例中,第一数值可以为零。
71.具体而言,检测到状态循环的过程可以包括:首先,该反馈为得到新的gui和新的组件,其次,该新的gui和待测gui相同。或者,以任一触发方式触发该新的gui中任一控件,又得到另一个新的gui,该另一个新的gui和待测gui相同。鉴于上述两种得到相同的gui的结果,可以确定该反馈为检测到状态循环,而非得到新的gui或者新的组件。
72.其中,每个gui都有一个编码,该编码可以通过与gui对应的结构树得到。通过比较两个gui的编码,以确定两个gui是否相同。
73.采取降低权重值的手段,可以对引起循环的触发方式进行标记。设置权重值为零,可以阻止部分无效的触发,从而节约测试时间;采取提高权重值的手段,可以对有效触发进行标记。上述手段均为基于触发方式所得到的反馈所进行的强化操作,体现了强化学习的本质。
74.在一种可能的实现方式中,若反馈为得到新的待测gui,增加该触发方式的权重值,具体可以包括:
75.确定新的待测gui对应的第二待测组件。
76.若第二待测组件与第一待测组件相同,按照预设的第二数值增加该触发方式权重值;若第二待测组件与第一待测组件不同,且为历史待测组件,按照预设的第三数值增加该触发方式的权重值;若第二待测组件与第一待测组件不同,且不为历史待测组件,按照预设的第四数值增加该触发方式的权重值;其中,第二数值小于第三数值,第三数值小于第四数值。
77.具体而言,测试过程包括用于存储历史待测组件的历史组件集。该历史组件集中包括当前回合之前所有回合中测试过的待测组件。该历史组件集不仅包括多个历史待测组件,还包括每个历史待测组件之间的跳转关系。其中,每个组件都拥有一个编码。在测试阶段,可以从编码的角度确定两个组件是否相同。
78.在一种可能的实现方式中,在按照预设的第四数值增加该触发方式的权重值之后,还包括:将第二待测组件添加至历史组件集中。
79.具体而言,在得到第二待测组件之后,将该第二待测组件添加至历史组件集中,并建立第二待测组件和第一待测组件之间的跳转关系。该跳转关系可以包括:从第一待测组件的待测gui状态跳转至第二待测组件的新的gui状态。
80.在一种可能的实现方式中,若当前回合已结束且测试过程未结束:基于第二待测组件进行下一回合的测试。
81.具体而言,传统的强化学习的gui遍历策略中,在当前回合结束之后,一般会通过重启应用程序来启动下一回合的遍历。由于每次重启应用程序,都会从应用程序的开始页面(例如:开机广告页面、登录页面、注册页面等)开始遍历,这就导致开始页面的访问次数将远远大于其他的页面,尤其是一些不容易出现的页面。因此,如果在当前回合发现了第二待测组件时,不启动应用程序,可以通过第一待测组件进入第二待测组件中,以表示启动下一回合。
82.在上述实施例中,通过测试控件的权重值来确定是否对测试控件进行遍历,避免了无效遍历,然而,这并不能避免对同一个gui的反复遍历。本技术实施例还提供了一种可能的实现方式,在遍历完结构树之后,该方法还可以包括:
83.若待测gui对应于叶子节点,确定待测gui的标志为完成;若待测gui对应于非叶子节点,且待测gui的所有的下一级gui的标志为完成,确定待测gui的标志为完成。
84.其中,将得到的新的gui的标志默认为未完成。
85.其中,根据待测gui是否有可跳转gui来确定是否为叶子节点,该可跳转gui为根据结构树上的测试控件对应的触发方式确定的gui。具体而言,在遍历待测gui的结构树中每个测试控件时,若得到新的gui,从视觉角度看,由于新的gui是从待测gui跳转过去的,因此可以将该新的gui确定为可跳转gui。叶子节点对应于没有可跳转gui的gui,非叶子节点则对应于有可跳转gui的gui。
86.在一种可能的实现方式中,确定第一待测组件中的待测gui,具体可以包括:
87.根据预设的哈希算法对第一待测组件的当前gui对应的结构树进行哈希运算,并将得到的运算结果确定为当前gui的编码;根据当前gui的编码在历史状态集中进行匹配,以确定是否存在相同编码的历史待测gui。
88.具体而言,确定第一待测组件的当前gui对应的结构树的层级结构,从该层级结构中,将第一层级中所有的测试控件的信息依次进行拼接,得到一个字符串;或者,将第一层级和第二层级中所有的测试控件的信息依次进行拼接,得到一个字符串。其中,得到的字符串的长度不固定。应当指出,关于字符串的拼接过程可以按照需求进行自定义,本技术不进行限制。其次,根据预设的哈希算法对得到的字符串进行哈希运算,得到运算结果为一个固定长度的字符串,可以将该固定长度的字符串确定为当前gui的编码。
89.在一个示例中,测试控件的信息可以包括测试控件的多个属性信息,例如,控件id、控件的类型、名称、位置(坐标)、尺寸、颜色等。
90.具体而言,历史状态集中历史待测gui携带有相应的编码,该编码的获取过程与当前gui的编码的确定过程相一致。根据确定的当前gui的编码与历史状态集中每个历史待测gui的编码进行匹配,以确定是否存在相同编码的历史待测gui。
91.其中,若匹配失败,将当前gui确定为待测gui。若匹配成功,确定当前gui携带完成标志,并获取第一待测组件的其他标志为未完成的gui,并进行相似的匹配过程,直至确定
出待测gui。
92.对gui的状态进行标记,可以在确定待测gui时提供参考,因而无需付出时间去对已完成遍历的gui再次进行遍历,从而将宝贵的测试时间留给未完成的gui,进而提高测试过程的覆盖度。
93.在一种可能的实现方式中,对于携带有完成标志的历史待测gui中的目标gui进行状态重置,该状态重置条件可以包括:在测试过程的预设时间内未得到新的gui。其中,该目标gui可以是跳转次数小于某个阈值的历史待测gui。
94.其中,在测试过程中,还包括统计每个gui的跳转次数。
95.现有的多设备并行gui遍历策略是以中央控制节点为中心,由中央控制节点向每个设备分发遍历策略。因此,一旦中央控制节点出现问题,设备无法自主决定遍历策略,进而耽误测试进度。
96.本技术实施例又提供了一种可能的实现方式,依旧采用多个设备组成一个系统进行测试,但是去掉了控制器节点。另外,还增设了服务器,通过服务器来共享信息。本技术实施例所示的一种图形用户界面的测试方法,则可以应用于多个设备中任一个。
97.在一种可能的实现方式中,在测试过程的当前回合,获取第一待测组件,包括:
98.响应于服务器同时向多个设备发送的启动消息,启动第一回合;获取初始化测试过程时得到的至少一个公共组件;将至少一个公共组件中每个公共组件依次确定为第一待测组件并进行测试。
99.具体而言,获取启动消息中携带的至少一个公共组件,并将至少一个公共组件中每个公共组件依次确定为第一待测组件,并进行测试。测试第一待测组件的过程可以参考上述实施例,本技术在此不进行限制。其中,公共组件为每个设备都需要进行测试的组件。
100.其中,每个设备在获取到待测应用程序的测试文件包之后,可以进行初始化操作,得到至少一个公共组件,并将得到的至少一个公共组件发送至服务器;服务器接收到所有的设备发送的公共组件之后,确定当前的公共组件,然后统一反馈给每个设备。或者,服务器基于该待测应用程序的测试文件包进行初始化操作,得到至少一个公共组件,并发送至每个设备。在本技术实施例中,可以将服务器向多个设备同时反馈该至少一个公共组件的过程,理解为服务器同时向多个设备发送启动消息的过程。
101.在一个示例中,该测试文件包可以是后缀为.apk的文件包,该公共组件可以包括:开机广告页面对应的组件、登录页面对应的组件、注册页面对应的组件等。应当指出,公共组件可以理解为待测应用程序启动时,最先出现的几个页面对应的组件。
102.在一个示例中,该服务器可以是redis、mysql、kafka等单个服务器。通过服务器,可以对得到的待测gui进行汇总,得到实时的历史状态集;也可以对得到的新的组件进行汇总,得到实时的历史组件集。设备可以在预设时间内从服务器中获取实时的历史状态集和历史组件集;设备也可以在得到新的gui和/或新的组件之后,获取最新的历史状态集和历史组件集。在获取到实时的历史状态集和历史组件集之后,可以参照上述实施例进行相应的操作。
103.在一种可能的实现方式中,在按照预设的第四数值增加该触发方式的权重值之后,还包括:将第二待测组件发送至服务器,以便服务器将第二待测组件添加至历史组件集中。
104.具体而言,在得到第二待测组件之后,将该第二待测组件添加至历史组件集中,并建立从第一待测组件跳转至第二待测组件之间的路径。
105.在一种可能的实现方式中,在结束针对至少一个公共组件的测试之后,该方法还包括:
106.确定至少一个新的待测组件;向服务器发送至少一个新的待测组件,并接收服务器根据至少一个新的待测组件反馈的最新的历史组件集;根据最新的历史组件集确定第一待测组件。
107.具体而言,在对公共组件进行测试的过程中,可以得到多个新的gui。其中,该新的gui中至少有一个gui对应新的组件,可以将该新的组件确定为待测组件。针对公共组件的测试完成之后,可以得到至少一个待测组件,设备可以向服务器反馈该至少一个待测组件。服务器可以将反馈的待测组件添加至历史待测组件集中,进行备份;然后,服务器将最新的历史组件集反馈给设备,设备接收到该历史组件集之后,根据历史组件集中每个历史待测组件的信息确定第一待测组件。
108.在一个示例中,历史待测组件的信息可以包括:发现该历史待测组件的设备的编号,测试该历史待测组件的设备的编号,测试时间,是否开始测试的标志,是否结束测试等标志。
109.通过服务器分享最新的信息,可以避免其他设备与当前设备同时对同一个组件或者同一个gui进行测试,从而节省测试时间,在有限的测试时间内,获取更多的遍历场景,提高遍历的覆盖度。
110.为了更加形象地说明本技术实施例所示的方法与现有技术的差别,本技术实施例还提供了实验1和实验2,从实践的角度来体现本技术实施例所示方法相对于现有技术的改进程度。其中,实验1和实验2的测试时间都为5个小时,所比较的都是从1小时~5小时中,每个时刻的历史待测组件的数量。
111.实验1的比较对象:本技术实施例所示的方法(单设备),传统的强化学习策略的遍历方法(单设备测试)。前述两种方法的测试结果可以参见图2b所示的线段1和线段2,线段1对应的本技术实施例所示的方法(单设备)在各个时刻探索的组件都相对多一些,即表示覆盖了更多的场景。
112.实验2的比较对象:本技术实施例所示的方法(多设备协同测试),本技术实施例所示的方法(单设备测试),传统的强化学习策略的遍历方法(单设备测试)。前述三种方法的测试结果可以参见图2c中的线段3、线段4、线段5。其中,线段3对应的本技术实施例所示的方法(多设备协同测试)在各个时刻探索的组件都相对多一些,即标识覆盖了更多的场景。
113.参见图3a,本技术实施例提供了一种图形用户界面的测试装置300,该装置对应一个测试过程,测试过程包括多个回合,每个回合的步数依次递增,该装置300可以包括:
114.获取模块310,用于在测试过程的当前回合,获取第一待测组件;确定模块320,用于确定第一待测组件中的待测gui,其中,待测gui携带未完成标志并对应于包括多个测试控件的结构树;触发模块330,用于按以下方式遍历结构树中每个测试控件,直至满足结束条件:通过筛选出的触发方式触发该测试控件,并根据触发所得的反馈对筛选出的触发方式进行强化操作。
115.其中,该结束条件包括以下至少一项:遍历完结构树、结束当前回合、结束测试过
程。
116.在一种可能的实现方式中,每个触发方式包括权重值,触发模块330在通过筛选出的触发方式触发该测试控件,并对筛选出的触发方式进行相应的强化操作中,具体用于:
117.从预设的多个触发方式中筛选出符合条件的触发方式,其中,符合条件的触发方式的权重值大于预设阈值;针对每个符合条件的触发方式进行以下操作:以触发方式触发该测试控件,并得到反馈;根据该反馈对该触发方式进行强化操作。
118.在一种可能的实现方式中,触发模块330在根据该反馈对该触发方式进行强化操作中,具体用于:
119.若反馈为保持待测gui,将该触发方式的权重值设置为预设的第一数值,其中,第一数值小于或者等于预设阈值;若反馈为得到新的待测gui,增加该触发方式的权重值;若反馈为检测到状态循环,减少该触发方式的权重值。
120.在一种可能的实现方式中,该测试过程包括用于存储历史待测组件的历史组件集,触发模块330在若该反馈为得到新的待测gui,增加该触发方式的权重值中,具体用于:
121.确定新的待测gui对应的第二待测组件;若第二待测组件与第一待测组件相同,按照预设的第二数值增加该触发方式的权重值;若第二待测组件与第一待测组件不同,且为历史待测组件,按照预设的第三数值增加该触发方式的权重值;若第二待测组件与第一待测组件不同,且不为历史待测组件,按照预设的第四数值增加该触发方式的权重值;其中,第二数值小于第三数值,第三数值小于第四数值。
122.在一种可能的实现方式中,若当前回合已结束且测试过程未结束,获取模块310还可以用于:
123.基于第二待测组件进行下一回合的测试。
124.在一种可能的实现方式中,在遍历完结构树之后,确定模块320用于:
125.若待测gui对应于叶子节点,确定待测gui的标志为完成,其中,叶子节点对应于没有可跳转gui的gui,可跳转gui为根据结构树上的测试控件对应的触发方式确定的gui;若待测gui对应于非叶子节点,且待测gui的所有的可跳转gui的标志为完成,确定待测gui的标志为完成。
126.在一种可能的实现方式中,该装置300应用于包括多个设备的系统中任一设备,获取模块310在测试过程的当前回合,获取第一待测组件中,具体用于,包括:
127.响应于服务器同时向多个设备发送的启动消息,启动第一回合;获取初始化测试过程时得到的至少一个公共组件;将至少一个公共组件中每个公共组件依次确定为第一待测组件并进行测试。
128.参见图3b,本技术实施例还提供了一种可能的实现方式,该装置300还包括收发模块340,收发模块340在结束针对至少一个公共组件的测试之后,具体用于:
129.确定至少一个新的待测组件;向服务器发送至少一个新的待测组件,并接收服务器根据至少一个新的待测组件反馈的最新的历史组件集;根据最新的历史组件集确定第一待测组件。
130.本技术实施例中提供了一种电子设备(例如,计算机装置/设备/系统),包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现一种图形用户界面的方法的步骤。
131.在一个可选实施例中提供了一种电子设备,如图4所示,图4所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004,收发器4004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本技术实施例的限定。
132.处理器4001可以是cpu(central processing unit,中央处理器),通用处理器,dsp(digital signal processor,数据信号处理器),asic(application specific integrated circuit,专用集成电路),fpga(field programmable gate array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本技术公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等。
133.总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是pci(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
134.存储器4003可以是rom(read only memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,ram(random access memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是eeprom(electrically erasable programmable read only memory,电可擦可编程只读存储器)、cd-rom(compact disc read only memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
135.存储器4003用于存储执行本技术实施例的计算机程序,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的计算机程序,以实现前述方法实施例所示的步骤。
136.其中,电子设备包括但不限于:移动终端。
137.本技术实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
138.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除图示或文字描述以外的顺序实施。
139.应该理解的是,虽然本技术实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本技术实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段
中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本技术实施例对此不限制。
140.以上所述仅是本技术部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术的方案技术构思的前提下,采用基于本技术技术思想的其他类似实施手段,同样属于本技术实施例的保护范畴。