强大的Web开源测试工具—Selenium

发表于:2007-4-12 15:39

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:朱少民    来源:CSDN

介绍

SeleniumThoughtWorks专门为Web应用而开发的自动化测试工具,适合进行功能测试、验收测试,其最大的优势有几点:

<!--[if !supportLists]-->1)      <!--[endif]-->可直接运行在浏览器之上,所见即所得,就像真实用户所做的一样。Selenium的核心,也称browser bot,是用JavaScript编写的。这使得测试脚本可以在受支持的浏览器中运行。browser bot负责执行从测试脚本接收到的命令

<!--[if !supportLists]-->2)      <!--[endif]-->支持多操作系统Windows, Mac OSLinux)和各种浏览器Internet ExplorerMozillaFirefox,更容易发现浏览器的不兼容性

<!--[if !supportLists]-->3)      <!--[endif]-->支持两种开发脚本的模式test runnerHTML文件)和driven(脚本语言编写),其语言包括Java, .NET, Perl, PythonRuby.使用driven脚本,测试有一部分在浏览器之外运行,而如果使用test runner脚本的话,测试是完全在浏览器中运行的。

但是Selenium是轻量的测试框架,脚本所处理的测试用例构成简单,其实质就是通过HTTP协议,发送请求(request)来完成测试用例,所以很困难处理业务逻辑关系强的测试用例。

更多的讨论:http://forums.openqa.org/index.jspa

Selenium命令

