• 1
  • 1
分享
  • WEB自动化测试之元素定位自动生成探索实践
  • 九哥 2022-10-19 13:27:46 字数 3500 阅读 752 收藏 1

01 WEB自动化测试

随着WEB程序的不断演化,WEB程序的功能愈发全面和完善。随之而来的,软件规模和复杂度与日俱增,系统内各组件之间的交互也愈发频繁,从而经常出现修改某一组件的代码,另一个组件功能出现意想不到的异常反应。这就要求测试人员执行大量的回归案例来解决这一问题,确保整个应用程序功能正常。

日益复杂的系统和愈发严格用户体验,使得软件测试人员的测试任务愈发繁重。手工测试解决这一矛盾,需要投入大量的人力资源重复执行相似的测试步骤。客观上造成了人力资源的浪费。同时,由于测试人员技能的差异,使得软件测试质量不稳定也不可期。

自动化测试是一种把人为驱动的测试行为转化为机器执行测试的方法。相较于传统的手工测试,这种使用机器代替人工执行测试、比对结果的方法,不仅节约了人力、时间等资源,也提高了测试效率。自动化测试具有的测试覆盖面广、测试流程规范等特点,也有力保障了测试质量的稳定可期。

02 基于ATP平台的自动化测试框架

ATP (Automation Testing Platform)是一款我行自主研发的自动化测试平台,是一款高效、高质完成大量占用人工成本较高的业务逻辑覆盖测试及回归测试的案例执行及结果分析的工具平台。如图-1所示,系统可以粗略的分为代码库、Object库和ATP平台三部分。代码库存放一种基于商语言描述的自动化测试脚本;Object库存放页面元素的定位描述信息;ATP平台依据Object库的元素定位信息和代码库的自动化脚本,进一步翻译成计算机可执行语言。计算机按步执行,完成测试工作。

在这个过程中,测试人员需要手工录制和建设Object库。由于丰富的元素种类、不规范的程序编码、动态展示元素、结构复杂的DOM树等客观因素的存在,这就造成测试人员在手工录制和建设Object库时困难重重。尤其是给非计算机专业人员带来的巨大困惑和繁重工作。针对这一痛点,本文提出一种元素定位信息自动生成方法。该方法基于Page信息表(一种更直观的信息表)自动生成元素定位信息,自动构造Object对象库。

如下图红色虚线方框内容所示,该元素定位信息自动生成方法以Page信息表为输入,自动生成Object库中的各界面子库、总库和公共库。Page信息表、子库、总库、公共库的相对关系如下图红框区域所示。

03 元素定位信息自动生成方法

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个,避免造成公共对象库冗余,从而不便于测试人员记忆查找。

04 结语

随着自动化测试方法的普及和应用,元素定位信息获取和管理将变得越来越重要。如何有效的建设和管理元素定位库是一个摆在测试人员面前的难题。本文基于这种难点,提出一种定位信息自动化对象库。这种方法具有以下优势:

1)大量减少测试人员抓取元素定位信息的工作量;

2)显著减少巨量元素信息的维护成本;

3)降低了自动化测试的门槛,测试人员不需关注自动化的底层实现也可进行自动化测试;

4)通俗易懂,用更接近交易操作逻辑的方式描述界面信息。

同时本方法还有一些不足:

1)需要测试人员手工填写Page信息表;

2)元素规律还有待补充完善,部分元素定位信息还需手工调整。

这些不足是我们未来改进的方向,我们将以此为出发点,持续改进该方法。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   黑盒测试的原则  依据软件需求文档设计测试用例,验证软件实现满足需求文档的情况,软件文档的正确性对于测试的有效性至关重要。  有针对性地查找问题,并能正确定位问题所在。检查功能实现是否正确,是否存在未实现,未全部实现,实现错误等情况。  根据软件功能的重要性以及时间进度安排确定测试等级以及测试重点,减少程序中出现严重缺陷的可能性。  制定合理的测试计划和测试策略,尽可能发现程序中的错误,并且尽可能的站在用户的角度去进行测试。  分析产品的应用场景、所需支持的设备,尽量模拟生产环境搭建测试环境。  黑盒测试的策略  尽量采用等价类分析法和边界值分析法,这两个方法设计的测试用例对于发现程序的错...
            0 0 273
            分享
          •   新手学软件测试工程师学得好吗?如果你想转行到IT行业,软件测试是一门相对简单的学科,非常适合零基础的人学习。如果你决心学好软件测试并充满兴趣,那么学习不会太难。如果你是转行的人,买本软件测试书先学习基础知识,对基础知识有一定的理解很重要。  新手的软件测试课程实际上并不难学习,具有一定的学历,非计算机专业背景也可以学,软件测试不需要敲太多代码,只要操作测试工具进行测试就可以,细心耐心就可以胜任。软件测试入门简单,但深入困难,入门时只要理解中文,理解能力没有问题,就可以根据测试用例实施用例。  测试理论知识的学习测试定义、测试分类、测试方法、测试生命周期、测试计划、测试方案、测试策略、测试用...
            0 0 466
            分享
          • 一、Restful接口实例通过构建一个Restful接口实例,更加直接深入了解Restful接口的开发。二、构建一个简单实例1.创建项目参考https://blog.csdn.net/u010886217/article/details/852391102.项目结构Maven项目结构3.创建第一个controller测试类:HelloworldControllerpackage com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.spring...
            0 0 3599
            分享
          •     近两年来,自动化测试工程师越来越火了,薪资待遇也快接近开发工程师了。    企业对于自动化测试的需求量也越来越高    如上图所示,真正工作中无法全部满足以上条件,所以需要作出权衡,一般来说,只需要满足以下几点,就可以对项目开展自动化测试(图中红色框标注的选项):    ①需求稳定,不会频繁变更    自动化测试最大的挑战就是需求的变化,而自动化脚本本身就需要修改、扩展、debug,去适应新的功能,如果投入产出比太低,那么自动化测试也失去了其价值和意义;    折中的做法是选择相对稳定的模块和功能进行自动化测试,变动较大、需求变更较频繁的部分用手工测试;    ②多平台运行,组合遍历型...
            0 0 869
            分享
          • postman 测试工具很多时候只用于简单的get或post请求,普通的请求只要加入适当的参数点击send就可以正常请求并得到相应的响应结果。当涉及到文件下载时,需要把点击send改为点击send and download(默认send处下拉选择)。如果请求参数很长要怎么复制完全:首选谷歌浏览器,在浏览器控制台指定请求地址处鼠标右击选择store as global variable,游览器会自动在控制台建立含参数信息的临时变量,此时用控制器函数JSON.stringfy(临时变量名称)展开所有参数信息方便复制。1、请求参数:2、浏览器控制台获取参数信息3、加全局参数,如加当前登入入或登入机构...
            0 0 3679
            分享
      • 51testing软件测试圈微信