一种基于抽象环检测的UI测试路径约简方法

摘要: 本发明涉及移动应用自动化测试,具体涉及一种基于抽象环检测的ui测试路径约简方法。背景技术:1、ui测试路径是移动应用自动化测试的关键对象,其覆盖能力已深入到质量...
一种基于抽象环检测的UI测试路径约简方法

本发明涉及移动应用自动化测试,具体涉及一种基于抽象环检测的ui测试路径约简方法。

背景技术:

1、ui测试路径是移动应用自动化测试的关键对象,其覆盖能力已深入到质量保障的各个方面,为缺陷的发现与定位提供了重要支撑。随着移动应用功能复杂度的持续增长,自动化测试工具在探索过程中往往需执行数十甚至上千个事件,程序才在某一步暴露异常。而在这条冗长路径中,实际触发缺陷的事件通常仅占极小比例,其余大量事件与缺陷无关、构成冗余。因此,ui测试路径的冗余程度直接关系到测试人员复现与定位缺陷的成本。然而受ui操作间上下文依赖的制约,现有测试用例约简方法在移动应用黑盒测试场景下存在显著盲区。研究数据显示,一条五十个事件的ui测试路径中实际起作用的事件可能仅有个位数,其余均为与缺陷无关的冗余操作,但测试人员无法事先获知哪些事件是必需的。更严峻的是,移动应用ui自动化测试通常是黑盒测试,测试人员拿不到应用的源码,进一步加剧了“在不依赖源码的前提下约简路径”这一矛盾。

2、目前,针对ui 路径约简问题的研究思路大致可分为三类:第一类是以deltadebugging(dd)为代表的通用测试用例约简算法。dd接收一段能触发缺陷的输入,将其平均分片,依次尝试每个分片及其补集能否复现相同缺陷,成功则在更小的子集上继续分片,直到找不到更小的可复现子集为止。层次化delta debugging(hdd)针对具有递归结构的输入按层次结构约简;simplydroid将hdd应用到android ui测试路径约简中并做了实证评估。这类方法把路径当作通用序列或树结构处理,不依赖具体领域知识。第二类是基于约束求解的约简方法,通过代码插桩收集变量的定义-使用关系,构建约束方程后用求解器直接求解候选路径;后续工作evmin进一步纳入了网页控件必须先出现才能被操作这一上下文约束。这类方法依赖对被测程序源码的静态分析。第三类是基于模式匹配的约简方法,将路径转化为测试路径图,把约简问题转化为图上的最短路径问题;detreduce基于页面结构信息建立有限状态机,在状态机上寻找冗余环路进行删除。

3、综上所述,现有ui测试路径约简技术存在大量的冗余事件,复现成本高,测试人员对缺陷的发现和定位效率低,从而影响移动应用自动化测试的工业应用场景。

技术实现思路

1、本发明的目的是针对现有技术的不足而设计的一种基于抽象环检测的ui测试路径约简方法,以页面等价性为统一判定依据,从ui测试路径本身携带的页面布局信息中识别可删除的冗余事件片段,在保证候选路径上下文关系有效的同时,利用三种优化策略提高约简比率,并将验证候选路径所需的重放次数控制在可接受范围内。本发明用于移动应用自动化测试的缺陷复现环节,可以有效地在不依赖被测程序源码与人工归纳缺陷复现冗余操作的前提下,大幅压缩缺陷触发路径的长度、降低测试人员的复现成本并提高缺陷定位效率,具有广泛的工业应用场景。

2、实现本发明目的的具体技术方案是:一种基于抽象环检测的ui测试路径约简方法,其特点是该方法包括以下步骤:

3、步骤1:获取自动化测试框架在探索过程中记录的初始缺陷触发路径,所述初始缺陷触发路径为依次执行的事件序列,并记录每个事件执行完成后的前序页面布局与执行截图,所述事件包括:原生ui操作和操作api调用。

4、步骤2:基于事件序列及各事件的前序页面布局,识别初始缺陷触发路径中的操作api抽象环,删除每个操作api抽象环对应的连续事件段,生成第一候选路径。

