您的位置:软件测试 > 开源软件测试 > 开源功能测试工具 > Selenium
selenium开源功能测试工具
作者:网络转载 发布时间:[ 2012/12/12 14:33:07 ] 推荐标签:

1.概述

Selenium是非常非常有用的,对JavaScript支持良好的Web层功能测试,集成测试工具。

Selenium分为Core与RC(Remote Controll)两个部分,其中Core是基础的,直接在HTML Table里编写测试代码的模块,而Remote Controll则支持用Java等语言编写测试用例,并自动调用FireFox1.5来运行。

具体的语法见http://www.openqa.org/selenium-core/usage.html
2.Better Practice
1. Never use Selenium FIT mode

Selenium分为两种运行模式,Driven Mode(现在叫Selenium Remote Control)和FIT Mode(现在叫Selenium Core)。

FIT Mode顾名思义,是类似FIT Testing Framework那种使用方式,主要用于QA等非技术人员编写Web应用的功能测试。FIT Mode的Selenium测试使用HTML来组织测试用例。例如我要测试一个web应用的登陆功能。我可能写出这样的HTML 表格。
 1  < table >
 2  < tr >
 3    < td > open </ td >
 4           < td > http://localhost:8080/login </ td >
 5           < td ></ td >
 6  </ tr >
 7  < tr >
 8    < td > type </ td >
 9           < td > id=username </ td >
10           < td > someuser </ td >
11  </ tr >
12  < tr >
13    < td > type </ td >
14           < td > id=password </ td >
15           < td > password </ td >
16  </ tr >
17  < tr >
18    < td > click </ td >
19           < td > id=login_button </ td >
20           < td ></ td >
21  </ tr >
22  < tr >
23    < td > assertTextPresent </ td >
24           < td > Welcome to xxxx </ td >
25           < td ></ td >
26  </ tr >
27  </ table >

不同于FIT,Selenium内置了一系列的命令,如上例中的open, type, click以及assertTextPresent,因此QA可以完全抛开DEV独立地编写测试(FIT需要DEV提供Behavior Fixture)。因此FIT Mode是相当容易使用的,哪怕不会使用HTML的QA,也可以使用FrontPage画出三列表格,依次填入数据。

然而对于大多数team而言——尤其是敏捷team,FIT Mode平易的外表下是令人恐惧的泥沼。大多数团队往往选择使用Selenium作为功能测试和集成测试工具而不仅仅是QA测试工具,在不同的迭代间遇到功能流程或UI变化时,必须要重构Selenium测试,或者说,Functional Test Migration。令人遗憾的是,HTML based的Selenium FIT Testing的重构竟然令人难以置信的困难。我们可以使用include等Selenium FIT扩展,使得它可以重用详细的功能(Log in, Log out诸如此类)。即便如此,在一个真实的项目中,Selenium Test的数量往往在200-500之间(我目前所处的项目在改用Driven Mode前已达350+),对于这么大基数的Selenium测试,手工重构几乎是不可想象的,而目前尚没有HTML代码重构工具。即便存在泛泛意义上的HTML重构工具,对于Selenium测试重构的有效性尚待商榷。而使用Driven Mode上述代码可以写为:

1   public   void  testShouldShowAWeclomeMessageAfterUserLoggedIn()   {
2      selenium.open( " http://localhost:8080/login " );
3      selenium.type( " id=username " , " someuser " );
4      selenium.type( " id=password " ,  " password " );
5      selenium.click( " id=login_button " );
6      assertTrue(selenium.isTextPresent( " Welcome to xxxx " ));
7 }


很自然,一个训练有素的程序员会重构出如下代码:

 1   public   void  login(String username, String password)   {
 2      selenium.open( " http://localhost:8080/login " );
 3      selenium.type( " id=username " ,username);
 4      selenium.type( " id=password " , password);
 5      selenium.click( " id=login_button " );
 6 }
 7  
 8    public   void  testShouldShowAWeclomeMessageAfterUserLoggedIn()   {
 9      login( " someuser " ,  " password " );
10      assertTrue(selenium.isTextPresent( " Welcome to xxxx " ));
11 }

之后无论是pull up到公共基类还是extact到Utils class都是很容易的事情。由于Java在代码重构上便利,Java Selenium Remote Control成为使用Selenium的佳方式。在这一点上,纵使Ruby语法上比Java简单灵活得多,它仍不是编写Selenium测试的佳载体(当然一个经过精心设计的ruby selenium dsl wrapper还是具有非凡的价值的,这个我们后面会涉及到)。
2. Using the name user, system, page instead of selenium

上一页12下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd