《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > 基于Geb的Web自动化测试的原理与实践
基于Geb的Web自动化测试的原理与实践
2016年微型机与应用第17期
胡荆陵,孙涌,陈建明
苏州大学 计算机科学与技术学院,江苏 苏州 215006
摘要: 随着互联网技术在全球范围内的迅速发展,各种 Web 应用程序已成为系统软件开发的主流,对应的自动化测试理论和工具日趋重要。基于开源的自动化测试工具 Geb,介绍了它的大致原理,给出了一个简单可行的实践步骤。通过准备测试用例,编辑测试脚本,执行测试脚本的步骤,Geb 可调用各子模块,根据脚本的要求,模仿真正的人手动操作浏览器、并得到测试结果。Geb 可以跨浏览器,跨平台运行,进行本地或远程的测试,值得在真实开发场景中推广使用。
Abstract:
Key words :

  胡荆陵,孙涌,陈建明
  (苏州大学 计算机科学与技术学院,江苏 苏州 215006)

       摘要:随着互联网技术在全球范围内的迅速发展,各种 Web 应用程序已成为系统软件开发的主流,对应的自动化测试理论和工具日趋重要。基于开源的自动化测试工具 Geb,介绍了它的大致原理,给出了一个简单可行的实践步骤。通过准备测试用例,编辑测试脚本,执行测试脚本的步骤,Geb 可调用各子模块,根据脚本的要求,模仿真正的人手动操作浏览器、并得到测试结果。Geb 可以跨浏览器,跨平台运行,进行本地或远程的测试,值得在真实开发场景中推广使用。
  关键词:自动化测试;测试脚本;Geb  

0引言
  随着我国经济的飞速发展,软件行业发展迅速。基于互联网的 Web 应用程序软件以易开发、易使用、易扩展和易维护等优点被广泛使用。而 Web 应用程序的测试往往还是由测试人员手工进行,测试成本高,效率低。并且由于软件版本的迭代和更新,产生大量回归测试的工作量。因此对 Web 自动化测试的可行性和效率提出了更高的要求。
  本文介绍的 Geb 开源自动化测试框架,对 WebDriver 进行封装,可以做到跨浏览器测试,利于 Web 应用程序在不同浏览器品牌和版本下的兼容性测试;使用 Groovy 语言开发测试脚本,使代码相对精简,在提高开发效率的同时,Groovy 运行于 Java 虚拟机中,因此也可以轻松地实现跨平台运行,极大地扩展了 Web 自动化测试的运行环境。
1测试原理
  Geb 汇集 WebDriver 的力量、优雅的 jQuery 内容选择、页面对象模型的鲁棒性和 Groovy 语言的表现力,支持 Spock、JUnit、TestNG 等知名测试框架的集成。Geb 总体框架图如图1所示。  

图像 001.png

  所谓自动化测试,其原理很简单,就是最大程度地模拟人工对页面进行的各种点击和输入操作。WebDriver 用于调用浏览器驱动程序,来模拟用户的各种输入和操作,比如:在某个文本框中输入预设的字符串值,或者是点击当前页面上的某个指定的按钮,是 Web 自动化测试的主要实现方式和核心模块[1];jQuery选择器的作用是根据CSS的ID标识符定位 Web 页面上的唯一 HTML 标签元素,或根据 CSS class 样式来定位 Web 页面上的一个或多个 HTML 标签元素,提供了开发者最熟悉的获取页面 HTML 标签的方式[2];页面对象模型的作用是将 jQuery 选择器获得的各种 HTML 标签元素映射抽象为 Geb 能理解的各种对象,为面向对象编码方式奠定基础,并为后面的一系列抽象做支撑,最大程度地降低测试脚本的冗余度;测试库的作用是提供对 Spock、JUnit、TestNG 等知名测试框架的集成支持,测试者可以根据使用习惯,选择熟悉的测试方法;Groovy 脚本的作用是根据测试用例编写所有的测试脚本,因此占据工作量的主要部分。
