频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

18.3 Selenium(2)

作者: 《开源技术选型手册》编委会 出处:电子工业出版社博文视点  2008-06-26 09:27    砖    好    评论   进入论坛
阅读提示:《开源技术选型手册》第18章主要讲述的是软件测试篇,本节为大家介绍Selenium。

18.3 Selenium(2)

Test Runner模式

下面,我们通过一个简单的用户登录场景来为读者示范在Test Runner 模式下Selenium 的使用方法。假设我们有一个已经开发好了的Web 应用系统,通过访问URL 地址“/Login”可以进入系统的登录界面,使用者输入用户名和密码后点击提交,如果用户名和密码正确,则系统导向欢迎界面。现在我们利用Selenium 来编写这一测试用例,以验收系统的登录功能。当然,测试人员并非一定要在系统完成之后,才可以编写验收测试用例,假如你愿意的话,同样可以用Selenium 来尝试测试驱动开发?。

首先,我们用HTML 编辑工具创建一个名为test-login.html 的HTML 页面。并输入以下内容:

<table cellpadding="1" cellspacing="1" border="1">
<tr>
<td>open</td>
<td>/Login </td>
<td>&nbsp;</td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>Please login</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>type</td>
<td>username</td>
<td>tom</td>
</tr>
<tr>
<td>type</td>
<td>password</td>
<td>123</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//input[@name='Submit']</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>Welcome Tom</td>
<td>&nbsp;</td>
</tr>
</table>

这是典型的HTML 表格布局,表格分为三列。

第一列包含的是Selenium 提供的命令(Command)。命令用于告诉Selenium 要执行的操作,它可以是一个动作(Action),或者是一个断言(Assertions)。比如上例中的open 代表打开一个网页,type 代表用户的键盘输入,clickAndWait 告诉Selenium 执行鼠标点击并等待下一个新页面的加载,而verifyTextPresent 则用于验证当前页面是否存在指定文本。

第二列包含的是命令或断言作用的目标对象。例如一个URL 地址,或是表单中的一个输入域,又或是页面的某个元素。Selenium 为我们提供了多种定位手段,我们可以使用ID 或名称来定位目标对象,也可以使用XPath 或DOM 来进行定位。

第三列包含的是命令执行所需的某些参数值。例如,我们使用type 命令时,这一列所给出的便是要输入的文本内容。

一个典型的Selenium 测试用例就是由一组命令序列以HTML 表格布局的形式自上而下逐行构成的,而Selenium 在执行的时候也是依序执行的。对于这样一份HTML 形式的测试用例,相信不具备编程能力的测试人员也应该可以很好地阅读和理解。并且,其可读性使得这份测试用例看起来更像是测试文档,我们还可以利用HTML 编辑器对测试用例进行充实,为其加入一些更具说明性质的文字。事实上,这样便形成了一份“可运行的测试文档”。

测试套件

一组完整的验收测试,往往会包含许多测试用例。为此,Selenium 提供了测试套件的功能,测试套件用于将一组具有相关性的测试用例组织在一起。和测试用例的编写方式类似,测试套件也是用HTML 表格布局来表达的。下面是一个测试套件的例子,表格的每一行分别对应于一个特定的测试用例页面:

 <table>
<tr>
<td><a href="test-login.html">Login to application</
a></td>
</tr>
<tr>
<td><a href="test-welcome-page.html">Access main
page</a></td>
</tr>
<tr>
<td><a href="test-logout.html">Change address</a></td>
</tr>
</table>


运行测试

编写完测试脚本之后,我们就可以运行测试了。不过,此前我们还需要下载Selenium,确切地说应该是Selenium Core(参见后文)。Selenium Core 是一个纯DHTML/JavaScript 引擎,安装非常简单,将Selenium Core 的下载包解压到本地即可直接使用。不过为了执行验收测试,我们必须要将编写好的测试套件对应的HTML 页面连同Selenium Core 本身、与被测试的Web 系统部署在同一服务器上。这么做的主要原因是与JavaScript 的安全限制有关,作为JavaScript 引擎的Selenium Core 必须遵循“同源策略”(same origin policy)。

当部署好系统以后,我们便可以通过访问Selenium Core 目录下的/core/TestRunner.html 来启动Selenium 系统。Selenium Test Runner 的界面如图18-12 所示:

 
图18-12 Selenium Test Runner的界面

屏幕被划分为4 个区域:

