Selenium的Web功能测试

问题来源

一般来说,在大型Web软件的开发和测试阶段,我们常常会遇到下列一些困难或挑战:

1) 测试环境。绝大多数的Web应用软件,都要求跨浏览器、跨平台,不仅要兼顾Windows、Mac OS、Linux等,而且还要兼顾IE、Firefox、Safari等,如何能在很短的工期内完成如此多平台的测试

2) 测试范围。测试范围不仅包括产品的功能特性,还包括大量的测试数据,尤其在进入全球化的今天,还要考虑不同地区的字符集输入。即使对一个简单的login模块,考虑不同地区、不同语言、不同行为和习惯的用户,输入数据的组合测试也多达几十种。单凭人工测试,怎能涵盖如此大量的数据驱动测试?

3) 回归测试。软件需求的频繁变化,是众所周知的一个问题,而Web应用的变化就更为频繁,从而引起软件设计、代码的一系列变化。这如同蝴蝶效应一样,软件的整体功能可能或多或少受到了影响,不经过测试就无法确认未修改的功能没有受到影响。测试要覆盖所有功能,包括被修改的和没被修改的,这就要进行大量的回归测试。如果通过手工完成回归测试,则既费时又单调无味,自动化测试是最好的选择。

如何解决上述问题呢?只有求助自动化测试工具,而要在众多的Web功能(回归)测试的开源工具之中做出选择,非“Selenium”莫属。

Selenium优势

Selenium(http://seleniumhq.org/)是ThoughtWorks专门为Web应用而开发的自动化测试工具,适合进行功能测试、验收测试,其主要优势有:

1) 适合Web应用的测试,可直接运行在浏览器之上,所见即所得,因为Selenium的核心是用JavaScript编写的;

2) 跨平台,支持多操作系统(Windows, Mac OS和Linux)和各种浏览器(Internet Explorer、Mozilla和Firefox);

3) 支持分布式应用的测试,可构造一个完整的解决方案,包括控制器、远程测试机等;

4) 支持两种开发脚本的模式——test runner (HTML文件)和driven(脚本语言编写),使测试既可以完全在浏览器内运行,也可以脱离浏览器、在远程机器上运行。

5) 支持多种脚本语言,包括Java、C#、PHP、Perl、Python和Ruby等。

Selenium一个工具集

Selenium是一个工具集,由几个测试工具承担不同的角色,从而构成一个针对Web应用测试的、完整的解决方案。

Selenium的Web功能测试_第1张图片

1) Selenium IDE(集成开发环境),firefox的插件(plug-in),可以录制、回放并编辑测试脚本,是Selenium脚本的开发平台;

2) Selenium Core(核心)是符合断言(assertion)机制的、测试套件执行的平台。它是整个Selenium测试机制的核心部分,由纯JavaScript代码组成,负责具体测试任务的执行

3) Selenium Core HTA是针对IE设计的执行平台,可以看作Selenium Core的一个特例,运行于IE的最高安全级别之上;

4) Selenium Remote Control(远程控制)是一个代理与控制端,代替Selenium core/ Selenium IDE的客户端,从而可以在远程机器上执行测试任务,并支持多种脚本语言,如Java、.NET、Perl、Python和Ruby;

5) Selenium Grid可以并行地运行多个Selenium Remote Control的实例,从而在分布式环境中同时运行多个测试任务,并能在一台机器上控制这些任务的执行,可以极大地加快Web应用的功能测试。

Selenium Grid是Selenium的一个扩展,提供了一个类似于网络集线器(hub)的远程测试控制器,能够将测试请求发送到若干个远程机器的Selenium-RC实例上,有下列特性:

1) 实施多机器、多线程的测试任务;

2) 将一个具体测试任务显式地分配给Selenium RC;

3) 通过名称来选择具体环境的实例,如Windows XP的IE7或Ubuntu的Firefox 3.0等;

4) 限制每个RC最大的并发测试数;

5) 将测试屏蔽在一个实际的网格结构之外。

