• 1
  • 1
分享
  • WEB自动化测试之元素定位自动生成探索实践
  • 九哥 2022-10-19 13:27:46 字数 3500 阅读 1110 收藏 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)元素规律还有待补充完善,部分元素定位信息还需手工调整。

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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 在公司参与招聘后,见过的简历没上千也有上百份了,目前的话,已经能很快速的进行简历筛选。今天准备逆向思维从筛选简历的角度说说写简历时千万不能出现的 3 个问题。大部分简历一眼瞅过去,都可以被快速划分为三类:淘汰、惋惜、通过。其中淘汰和惋惜的,或多或少都存在如下 3 个问题: 简历中各种各样的「精通」;简历中撒谎的痕迹;简历中出现明显的低级错误; 下面我们就每一点展开的说一下: 一、千万要慎用「精通」 举个例子: 精通 Windows 操作系统; 要是在之前,我还会约一下这样的同学,毕竟这么自信的人,一定还算厉害吧?即使不厉害,也比一般人要强吧?但是,自从见过几个之后,真的,真是...
            3 5 2997
            分享
          •   今天一看日历,才突然意识到自己毕业已经四年了。四年时间里一直在测试行业摸爬滚打,现在是时候记录一下了。  下面我来分享下我这4年软件测试经验及成长历程,或许能帮助你解决很多工作中的迷惑。  我是如何开始做测试的?  2013年开始上大学,一个不算好的小二本,专业也是被调剂的-信息与计算科学,看起来高大上的专业,实际到真正学习的时候才发现,学习的东西泛而不精,数学知识与计算机知识掺杂,导致大学学了四年后,对什么都一知半解,更找不到毕业后的方向和职业规划。  一个偶然的机会,接触到了嵌入式,听说发展前景很好。由于当时对就业的迷茫,终于没能抵挡住诱惑,就这样,大四那年基本都是在嵌入式学习中度过的...
            0 0 842
            分享
          •   苹果公司将于近期发布的 iOS 17.1 更新解决了一个"可能导致显示屏烧屏"的问题。自 iPhone 15 机型发布以来,一直有零星报道称新设备出现严重的屏幕烧毁现象。有人猜测可能是 OLED 显示屏的硬件问题,但根据 iOS 17.1 更新,苹果发现并解决了这个问题。  虽然大多数显示屏问题的报告都来自 iPhone15 用户,但也有一些使用 iPhone 13 Pro 和 iPhone 12 Pro 设备的用户出现了类似问题,这很可能就是为什么苹果的发布说明没有特别提及 iPhone 15 的原因。  那些发现 iPhone 出现"烧屏"问题的...
            0 0 1160
            分享
          •   关于SQL语句的优化,本质上就是尽量降低SQL语句的执行时间,对于如何降低SQL语句的执行时间,可以从以下几个方面入手。  一、降低SQL语句执行时的资源消耗  这是我们在数据库性能调优中常用的方法,该方法以分析SQL语句的执行计划为切入点,核心思路是找到执行计划中开销较高的操作,通过改写SQL语句或改变表访问方式调整执行计划,从而达到降低SQL语句执行消耗,缩短执行时间的目的。  对于改变表访问方式,常见的手段是使用索引替代开销较高的全表扫描,但这种方式不是万能的,是有一定的使用前提的,有时候,滥用索引反而会带来较高的性能开销。  以下列举一些适合采用访问索引的方式替代原有操作的案例。 ...
            0 0 665
            分享
          •   文章的作者J.B. Rajkumar分享了他在敏捷环境中实施自动化回归测试的经验。  概述  最近,当我想利用四种资源开始一个新的自动化测试项目时,我首先想到的是使用敏捷方法中的任何一个,但是往往不能继续,因为一连串的问题浮现在了我的脑海里。这些问题类似"在自动化测试中使用敏捷方法是否可能?""我能否使用传统工具?""我是否应该使用开源工具?""如果我在敏捷环境中使用了自动化测试,那么我面临的挑战都有哪些?"。在这篇文章中,让我们一起分析,在自动化测试中使用了敏捷方法所遇到的一些挑战。在敏捷环境中的自动化测试处...
            0 0 3140
            分享
      • 51testing软件测试圈微信