Selenium命令分成两类——操作(action断言(assertion

  • 操作模拟用户与Web应用程序的交互。例如,单击一个按钮和填写一个表单,这些都是常见的用户操作,可以用Selenium命令来自动化这些操作。
  • 断言验证一个命令的预期结果。常见的断言包括验证页面内容或当前位置是否正确。

Selenium网站上可以找到可用命令的完整列表。通过Selenium命令,脚本编写者可以描述browser bot在浏览器中所执行的操作

组成

  • Selenium IDE:一个firefoxplug-in,可以录制和回放并保存一些test cases,可以生成一些简单的基于rc模式的简单code.(相当于Jmetergui模式和jmeter脚本的生成-badboy
  • Selenium Core.整个测试机制的核心部分,即有assertion(断言)机制的test suite runner。它由一些纯js代码组成,可以运行在windows/linux的不同browser(相当于JmeterrunnerAssertion
  • Selenium Remote Control:一个代理与控制端,可代替Selenium core/ Selenium IDEclient(相当于通过编程来实现一切),是支持多语言的. (相当于Jmeterclient/server模式,Selenium Remote Control更强一些)       

支持的平台

  • Windows:
    • Internet Explorer 6.0
    • Firefox 0.8 to 1.5, MozillaSuite1.6+, 1.7+
    • Seamonkey 1.0, Opera 8
  • Mac OS X:
    • Safari 1.3+
    • Firefox 0.8 to 1.5, MozillaSuite1.6+, 1.7+
    • Seamonkey 1.0, Camino 1.0a1 
  • Linux:
    • Firefox 0.8 to 1.5, MozillaSuite1.6+, 1.7+
    • Konqueror

部署Selenium

下载地方:http://www.openqa.org/selenium/

selenium目录下的内容:

<!--[if !supportLists]-->l         <!--[endif]-->devtests:试验性功能 dom-images:查看DOM用图片

<!--[if !supportLists]-->l         <!--[endif]-->dom-styles:查看DOM用样式表

<!--[if !supportLists]-->l         <!--[endif]-->html-xpath: Xpath

<!--[if !supportLists]-->l         <!--[endif]-->jsmock: javascript mock library

<!--[if !supportLists]-->l         <!--[endif]-->jsunit: javascript unit test library

<!--[if !supportLists]-->l         <!--[endif]-->tests: samples(以这个为基础开发测试用例)

<!--[if !supportLists]-->l         <!--[endif]-->核心js文件和html文件 

<!--[if !supportLists]-->l         <!--[endif]-->如果想要测试自己开发的发布在服务器端的页面,需要把selenium配置在同一个服务器下:Apache直接将selenium目录拷贝至htdocsApache的确省根目录)目录下,然后启动Apache,用地址http://server8080/selenium/TestRunner.html访问例子。

<!--[if !supportLists]-->l         <!--[endif]-->Tomcat 直接将selenium目录拷贝至webapps目录下,启动Tomcat,用地址http://server8080/selenium/TestRunner.html访问例子。

<!--[if !supportLists]-->l         <!--[endif]-->IIS建立一个虚拟目录selenium将该虚拟目录直接指向实际的selenium目录用地址http://server/selenium/TestRunner.html访问例子

Test runner脚本开发模式

Selenium test runner脚本,就是测试用例(test case,是用HTML语言通过一个简单的表布局编写的,即使对于非技术人员来说,test runner脚本也易于阅读和编写。如清单1所示。

清单1. Selenium测试用例的结构(HTML格式)

Command1/Assertion1

Target1

Value1

Command2 Assertion1

Target2

Value2

test runner脚本使用与xUnit框架相同的测试套件(test suite)和测试用例概念。测试用例和命令按照它们在测试套件和测试用例中出现的顺序依次执行。在清单1中:

  • 第一列包含命令断言
  • 第二列包含命令或断言的目标(target。可以用多种受支持的组件定位符中的一种来指定目标。通常使用的是组件的ID或名称,但XPathDOM定位符也是受支持的。
  • 第三列包含用于为命令或断言指定参数的。例如,当使用type命令时,这一列可能就是一个文本域所期望的值。

Test runner脚本通常与所测试的应用程序(AUT)部署在同一个服务器上。这是因为browser bot使用JavaScript来模拟用户操作。这些脚本在一个受限制的沙箱环境中运行。如果需要绕过这些限制,可以使用一个代理。

driven脚本开发模式

driven Selenium脚本是用多种受支持的编程语言(Java, .NET, Perl, PythonRuby)中的一种编写的。这些脚本在浏览器之外的一个单独的进程中运行。驱动程序的任务是执行测试脚本,并通过与运行在浏览器中的browser bot进行通信来驱动浏览器。驱动程序与browser bot之间的通信使用一种简单的特定于Selenium的连接语言Selenese

driven脚本比test runner脚本更强大、更灵活,可以将它们与xUnit框架集成。driven脚本编写和部署更复杂些,它必须执行以下任务:

  • 启动服务器。
  • 部署所测试的应用程序(AUT)。
  • 部署测试脚本。
  • 启动浏览器。
  • 发送命令到browser bot
  • 验证browser bot执行的命令的结果。

driven脚本更依赖于应用程序运行时环境。例如,Java驱动程序使用一个嵌入式JettyTomcat实例来部署所测试的应用程序,如将Selenium集成到Ruby on Rails中。

开发测试用例

测试用例开发涉及四类文件

<!--[if !supportLists]-->1.     <!--[endif]-->主文件:TestRunner.html/TestRunner.hta(.hta文件是html applicationwindows平台特有)

<!--[if !supportLists]-->2.     <!--[endif]-->Test suiteTest case文件:需要编写的由一个表格组成的html文件;

<!--[if !supportLists]-->3.     <!--[endif]-->引擎库js文件:位于selenium根目录下的核心文件,其中html-xpath目录下的那个文件,也是必须的库文件;

<!--[if !supportLists]-->4.     <!--[endif]-->user-extensions.js:用来扩展selenium的文件;用户自己编写的函数和扩展的命令都应该放在这个文件中;

这四类文件中,除了引擎库以外,其他三类文件都是可以根据具体情况去修改的。selenium部署完毕后,可以打开浏览器来通过url来访问TestRunner.html文件。初始的时候,TestRunner.html文件中的TestSuite是链接到tests目录下的TestSuite.html文件,TestCaseframe(上部中间)中打开了TestSuite.html文件中的第一个Test Case “TestOpen.html”

可以直接修改TestSuite.html文件,让其指向自己开发的Test case html文件。我们也可以建立另外一个目录,然后将自己的TestSuite文件和Test case文件都保存在这个目录中。如果使用后一种方式,那么在打开TestRunner.html的时候需要传递一个参数,例子如下:
http://localhost/selenium/TestRunner.html?test=/testDir/myTestSuite.html

下面就是开发测试用例——即编辑测试用例的表格。无论Test Suite还是Test Case,表格的第一行都是描述性文字,selenium的引擎是不会处理这一行的内容的。实际内容都是从第二行开始的。Test case的表格列数一定不能少于3列,否则Selenium会出错。而基本的三列组成是: 
|command| Target| value|
 

 清单2就是四个测试用例的例子,将执行以下操作:

  1. 通过进入/change_address_form.html打开变更地址页面。
  2. IDaddress_field的文本框中输入Betelgeuse state prison
  3. 单击名为Submit的输入区。注意,这里使用XPath找到Submit按钮,这导致表单数据被发送到服务器。
  4. 验证页面是否包含文本Address change successful

清单2.在测试用例中使用命令和断言的例子

command

Target

Value

open

/change_address_form.html

 

type

address_field

Betelgeuse state prison

clickAndWait

//input[@name='Submit']

 

verifyTextPresent

Address change successful<

 

 

测试套件

要达到对应用程序的完全测试覆盖,通常需要不止一个测试用例。这就是Selenium使用测试套件的原因。测试套件用于将具有类似功能的一些测试用例编成一组,以便让它们按顺序运行。

测试套件和测试用例一样,都是用简单的HTML表编写的。Selenium执行的缺省测试套件的名称是TestSuite.html。测试套件使用一个只包含一列的表,表中的每一行指向一个包含某个测试用例的文件。

对于一个有着多个功能模块、组件的web应用,编写的测试脚本html必然比较多。因此,应该建立一个合理的目录结构来组织这些脚本,一般按web服务、模块、功能来组织,形成层次性结构。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=854963

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号