5、步骤3:基于步骤2生成的第一候选路径及其逐事件页面布局,识别候选路径中的目标控件抽象环,删除对应的连续事件段,生成第二候选路径。

6、步骤4: 基于步骤3生成的第二候选路径及其逐事件页面布局,识别候选路径中的无效事件抽象环,删除对应的单个无效事件,生成第三候选路径;

7、步骤5:将步骤4生成的第三候选路径按长度升序排序后放入重放队列,在测试设备上设置系统初始状态后将候选路径逐一执行其中的事件,校验末尾断言是否仍触发初始缺陷,依据重放结果更新当前最短可复现路径,收集可复现的路径并重复执行步骤2至步骤5,直至无法生成更短的可复现路径为止,输出最短可复现路径。

8、所述步骤2具体包括:

9、步骤a1:扫描事件序列中全部操作api类型的事件,并记录每种操作api出现的下标位置;

10、步骤a2:对同一操作api的每两个下标(, ),,构成一个候选抽象环,其对应的连续事件段为从第次调用到第次调用之间的事件段;

11、步骤a3:以事件序列为基准,分别删除各组候选抽象环对应的连续事件段,得到第一候选路径;若某操作api在路径中出现次,则产生个候选抽象环,时不产生该候选路径。

12、所述步骤3中目标控件抽象环的识别,具体包括:

13、步骤b1:扫描候选路径中的原生事件,对每个事件提取其目标控件,遍历该事件的全部前序事件对应的前序页面,统计出现过控件的下标集合;

14、步骤b2:遍历下标集合中每个元素作为起始位置,当前事件下标作为终止位置,生成删除连续事件段后的第二候选路径集合。

15、所述步骤4中无效事件抽象环的识别,具体包括:

16、步骤c1:扫描全部事件及其前序页面布局与后序页面布局;

17、步骤c2:若检测到某事件的前序页面与后序页面等价,则判定该事件为无效事件,并将其单独删除作为第三候选路径之一。

18、所述步骤5在第三候选路径放入重放队列前采用优先队列、路径去重和长度剪枝的优化策略,所述优先队列将全部候选路径按长度从小到大排序后入队,验证时优先取出长度最短的候选路径,以维护一个全局优先队列;所述路径去重为每条候选路径计算路径哈希值,将已完成验证的候选路径哈希值加入已验证集合,当新候选路径的哈希值命中已验证集合时直接丢弃而不再重放;所述长度剪枝将长度不小于当前最短解的候选路径丢弃而不进入重放环节,以维护贯穿约简过程的当前最短解。

19、所述步骤5中重放队列的验证,其判定规则为:将设备与程序状态复原至固定起始状态,再逐个执行候选路径中的事件;若执行某事件时因页面上不存在对应控件而执行失败,则判定重放失败;若末尾性质检查的测试断言通过,则判定重放失败;当整条路径全部事件执行完毕且末尾断言仍未通过时,则判定该候选路径的缺陷重放成功。

20、所述步骤2中操作api抽象环的判定依据为:同一操作api仅能在满足相同前置条件的页面执行,则判定两次调用前的页面为天然等价。

21、所述前序页面与后序页面等价的判定依据为:两个页面布局在控件树结构、各控件的位置、可见性、文本信息上完全一致,则判定两个页面等价,并记为l1≡l2。

22、本发明与现有技术相比具有以下有益的技术效果和显著的技术进步:

23、1)本发明引入了页面等价性作为识别冗余片段的统一判定依据,用于在不理解页面业务含义与源码结构的前提下,针对黑盒环境下产生的ui测试路径进行有针对性的约简。并按由粗到细的三级粒度(操作api、目标控件、无效事件)识别抽象环,优先删除大片段,加快了约简速度。

24、2)本发明可以有效且广泛地删除ui测试路径中的冗余事件,提高缺陷复现路径的简洁性与测试人员定位缺陷的效率。

25、3)本发明结合优先队列、路径去重与长度剪枝三项策略,显著降低了重放验证次数,使约简过程能够在工业场景可接受的时间范围内完成,从而提高自动化测试工具的实用性。