随着WEB程序的不断演化,WEB程序的功能愈发全面和完善。随之而来的,软件规模和复杂度与日俱增,系统内各组件之间的交互也愈发频繁,从而经常出现修改某一组件的代码,另一个组件功能出现意想不到的异常反应。这就要求测试人员执行大量的回归案例来解决这一问题,确保整个应用程序功能正常。
日益复杂的系统和愈发严格用户体验,使得软件测试人员的测试任务愈发繁重。手工测试解决这一矛盾,需要投入大量的人力资源重复执行相似的测试步骤。客观上造成了人力资源的浪费。同时,由于测试人员技能的差异,使得软件测试质量不稳定也不可期。
自动化测试是一种把人为驱动的测试行为转化为机器执行测试的方法。相较于传统的手工测试,这种使用机器代替人工执行测试、比对结果的方法,不仅节约了人力、时间等资源,也提高了测试效率。自动化测试具有的测试覆盖面广、测试流程规范等特点,也有力保障了测试质量的稳定可期。
ATP (Automation Testing Platform)是一款我行自主研发的自动化测试平台,是一款高效、高质完成大量占用人工成本较高的业务逻辑覆盖测试及回归测试的案例执行及结果分析的工具平台。如图-1所示,系统可以粗略的分为代码库、Object库和ATP平台三部分。代码库存放一种基于商语言描述的自动化测试脚本;Object库存放页面元素的定位描述信息;ATP平台依据Object库的元素定位信息和代码库的自动化脚本,进一步翻译成计算机可执行语言。计算机按步执行,完成测试工作。
在这个过程中,测试人员需要手工录制和建设Object库。由于丰富的元素种类、不规范的程序编码、动态展示元素、结构复杂的DOM树等客观因素的存在,这就造成测试人员在手工录制和建设Object库时困难重重。尤其是给非计算机专业人员带来的巨大困惑和繁重工作。针对这一痛点,本文提出一种元素定位信息自动生成方法。该方法基于Page信息表(一种更直观的信息表)自动生成元素定位信息,自动构造Object对象库。
如下图红色虚线方框内容所示,该元素定位信息自动生成方法以Page信息表为输入,自动生成Object库中的各界面子库、总库和公共库。Page信息表、子库、总库、公共库的相对关系如下图红框区域所示。
Object库中元素定位信息描述直接决定了程序能否定位到元素,可以说Object库就是自动化测试成功的基石。因此,正确、快捷地获取元素定位信息就变得愈加重要。本文提出的元素定位信息自动生成方法是基于测试人员标注的页面信息自动生成、构建元素定位信息对象库。不仅减少测试人员手工获取元素定位信息的工作量,也使得测试人员摆脱底层实现的困惑,可以更专注于编写测试案例。
3.1 Page信息表
Page信息表是一种更直观、更接近元素操作的信息描述表,存储了交易界面上元素的名称、操作类型和定位信息。其中,元素名称列填写交易界面上可见的需要手工输入、点击等操作要素名称;元素操作类型列填写该要素会被执行的操作,如:输入、点击、勾选等;定位信息列记录了该元素或其容器的定位信息。即该元素有名字/ID,则填写该元素的名字/ID。该元素无名字/ID,则填写其具有名字/ID的容器信息。Page信息表格式如下表所示:
3.2 元素定位方法
在WEB自动化测试中,常用的WEB元素定位方法有ID定位、NAME定位、LINK定位、PARTIAL_LINK定位、CSS定位、XPATH定位、CLASS定位和TAG定位八种定位方法。同一WEB元素可通过多种定位方式获取,不同的定位方式稳定性、可读性不同。为了方便构建Object对象库和减少后期的维护成本,元素定位方法应优先选择简单、稳定的定位方式。
分析上述八种定位方式,可知:NAME和ID定位更易懂和更便捷;XPATH定位功能强大、定位方式灵活,定位精度高;LINK定位是获取超链接时使用,具有单一不可替代性;PARTIAL_LINK相较于LINK只需要部分文本内容,形式更加灵活。
通过分析,我们制定了定位方法优先级。优先级共分为三层,如下表所示:
打开页面源码,通过观察元素信息我们发现同类元素的定位存在相同的规律。例如:立项层级右侧的倒三角下拉框按钮(如下图蓝色标注),该元素的<span>标签无ID信息。且该元素描述信息较少,直接定位存在困难。通过观察其父节点的兄弟节点<input name=”projEstLvl”>,我们发现该元素存在ID且两个元素相对位置固定。故可以通过父兄节点元素ID(projEstLvlSearch)+相对位置(../SPAN[2]/SPAN[1]"))定位倒三角下拉框。
诸如此类的元素定位规律还有很多,我们结合元素定位方法优先级表和元素分布规律,对不同的分布现象采取了不同的定位方法。如下表所示:
3.3 自动生成元素定位信息
如下图所示,测试人员点击打开交易的主界面和子界面,观察页面输入要素的信息。将这些信息填写到一个Page信息表中。程序以Page信息表为输入,按照元素定位规律生成各界面对应的子库。部分元素组件(如:机构代码树等)因被大量交易整体复用,则直接生成到公共库中;部分界面(如:复核界面等)作为一个整体被其他交易调用,则从子库中移除,转入到公共库中。最后,程序扫描各子库和公共库的记录,将元素定位信息逐一登记到总库中,相似定位信息登记为一条记录。当元素定位信息发生改变时,测试人员通过修改总库中的元素定位信息,程序自动更新各子库、公共库中对应的元素定位信息,从而减少了维护成本。
我们用固定资产管理系统的房地产盘盈交易主界面为例,详细演示元素定位信息自动生成流程。如下图所示,观察房地产盘盈交易主界面发现有项目编号、项目名称等文本元素,有查询、重置、明细信息等公共按钮,有明细建设类型、立项层级等下拉列表,有项目所属机构代码等公共组件,有记录显示表格等元素。
测试人员将观察到的元素名称填写到Page信息表元素列中;根据测试人员手工测试时,该元素的输入方式选择操作类型;查看页面源码根据表-3的登记原则填写定位信息,如用Chrome浏览器打开网址,按F12弹出页面源码,通过左上角的查看按钮选中元素,查看该元素信息。在定位信息列登记该元素的NAME/ID或其父兄的ID。如下表所示:
填写完成房地产盘盈的Page信息表后,程序依据元素定位信息规律,自动转换生成该界面的子库定位信息。然后,程序根据子库和公用标识,生成总库和公共库信息。房地产盘盈主界面元素对象库如下表所示:
在元素对象库系统中有总库、子库和公共库三种类型的对象库。由于大量的交易会复用同一个元素对象,这些元素对象分散在不同的子库中。为了方便管理这些元素设置总库,总库中登记一条该元素定位信息,并记录存储该元素的子库信息。如:“房地产盘盈主界面”子库中存储了“项目编号”元素,则元素位置列登记为“房地产盘盈主界面_项目编号”。若有其他子库也存储了“项目编号”元素,则按照“子库名_元素名”。
元素类型用于区分同一类型操作不同的要素。如:项目编号和盘盈房产地址都是文本框,但是项目编号是单行文本框,只能输入一行文本字符,盘盈房地产地址是多行文本框,支持输入多行文本字符。属于操作不同的两种元素,故分别标记为文本类型I和文本类型II进行区分。如下表所示:
由于部分元素、子窗口整体被大量复用,为了减少重复录制的次数和提高元素复用率。将此类元素、子窗口定义为公共对象。如下表展示了“搜索机构树”组件的元素定位信息。
提取公共库的原则如下:
1)该组件稳定且整体被大量调用;
2)该页面对象独立存在且被大量交易调用,从交易界面移除该界面不影响交易的可理解性;
3)公共对象库的个数不超过20个,避免造成公共对象库冗余,从而不便于测试人员记忆查找。
随着自动化测试方法的普及和应用,元素定位信息获取和管理将变得越来越重要。如何有效的建设和管理元素定位库是一个摆在测试人员面前的难题。本文基于这种难点,提出一种定位信息自动化对象库。这种方法具有以下优势:
1)大量减少测试人员抓取元素定位信息的工作量;
2)显著减少巨量元素信息的维护成本;
3)降低了自动化测试的门槛,测试人员不需关注自动化的底层实现也可进行自动化测试;
4)通俗易懂,用更接近交易操作逻辑的方式描述界面信息。
同时本方法还有一些不足:
1)需要测试人员手工填写Page信息表;
2)元素规律还有待补充完善,部分元素定位信息还需手工调整。
这些不足是我们未来改进的方向,我们将以此为出发点,持续改进该方法。