Selenium Grid只负责测试任务的分发、控制和管理,但不负责这些测试的执行。测试任务由Selenium RC/Core来执行,也可以由其他测试工具Parallel JUnit、CubicTest、Watir和DeepTest for Ruby等来执行。

Selenium IDE使用介绍

1) 下载和安装测试工具

首先去http://seleniumhq.org/projects/ide/下载Selenium IDE,点击右页上部的链接“download now”,下载其最近的一个版本(本书使用的是1.0 beta 2,2008年6月发布)。在安装Selenium IDE之前,要准备好Firefox(火狐)浏览器,Firefox可以从http://www.firefoxplus.org/下载。

安装Selenium IDE很容易。如果是用Firefox下载的,浏览器会自动提示安装,点击“立即安装”按钮就能完成安装。如果事先已下载类似“selenium-ide-1.0-beta-2.xpi”的文件,就用Firefox的“打开文件”菜单功能,打开已下载的xpi文件,安装Selenium IDE。安装成功后,重启Firefox,菜单“工具”下会出现“Selenium IDE”。

点击“Selenium IDE”,启动Selenium IDE,出现主界面,可以展开左边测试用例(test case)列表窗口,默认是不展开的,展开后的界面如下图所示。左边测试用例的脚本直接显示在右边脚本窗口。这里只完成一个例子,可以合上左边窗口。

Selenium的Web功能测试_第2张图片
Selenium IDE的界面

2)  录制测试脚本

打开Selenium IDE,默认处在录制状态。如果不是,就点击录制操作按钮[插图]。去Firefox打开Google首页www.google.cn,输入“用Selenium进行自动化测试”,点击“Google搜索”按钮,进入搜索结果页面,然后选择搜索结果页面中的“www.ibm.com”,点击右键,如图1-5所示,选择倒数第3项 “verifyTextPresnt www.ibm.com” ,验证“www.ibm.com”会在搜索结果中出现。

同样,选择“有9310项符合”和“搜索用时0.38秒”,进行同样的操作,即共进行3项验证。测试本身就是验证的过程,通过期望结果和实际结果比较,我们才能判断是否会出现缺陷。这里只是一个演示,所以简单地选择这3项内容作为将来验证的期望值。然后点击第1个搜索结果,结束录制,即点击按钮[插图]。录制的脚本可以在“脚本窗口”浏览,如下图所示,由 “Command(命令/动作)”、“Target(目标/对象)”及其“Value(值)”构成三段式脚本语言(Selenese)。

Selenium的Web功能测试_第3张图片
脚本录制完毕后的界面

3) 执行测试脚本

完成了脚本录制,就可以执行脚本(也称脚本回放)。先将回放速度调整慢些,从而使执行过程看得更清楚些,即将[插图]中绿色游标向“slow”移动。然后,点击按钮[插图],就开始执行脚本。我们会看到浏览器自动打开www.google.cn的首页,自动输入“用Selenium进行自动化测试”,搜索结果页面很快显示出来,脚本执行结束。

4) 测试结果

运行结果如图1-7所示,从中可以看出,前面两个验证结果通过,显示为绿色,而第3个验证“verifyTextPresent搜索用时0.34秒”失败,显示为红色。为什么失败呢?因为Google每次搜索用时是不一样的,再次执行脚本的时候,用时只要0.04秒,会显示“搜索用时0.04秒”,导致第3个验证失败。查询日志(Log),可以看到红色的信息“[error] false”,说明验证失败。而且发现另一个操作,点击link也没成功,主要是链接页面已跳出基准URL(站点),不在Selenium IDE的控制范围。如果点击“高级搜索”链接,就没问题,你可以自己试试。

Selenium的Web功能测试_第4张图片
运行结果界面

Selenium IDE还提供了通向Selenium Core、Selenium RC的跳转接口,例如,可以将HTML的脚本自动转换为Java、.NET、Perl、Python和Ruby中的任何一种。

Selenium 命令

