基于Web应用的自动化测试
如今许多,可能所有的应用软件都是基于web的应用。这些应用的测试有效性在公司与组织间相差甚大。在这个高度互动和响应的时代,许多组织都使用某种形式的敏捷软件开发流程。频繁的测试成为软件项目的一个需求,必然要求进行自动化测试。自动化测试意味着使用一个软件工具重复的针对某个应用进行测试。
自动化测试有许多好处。许多都跟测试的重复性与测试执行的速度相关。有一些商业和开源的工具可以帮助自动化测试的开发。Selenium可能是应用的最广的开源解决方案。这个用户指南帮助新的和有经验的Selenium用户学习创建web应用的自动化测试的有效技术。
本指南介绍Selenium的特性和Selenium社区累积的经验。提供很多例子以及Selenium的内部结构的技术细节和推荐的使用方法。
自动化测试对于提高软件团队的测试流程有特殊的好处。测试自动化支持:
Ø 频繁的回归测试
Ø 快速的反馈
Ø Test Case几乎无限次的执行
Ø 支持Agile和Extreme开发模式
Ø Test Case的有纪律的文档
Ø 定制的缺陷报告
Ø 寻找被手工测试忽略的缺陷
要不要自动化
自动化永远都有优势么?什么时候应该选择自动化?
不,有时候手工测试更适合。例如,如果应用的用户界面在不远的将来会改变,那么自动化需要重写。或者,没有足够的时间来创建自动化测试。短期来说,手工测试更有效率。如果一个应用有很紧的期限,暂时没有自动化测试,而且测试必须在一个时间段里完成,那么手工测试是最好的选择。
介绍Selenium
Selenium是一套不同的软件工具,使用不同的方法来支持自动化测试。许多 Selenium QA Engineers专注于一个或两个满足他们项目需求的工具,然而学习所有的工具将给他们解决不同的测试问题提供许多不同的选项。整套工具提供了非常丰富的功能,可以满足各种种类的Web应用的测试需求。这些操作非常灵活,允许有多种定位UI元素和比较期望结果的方法。Selenium的一个关键特性是一个测试案例可以在多个操作系统平台上运行。
Selenium项目的简单历史
Selenium在2004年由Jason Huggins在测试ThoughtWorks的一个内部应用时诞生。作为一个聪明人,他意识到对于每一个代码更改手工执行相同的测试很浪费时间。他开发了一套Javascript库来驱动页面之间的互动,使他能够在不同的浏览器里自动的运行测试。这个Library慢慢地成为Selenium的核心,Selenium Remote Control(RC)和Selenium IDE的基础。Selenium RC是突破性的,因为没有其他产品允许你用一个你选择的语言来控制浏览器。
虽然Selenium是一个巨大的工具,它并非没有缺点。因为它基于Javascript的自动化引擎,浏览器对于Javascript的安全限制使有些事情没法做。更糟糕的是web应用变得越来越强大,新浏览器提供的各种特别的特性,使得这个限制越来越痛苦。
在2006年Google一个叫Simon Stewart的工程师开始了一个叫做WebDriver的项目。谷歌一直是一个Selenium的用户,但测试人员不得不解决产品的限制。Simon想要一个可以使用浏览器的native方法和浏览器与操作系统直接对话的测试工具。这样可以避免javascript的沙箱环境的限制。这个WebDriver项目的开始,目的是解决Selenium的痛处。
到了2008年,北京奥运会标志着中国作为一个世界大国的到来,大量在美国抵押贷款违约触发从大萧条以来的最严重的衰退。但这一年最重要的事情是Selenium和WebDriver的合并。Selenium有大量的社区和商业支持,但WebDriver显然是工具的未来。这两个工具的结合,为所有的用户提供一套共同的特性集,为自动化测试在同一屋檐下带来了一些最聪明的头脑。西蒙•斯图尔特—WebDriver的创建者,在2009年8月6日发给WebDriver和Selenium社区的联合邮件也许最好地解释了为什么WebDriver和Selenium合并。
“为什么两个项目合并?部分原因是因为WebDriver解决了Selenium的某些缺点(比如可以绕过JS sandbox以及我们有一些很好的API),部分原因是Selenium解决了某些WebDriver的缺点(比如支持更多的浏览器)部分原因是主要的Selenium贡献者和我觉得这是能够给用户提供最好的框架的方法。
Selenium的工具集
Selenium由几个软件工具组成,每个都有特殊的角色。
Selenium 2 ( Selenium Webdriver)
Selenium2是这个项目未来的方向以及Selenium工具包的最新成员。这个崭新的自动化工具提供了各种各样很酷的特性,包括一个更具凝聚力和面向对象的API以及一个对旧有实现的限制性的回答。
Selenium和WebDriver的开发者都同意两个工具都有优势,合并两个项目可以制造一个更健壮的测试工具。
Selenium 2.0就是这种努力的产品。它支持WebDriver API和底层技术以及在WebDriver API下的Selenium1的技术,使您的测试移植中可以实现最大的灵活性。另外,Selenium2仍然可以运行于Selenium1的Selenium RC接口以支持向后兼容。
Selenium 1 (Selenium RC or Remote Control)
Selenium RC曾经在很长时间里是主要的Selenium项目,在WebDriver/Selenium合并之前曾是最新和最强大的工具。
Selenium 1仍然积极支持(主要是在维护模式),并提供了可能在Selenium2中暂时不能支持的一些特性,包括多种语言(Java,Javascript,PHP,Python,Ruby,Perl和C#)以及几乎所有浏览器的支持。
Selenium IDE
Selenium IDE(集成开发环境)是一个原型工具,用于构建测试脚本。这是一个Firefox的插件,提供了易于使用的接口来支持自动化测试的开发。Selenium IDE具有录制功能,可以录制用户执行的动作,把他们用多种编程语言中的一种导出成可以重用的脚本,可以用于以后执行。
注意:
虽然Selenium IDE有一个保存的特性来允许用户用一个表格的形式来保存测试以支持以后的导入和执行,但是它并不是被设计来运行你的测试通过或者构建所有你需要的自动化测试。具体来说,Selenium IDE并不提供迭代或条件语句为测试脚本。目前也没有计划添加这些。原因部分由于技术,部分基于Selenium开发者鼓励在测试自动化中的最佳实践是需要一定的编程。Selenium IDE只是用于快速的原型工具的目的。Selenium开发者推荐用支持许多编程语言的Selenium1或Selenium2来开发严肃的,健壮的测试自动化。
Selenium-Grid
Selenium-Grid允许为大型test suite或者必须在多个环境中运行的test suite扩展Selenium RC的解决方案。Selenium Grid允许您并行运行您的测试,就是不同的测试可以同时在不同的远程机器中运行。这有两个好处:第一,如果您有大型test suite,或者运行的很慢的test suite,你可以通过使用Selenium Grid来划分您的Test suite,使不同的测试在同一时间运行在不同的机器上,从而大大的提高性能。并且,如果你必须在多个环境中运行test suite,你可以在同一时间用不同的远程机器来支持和运行您的测试。Selenium Grid通过并行处理,极大的缩短了执行test suite的时间。
选择您的测试工具
许多人从使用Selenium IDE开始。如果你还对于编程或者脚本语言不是很有经验,你可以使用Selenium IDE来熟悉Selenium命令。使用IDE您可以很快的创建简单的测试,有时候只需要几秒钟。
然而,我们不推荐您使用IDE做您所有的自动化测试。为了更有效地使用Selenium,您需要结合我们所支持的编程语言中的一种来使用Selenium2或者Selenium1编译和运行您的测试。
对于第一次使用Selenium的人,我们推荐使用Selenium2因为这是我们在将来会继续支持的部分。
浏览器和平台的支持
Selenium-WebDriver
· Google Chrome 12.0.712.0+
· Internet Explorer 6, 7, 8, 9 - 32 and 64-bit where applicable
· Firefox 3.0, 3.5, 3.6, 4.0, 5.0, 6, 7
· Opera 11.5+
· HtmlUnit 2.9
· Android – 2.3+ for phones and tablets (devices & emulators)
· iOS 3+ for phones (devices & emulators) and 3.2+ for tablets (devices & emulators)
Selenium 1.0 and Selenium-RC
This is the old, support platfom for Selenium 1.0. It should still apply to the Selenium 2.0 release of Selenium-RC.
Browser | Selenium IDE | Selenium 1 (RC) | Operating Systems |
Firefox 3.x | Record and playback tests | Start browser, run tests | Windows, Linux, Mac |
Firefox 3 | Record and playback tests | Start browser, run tests | Windows, Linux, Mac |
Firefox 2 | Record and playback tests | Start browser, run tests | Windows, Linux, Mac |
IE 8 | Test execution only via Selenium RC* | Start browser, run tests | Windows |
IE 7 | Test execution only via Selenium RC* | Start browser, run tests | Windows |
IE 6 | Test execution only via Selenium RC* | Start browser, run tests | Windows |
Safari 4 | Test execution only via Selenium RC | Start browser, run tests | Windows, Mac |
Safari 3 | Test execution only via Selenium RC | Start browser, run tests | Windows, Mac |
Safari 2 | Test execution only via Selenium RC | Start browser, run tests | Windows, Mac |
Opera 10 | Test execution only via Selenium RC | Start browser, run tests | Windows, Linux, Mac |
Opera 9 | Test execution only via Selenium RC | Start browser, run tests | Windows, Linux, Mac |
Opera 8 | Test execution only via Selenium RC | Start browser, run tests | Windows, Linux, Mac |
Google Chrome | Test execution only via Selenium RC | Start browser, run tests | Windows, Linux, Mac |
Others | Test execution only via Selenium RC | Partial support possible** | As applicable |
* Tests developed on Firefox via Selenium IDE can be executed on any other supported browser via a simple Selenium RC command line.
** Selenium RC server can start any executable, but depending on browser security settings there may be technical limitations that would limit certain features.
灵活性和可扩展性
您会发现Selenium是非常灵活的。您有许多方法可以为您的Selenium的测试脚本或者Selenium框架添加功能来定制您的自动化测试。这也许是Selenium相较于其他自动化工具的最大优势。这些定制在文档的不同地方描述。另外,Selenium是开源的,源代码总是可以下载并修改。