吴 莹
上海同济大学软件学院,上海 201804
基于Selenium 的Web自动化测试框架
吴 莹
上海同济大学软件学院,上海 201804
随着Web应用的快速发展,Agile开发方法和持续集成被广泛运用。软件测试对于保证软件产品的质量至关重要,而通过搭建良好的测试框架来实现自动化测试,可以降低各测试模块之间的耦合,提高测试的效率和覆盖率,同时也降低了测试的成本,更好的保证软件质量。
自动化测试;测试框架;Selenium;TestNG
随着Web应用的增多,新的模式解决方案中以Web为核心的应用也越来越多。而Web应用程序的验收测试常常涉及一些手工任务,例如打开一个浏览器,并执行一个测试用例中所描述的操作。但是手工执行的任务容易出现操作人员人为的错误,也比较浪费时间。因此,尽可能将这些任务自动化,以消除人为因素,这是一种很好的做法。不仅可以提高软件测试的可靠性,而且节约了成本,更好的保证软件的质量。如何提高自动化测试脚本的维护性和移植性,成为一个亟待解决的问题。
本文通过介绍自动化测试工具Selenium,并结合测试框架TestNG,构建分层的Selenium框架进行复杂的Web应用的自动化测试。
软件测试对软件质量的保证起着至关重要的作用,当前软件开发往往采取Agile开发方法和持续集成的策略。当测试人员一次又一次地完成相同的测试时,这些测试将变得非常令人厌烦。因此,通过自动化测试来实现重复的和一致的回归测试,可以提高测试效率、降低测试成本、保证一致性、实现快读的回归测试、提高测试的可靠性、避免人为因素。
自动化测试工具很多,有开源的,也有商业化的,它们各有各的特点。常见的Web自动化测试工具有:QTP、Win Runner、Load Runner、Robot、SilkTest、Selenium等。而 Selenium可以说是测试Web最全面的开源自动化工具,它支持多种浏览器和多种操作系统,可以在Windows、Linux、Mac和Solaris上运行,而且可以使用多种编程语言进行构建,如Java、C#、Perl、PHP、Python、Ruby,它可以测试的浏览器有IE、Firefox、Opera、Safari、Chrome。
1.2.1 Selenium组件
Selenium通过模拟用户对Web页面的各种操作,可以精确重现测试人员编写的测试用例的步骤。Selenium包含的组件有:
1)Selenium Core:是驱动Selenium工作的核心部分,它是用JavaScript编写的函数集合,是Selenium IDE和Selenium RC 的引擎;
2)Selenium IDE:是Firefox 的一个插件,能够录制回放用户在 Firefox 中的行为,具有代码转换功能,可以将Selenium语言的测试用例转换为C#、Java、Python、Ruby等语言的测试用例,在Selenium-RC 中修改复用;
3)Selenium RC:Selenium Remote Control的缩写,是使用具体的语言来编写测试类。它支持多种浏览器,可以使用C#、Java等语言编写测试用例,易于维护,同时提供了很好的扩展性。Selenium RC在 Web 浏览器与需要测试的 Web 应用程序间架设代理服务器(Selenium Server),使得 JavaScript 引擎与被测 Web 应用程序同源,绕开同源策略的限制,进而取得对 Web 页面进行各种操作的权限。
1.2.2 Selenium基本原理
Selenium Server通过网络与Selenium客户端通讯,接受Selenium测试指令。Selenium Core被Selenium Server嵌入到浏览器页面中,就是通过这些JavaScript函数,实现了用程序对浏览器进行控制,执行Selenium客户端脚本中的测试用例,并通过网络将执行结果返回给Selenium客户端,从而实现Web测试的自动化。如下图所示:
图1 Selenium基本原理
1.2.3 Selenium Grid实现并行的web测试
Selenium Grid是Selenium 的一个扩展,提供了一个类似于网络集线器(Hub)的远程测试控制器,能够将测试请求发送到若干个远程机器的Selenium RC上。允许同时并行地、在不同的环境上运行多个测试任务,极大的加快了Web应用的功能测试。如下图所示:
图2 Selenium Grid
1.2.4 Selenium2.0与WebDriver
WebDriver是一个自动化测试Web应用程序的工具,它的目的是提供一个友好的API,易于探索和理解,有助于使我们的测试更易于阅读和维护。它不依赖于任何特定的测试框架,因此在单元测试或者一个普通的main方法中都可以很好的使用它。WebDriver是完全独立的,在使用它之前不需要启动任何额外的进程或者运行任何安装程序,这与Selenium RC中的代理服务器是不同的。
而Selenium2.0的主要的新功能是将WebDriver API集成到Selenium 1.0中,这将解决随着提供替代编程接口所带来的局限性。它的目标是建立一个面向对象的API,它提供了对大量浏览器的更多的支持,以及对现代先进的web应用程序中的测试问题的更好的支持。
TestNG尤其适合与Selenium结合使用,可以实现其他测试框架无法实现的测试,例如使用依赖项进行测试,重新运行失败了的测试,以及使用单独文件中定义的参数进行参数化测试。所有这些特性结合在一起,使它在众多 Web 应用程序测试框架中脱颖而出。
在测试自动化中,测试代码不仅仅包含测试逻辑,还包含许多其他的代码,比如URL拼接、Html/xml解析、访问UI控件,等等。若把测试逻辑与这些无关的代码混在一起,测试逻辑将很难理解,也不容易维护。而采用分层结构可以解决这一问题。在分层的测试框架中,其三层结构为:1)数据层,包含UI数据和测试数据;2)测试用例层,包含业务逻辑和控制逻辑。驱动程序WebDriver负责测试数据的载入和测试脚本的运行;3)待测系统层。如下图所示:
图3 分层测试框架
TestNG支持三个级别的测试,分别是:Test Suite、Test、Test Method,通过结合注释(annotation)的使用,可以实现测试用例的分组。通过使用testng.xml配置文件,可以实现参数化测试,这样使测试案例的实现更加灵活。如下示例代码可以看到:
图4 示例代码
上面的代码中,注释Parameters指定的参数在TestNG测试框架的配置文件testng.xml里具体定义,只要修改testng.xml中的参数值,就能由输入参数驱动不同的测试用例。如下所示:
图5 testng.xml配置文件
Selenium极大的简化了用户验收测试,尤其当使用TestNG驱动的时候,在完全自动化的验收测试中使用这些特性令它更加出众。基于Selenium和TestNG搭建的测试平台,可以广泛的应用于Web自动化测试。
[1]冯振华,高菊,曾红卫.Web 应用自动化测试的研究[M].计算机工程与设计,2010.
[2]周景才,杨家红,陈毅波.模型驱动的自动化测试架构[M].计算机工程与应用,2010.
[3]邓青华.软件自动化测试工具研究[J].软件导刊,2011.[4]Antawan Holmes,Marc Kellogg.Automating Functional Tests Using Selenium[M],2009.
[5]Xinchun Wang,Peijie Xu,Build an Auto Testing Framework Based on Selenium and FitNesse,2009 International Conference on Information Technology and Computer Science.
[6]http://seleniumhq.org/docs/.
[7]http://testng.org/doc/documentation-main.html
[8]Chris McMahon,History of a Large Test Automation Project Using Selenium,2009 Agile Conference.
TP311.5
A
1674-6708(2011)51-0187-02
吴莹,硕士,研究方向:软件测试