2Web应用程序
  为说明问题,需要有一个被测试的对象,也就是前面提到的Web应用程序。由于只是对 Geb 做一个初步了解,无需太复杂的场景,本文以一个简单实体类的新增、查询、更新和删除 Web 应用为例,来检验 Geb 自动化测试的效果。
  2.1数据库设计
  准备一个班级实体类,数据表设计如表1所示。

图像 003.png

  2.2实现功能
  在这个Web 应用程序中,已提供以下功能:查看班级列表、新增班级、删除班级、查看班级信息。这些功能都是后面需要进行测试的。
  具体实现过程和细节已省略,实现后通过浏览器打开并访问即可。需要补充的是,由于 Geb 封装的 WebDriver 使用 FireFox、Chrome 浏览器,实践时请留意安装。图2给出了做好的班级列表页面。  

图像 002.png

3测试脚本
  在准备了 Web 应用程序后,接着就需要准备测试用例和测试脚本。
  3.1测试用例
  测试用例通常与功能用例成正比关系,本文准备以下5个测试用例,详见表2。
  3.2编辑脚本
  测试人员需要根据已制定的测试用例,编写测试脚本,再由程序自动化测试。由于篇幅有限,本文仅提供其中一个测试用例对应的脚本,代码如下所示。

图像 004.png

  class Sit01ClassListToAdd extends GebReportingSpec{
  def "测试用例01-班级列表到新增班级"() {
  given: "班级列表页面"
  to ClassListPage
  when: "点击新增按钮"
  classAddBtn.click()
  then: "新增班级页面"
  at ClassAddPage
  }
  }
  测试脚本是使用 Groovy 语言编写的,再结合Spock测试库的使用。其具有以下特点:Groovy 是面向对象编程语言,相对 Java 代码更加精简,更加灵活。在同样熟悉的情况下,使用 Groovy 可以显著提高编码效率;Spock 是行为驱动开发的典型代表,得益于敏捷开发提供的新理念,代码风格属于自然语言,可读性极强,可以简化设计人员与测试人员之间的交流成本[3]。
  笔者已将全部的测试用例示例代码上传至因特网,读者如有兴趣了解更多,可以通过网络下载和查看,地址是:http://pan.baidu.com/s/1slKMe9v,期间如遇任何疑问,也可以再做进一步交流。
4测试方式和结果
  在执行之前,确保Web 应用程序已启动,并可通过浏览器访问相应的页面。
  本文使用的 PC 配置如下:操作系统 Windows 7,处理器 i3 4170 3.7 GHz,内存4 GB DDR3 1 600 MHz,硬盘160 GB,主板P8B75。这个配置是非常普通的,大多数软件公司都可以轻松采购和配置,也就是说大范围推广 Web 自动化测试的硬件成本不高。
  测试方式采用的是黑盒测试,分别进行3次手动测试和3次自动测试,对比结果如表3所示。

图像 005.png

  可看到,自动测试可以缩短约 50% 的测试时间,并且无需人为干预。这一特性对于 Web 应用程序的回归测试的贡献尤其重要,测试脚本可以一次开发多次运行。
5结论
  Geb 为 Web 应用程序的自动化测试提供了一种切实可行的方案,实践结果表明,可以极大节约测试成本。也可用于 Web 应用程序的通用自动化处理,有着非常广阔的应用场景。
  目前,Geb版本为0.13.1,还在不断发展中,期待后续版本发布后,能为各方面带来提升。
  参考文献
  [1] CHANDRAPRABHA C, KUMAR A, SSXENA S. Data driven testing framework using selenium WebDriver [J]. International Journal of Computer Applications, 2015, 118(18):18 23.
  [2] 王晶, 温向彬. 利用jQuery操作HTML元素 [J]. 农业网络信息, 2008(4):98 99.
  [3] SOEKEN M, WILLE R, DRECHSLER R. Assisted behavior driven development using natural language processing[C]. International Conference on Objects, Models, Components, Patterns. SpringerVerlag, 2012:269 287.

此内容为AET网站原创,未经授权禁止转载。