日期:2023-01-24 阅读量:0次 所属栏目:智能科技
摘 要:健壮的用户界面对象识别技术是用户界面自动化测试达成的一项关键技术和过程。随着Web应用程序变得越来越复杂,新兴的Web2.0技术更是使得传统的对象识别方法捉襟见肘。在这些新兴Web应用程序上开发和调试Web自动化脚本变得前所未有的困难和难以实现,一些看上去十分简单的脚本开发任务也需要更多的开发时间和相当有经验的开发人员才能完成,而对于相对高级的参数自动化测试脚本则几乎变成不可能实现的任务。本文提出一系列的新技术和算法,尤其针对基于Web2.0开发的复杂、多样化和快速变化的应用程序提供了一种新的对象识别方法,在当前应用背景以及不远的将来都会具有使用价值。
关键词:自动化测试;对象识别;Ajax;Web2.0
1.应用背景
传统的Web用户界面自动化脚本开发需要两个主要步骤:(1) 录制,Web脚本自动化工具记录用户在Web界面上的动作,如点击按钮、选择菜单或者输入数据等,自动化工具将用户动作解释成该工具可以识别的自动化脚本; (2) 回放,回放的过程将会执行解释出来的自动化教本。在脚本录制阶段,相应的数据和用户界面对象会如实记录下来,在脚本回放阶段界面对象会被识别并赋予相应的数据。
通常Web脚本自动化工具记录下来的数据包括Web对象以及相应的属性值。例如, 标签的一系列属性包括'type'和'name',以及作为Web页面元素本身拥有的'id'和'class'。如果有一系列的对象共享属性值,那这些对象组最原始的一个对象也会存储下来。新技术下的自动化脚本也会保存对象在DOM树下的路径,通常表现为XPath表达式。
目前流行的Ajax技术在展现这些传统的对象属性并不是十分有效率,主要表现在:
(1) 最新的Web应用程序往往不是由简单的Web元素标签来组成,它们大量采用了Web组件,如滑行控件(Slider)、时间控件(DatePicker)、富文本编辑控件等。这些控件由多个DOM元素构成,通常由底层Web标签Div来分层。表现层和行为层的实现由JavaScript和CSS技术来完成。这种情况下并没有多少基于传统的Web元素属性可以识别。
(2) 单一页面存在成百上千界面元素的情况十分常见,而大多元素仅仅是为了表示界面组件的相对位置而设定,它们之间并没有可以彼此区分的属性。传统的识别方法是在该元素前加个识别编号,如1284号Div标签,但这种表示方法既不可靠也不健壮。
(3) 当今Web应用程序从程序和实现上来看都是十分动态的。从程序的角度来看,Web页面的内容由服务器端状态、脚本参数化、数据库查询结果动态生成,这会影响Web元素在DOM树上的路径和位置;从实现的角度来看,传统识别技术所依赖的对象属性往往随着的脚本执行每次都会发生变化。
这些问题不仅仅影响诸如脚本重放这类简单的对象识别任务,更重要的是它们使得一些高级技术无法应用到复杂的测试脚本执行任务中去:
(1) 测试脚本的参数化实现,用来模拟不用的用户和运行场景。语义上它们可以随着参数化输入数据的变化关联到测试脚本需要捕捉的对象。
(2) 业务过程需要验证正常流程和错误流程,这意味着错误的对象也必须职别。错误对象的生成和属性往往需要动态地识别,这也是传统对象识别的短处。
2.解决方案
近年来新兴出现的是一种叫"候选者"的基于统计和模式匹配的对象识别方法。这种方法不依赖于预先设定好的对象类型和属性,它使用多个候选者对象,每个候选者代表和处理某一个用户界面对象,这些候选者计算和存储一个或者一组某个用户界面对象的位置信息,如对象类型、文字、维度、位置等。当需要进行对象识别时,候选者可以被唤醒并进行自我识别来确定自己是不是就是被识别的对象,并产生和保存相似度分数。相关的候选者和它们的相似度数值都被保存到脚本里相应的测试步骤中。在脚本回放过程中,候选者对象从可能匹配的候选者中选取最相似的对象,所以总是最匹配的对象被识别到测试执行脚本中去。
如果简单地将该技术应用到复杂Web应用测试场景中,相对于仅仅根据对象类型和属性进行的Web界面对象识别应用,并不能在诸如Ajax应用测试脚本中达到80%以上的识别率。而需要结合以下几方面进行运用。
2.1自适应多点采样
用于对象识别的数据通常是在脚本录制阶段收集。然而,界面对象的静态属性和运行时属性往往存在差异,因而仅仅对某一时刻的数据采集是不准确的。为了解决这个问题,需要对界面对象进行动态采样和调整存储信息,这些信息可以包括:
(1) 用户在该对象上的动作(例如点击)或者相关联的界面对象(如单选框及其显示的文字)
(2) 该对象的属性变化
(3) 用以候选者匹配允许出现的属性差异
(4) 用户在运行时对对象进行的属性修改
每一次采样都会与上次的数据进行分析并保存起来。细小的差异在高度变化的属性数值影响下会被忽略。这种方法有效地解决了脚本参数化和用户差异带来的对象识别的不不确定性:当多个对象被匹配时,测试脚本开发者可以选择一个正确的对象。系统则生成该对象的另一个采样并使用新数据来解决该对象的识别问题。
通过重放阶段的多重采样,测试脚本的性能和健壮性都得到显著提高。这在一些特定的测试应用场景下尤其有用,例如性能测试或者可用性检测。
2.2上下文对象
DOM对象没有足够的可以区分用户对象的特征属性。既然DOM是一个树结构,重放阶段的对象搜索范围可以缩小到该DOM树上的某个父节点。父节点的选择需要考虑以下因素:
1. 元素的上下文因子,该因子表述了节点与其子节点层次关系的强度。一系列的历史数据,包括静态的节点边界和动态的事件捕获节点,都需要考虑在内。
2. 元素的识别学习因子,该因子从候选者与使用元素相关的统计产生。由于该元素的加入,候选者为此增加一个搜索路径,从而提高脚本回放阶段对象识别的效率并提高性能。
如果一个元素确定具有好的搜索路径,识别信息将会产生和保存。在回放阶段,测试脚本总是试图寻找这个上下文对象,从而得到原先录制时的界面对象以及子对象。上下文对象可以包含其它的上下文对象,从而可以进一步提高该方法的识别效率。
2.3关联器
UI对象中相互之间有关联的信息可以用关联器来管理和维护。用户根据关联器的关联信息手动指定,这样一来可以提高对象识别的准确度。被关联的对象需要被清晰地识别并维持对关联对象的连接。例如,Web输入框和与之关联的提交按钮。为了防止过多的假关联,关联器
将自动生成和初始化对象的关联关系。
关联器本质上是一系列具有人工智能的关联侦测器。对于某种特定的关联类型,关联器自动产生一系列的候选关联关系,这些关系是根据对象之间的上下文因子选择的。关联器和上下文对象看起来有些相似,但它们是不同的:上下文对象的生成是在Ajax下对动态属性的变化的保存;而关联器是处理在用户界面上语义有关联的对象。
2.4组识别
每个识别过程都是由面向特定应用的一系列预定义系数来确定。这一系列的系数组分到不同的预配置项,这样可以用于不用的测试场景。例如,一个用来做界面验证的预配置项就不允许有灵活的模糊匹配,而必须是稳定和准确的配置项;一个空配置项可以用来处理高度动态的界面对象。当前激活的配置项可以自动选择,也可以由用户来指定,应用的测试场景决定了使用哪种
UI对象中相互之间有关联的信息可以用关联器来管理和维护。用户根据关联器的关联信息手动指定,这样一来可以提高对象识别的准确度。被关联的对象需要被清晰地识别并维持对关联对象的连接。例如,Web输入框和与之关联的提交按钮。为了防止过多的假关联,关联器将自动生成和初始化对象的关联关系。
3.总结和展望
本文介绍的是一种加强的Web界面对象识别技术,它不仅仅是靠单一的对象属性来识别界面对象,而是综合对象属性、关联的对象属性、上下文、 模式匹配和配置选项来识别界面对象。同时,它具有自动化识别和人工干预想结合的特点,可以应付当前基于如Ajax等界面元素属性动态变化的Web测试,具有高识别率和高测脚本通过率。在HP Quick Test Professional 11.0 上已经实现了这种技术。越来越多的Web测试工具将会使用这种来技术提高Web界面元素的识别率,在目前或者不久的将来会有广泛的应用。
参考文献:
D. Schwartz, S. Aronov, S. Monza, M. Barak, M. Kraus, "多重采样的动态对象识别技术", PDNO 201001233
上一篇:探析确保电视节目的安全优质播出