Test Suite 区域,此处用于加载事先编写好的测试套件,当输入了正确的测试套件页面地址后,点击“Go”按钮,即可以加载该测试套件;

Current Test 区域,此处用于显示某个测试用例的详细内容,例如前面test-login.html 页面的内容;

Control Panel 区域,用于对测试过程进行各种控制,例如:我们可以点击按钮,以运行整个测试套件,也可以点击按钮运行单个测试用例,还可以拖动按钮下方的滑块来控制测试进展的速度。测试的结果可以在滑块下方的区域看到;

剩余区域,即是被测系统的运行界面。亦即默认情况下,当Selenium 开始执行测试脚本时,被测Web 系统的界面将会在本区域内显示。当然,我们还可以让被测系统在一个新的窗口中独立展示,要做到这一点,只需要在前述Test Suite 区域中钩选“AUT in separate window”即可。

Driven模式

除了Test Runner 模式,Selenium 还支持一种叫做Driven 的使用模式,这种使用模式更强大,也更灵活,它可以和诸如JUnit 这样的测试框架结合使用,很适合开发人员使用。Driven 模式需要编写额外的程序代码作为测试脚本,这些测试脚本将通过Selenium Remote Control(参见后文)提供的Selenium Server,与浏览器中的Selenium Core 进行通信,从而以“远程”方式来控制SeleniumCore 执行测试脚本。利用Selenium Remote Control 工具,我们可以解决Test Runner 模式下“同源策略”的限制问题,可以对任意Web 站点进行测试,而无需将测试脚本与Web 应用部署于同一服务器上。

由于篇幅所限,有关Driven 模式下Selenium 的详细使用方法,请读者查阅Selenium RemoteControl 的文档。此处,我们利用Java 语言及JUnit,给出一个测试用例的编写示例,该测试用例的场景与前述Test Runner 模式下的完全一致,我们可以在Eclipse 中轻松地执行该测试用例,还可以与Ant 脚本、持续集成工具结合使用,从而实现测试脚本的自动运行,如下所示。

import com.thoughtworks.selenium.*;
import junit.framework.*;
public class LoginTest extends TestCase {
private Selenium selenium;
public void setUp() {
selenium = new DefaultSelenium("localhost",
4444, "*firefox", "http://loclhost");
selenium.start();
user = selenium;
currentPage = selenium;
}
public void testLoginSuccess () {
user.open("http://localhost/Login");
assertTrue(currentPage.isTextPresent("Please
login"));
user.type("username", "tom");
user.type("password", "123");
user.click("//input[@name='Submit']");
user.waitForPageToLoad("5000");
assertTrue(currentPage.isTextPresent("Welcome
Tom"));
}
public void tearDown() {
selenium.stop();
}
}
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
专题
汶川大地震 IT技术人在行动
解析35岁技术人的价值与出路
LAMP技术精解
调查:十大发现 解秘技术人
北漂技术人90天求职纪实
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
世纪枭雄比尔盖茨的王者传奇
世纪枭雄比尔盖茨的王者传奇
ARP攻击防范与解决方案
ARP攻击防范与解决方案
ASP.NET开发教程
ASP.NET开发教程
· ASP.NET开发教程
· 超级计算机TOP500专题
· Vista SP1对决XP SP3
· SQL Server 2008/2005..
· 浏览器的战国时代
· Windows Server 2008专..
· 程序员如何成长?
· C#技术开发指南
· 虚拟化技术还有点“虚”
· 专题:ASP.NET 2.0基础..
· LAMP技术精解
· 服务器节能与绿色IT
· Linux 集群技术专题
· Windows集群服务应用
· CISSP认证成长之路
· SQL Server入门到精通
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SOA 面向服务架构
SOA 面向服务架构
· SOA 面向服务架构
· SQL Server 2008/2005..
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· C#技术开发指南
· Apache技术专题
· Windows集群服务应用
· C#技术开发指南
· 国际文档格式标准开战
· 路由器设置与口令恢复
· Linux 集群技术专题
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
· 了解统一威胁管理(UTM)..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SQL Server入门到精通
SQL Server入门到精通
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· C#技术开发指南
· 三层交换技术专题
· Apache技术专题
· C#技术开发指南
· 企业数据恢复指南
· Windows集群服务应用
· 路由器设置与口令恢复
· Linux 集群技术专题
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用
· 访问控制列表(ACL)介绍