Selenium命令可分成3类,即操作(action)、辅助(Accessors)和断言(assertion)。

操作命令模拟用户与Web应用程序的交互。例如,单击一个按钮(click)、输入字符串(Type)或某个选项被选中(Check),这些都是常见的用户操作。 许多动作可以包含后缀“AndWait”的方式来调用,在浏览器向服务器发送一个请求之后,还须要使Selenium等待加载一个新的页面,如clickAndWait、selectAndWait和typeAndWait等,而且这类命令会使脚本更稳定。

辅助命令用于检查应用程序的状态并将结果存储在变量中,如storeTitle。它们也可用于自动生成断言。

断言命令是验证一个操作的实际结果是否和预期结果一致,如验证页面内容或当前位置是否正确。断言又分为3种模式:assert、verify和waitfor。例如,可以用assertText、verifyText和waitforText。

1. 3种断言模式的区别

当assert验证失败时,测试执行将终止,退出。

当verify验证失败时,测试执行不会终止,继续执行下去,并将错误记入日志。

waitfor命令用于等待某些条件变为真(可用于Ajax应用程序的测试)。如果该条件为真,将立即被执行。反之,如果该条件不为真,则告知失败并暂停测试,直到超过当前所设定的时间(和命令setTimeout结合起来使用)。

这就允许通过单条assert断言确保应用程序停留在正确的页面上,而通过一系列的verify断言测试表单上的区域值、标签等多项内容。

2. 元素定位器

许多命令需要一个目标对象,即元素target属性,定位器(Element Locators)告诉Selenium向HTML DOM中哪一个元素发送命令, locatorType = argument。

3. 元素过滤器

元素过滤器(Element Filters)可以同定位器一起使用,从一系列候选元素中进行筛选。元素过滤器目前仅用于@name的元素定位器,可以基于name的值进行匹配。在从一系列相似命名的关联按钮中选择某些内容时,元素过滤器就非常有用。

4. 匹配模式

模式(Patterns) 用于匹配字符串值,如指定一个输入域的期望值或识别一个选项。Selenium支持许多类型的模式,其中包括正则表达式。

测试用例和测试套件

测试用例开发涉及4类文件,除了引擎库以外,其他3类文件都是可以根据具体情况去修改的。

1) 主文件:TestRunner.html/TestRunner.hta (.hta文件是html application、windows平台特有);

2) Test suite(测试套件)和Test case(测试用例)文件:通过以表格为基础的html文件来实现;测试套件用于将具有类似功能的一些测试用例编成一组,以便能按顺序执行一系列测试用例。

3) 引擎库js文件:位于Selenium根目录下的核心文件,其中html-xpath目录下的那个文件就是所需的库文件;

4 user-extensions.js:用来扩展Selenium的文件,用户自定义的函数和扩展的命令都应该放在这个文件中。

Selenium执行的默认测试套件的名称是TestSuite.html。测试套件使用一个只包含一列的表,表中的每一行指向一个包含某个测试用例的文件。对于一个有着多个功能模块、组件的web应用,编写的测试脚本html必然比较多。因此,建立一个合理的目录结构来组织这些脚本是必要的。

Selenium部署完毕后,可以打开浏览器通过url来访问TestRunner.html文件。由TestRunner.html调用相应目录下的测试套件的HTML格式文件——TestSuite.html。再由TestSuite.html调用相应的测试用例(测试脚本),即TestSuite.html所列出的一系列测试脚本的html文件。可以直接修改TestSuite.html文件,让其指向自己开发的Test case html文件。而TestSuite.html被设计成如下表所示,定义全局变量的setVariable1.html和两个测试用例的文件login.html和logout.html。

Selenium的Web功能测试_第5张图片

其他内容如脚本做二次开发,Selenium的举例说明,Selenium grid的举例说明等等见朱少民老师的《轻轻松松自动化测试》。


本文来自朱少民老师的《轻轻松松自动化测试》,如有侵权,请通知后删除。

你可能感兴趣的:(Selenium的Web功能测试)