[SeleniumConf Berlin] Watch the talks HERE x
[SeleniumConf Berlin] Watch the talks HERE x

Programming Language Preference

Selenium介绍

自动化或者不自动化?这是个问题!

自动化是否总是有利的?什么时候人们决定自动化测试用例呢?

自动化测试用例并 总是有利的。有些时候手动测试可能更为恰当。 例如,如果应用程序的用户界面在不久的将来会有相当大的改变,那么任何自动化将需要重写。 此外,有时根本没有足够的时间来构建测试自动化。短期而言,手动测试可能会更为有效。 如果应用程序有一个十分紧迫的截止日期,目前还没有测试自动化, 并且它的当务之急是在这个时限内完成的测试,那么手动测试是最好的解决办法。

然而,对于提高软件团队测试过程的长期效率,自动化有独特的优势。 测试自动化支持:

  • 频繁的回归测试
  • 在开发过程中给开发人员快速反馈
  • 几乎无限的测试用例执行迭代
  • 可定制的应用缺陷报告
  • 支持敏捷或极限开发方法
  • 纪律的测试用例文档
  • 寻找手工测试遗漏的缺陷

网络应用的测试自动化

多数可能是绝大多数现今的软件都是基于网络的并可用联络浏览器打开的应用程序。 这些应用的测试效果在不同的公司或组织之间有很大的不同。在一个不断改进软件过程的时代, 例如极限编程(XP)和敏捷,可以认为,有纪律的测试和质量保证实践在许多组织中还在不断发展。 软件测试往往以人工方式进行。有时,这是有效的;然而许多组织忽视了手工测试的替代方法, 或者没有技能实施。运用这些替代方法将大大提高软件开发的效率,因为他们增加了测试的效率。

测试自动化往往就是答案。测试自动化是指使用工具对目标应用程序在必要的时候时执行可重复的测试。

自动化测试有许多优点,大都和测试的重复性以及测试的执行速度有关。 有许多商业和开源的工具可以辅助测试自动化的开发。Selenium可能是最广泛使用的开源解决方案。 此用户的指南将协助新老Selenium用户学习有效技术,以构建网络应用的测试自动化。

本指南介绍Selenium,教授其使用最广泛的功能,并提供有用的意见, 这些意见来自于Selenium社区积累的最佳实践。指南提供大量实例。 此外,还提供Selenium内部结构的技术信息和Selenium的推荐用法, 这些都是由经验丰富的用户组成的联盟供稿的。 我们希望指南可以增加乐于使用Selenium做自动化测试的新用户。 我们希望指南可以传达这样的信息:质量保证和软件测试有许多超越目前实际的多种选择。 我们希望指南和Selenium本身所提供的宝贵帮助,可以提高读者在软件测试流程中的效率。

Selenium介绍

Selenium是个强大的工具集,支持快速开发网络应用的测试自动化。 Selenium提供了丰富的测试函数集,尤其适合网络应用测试的需要。 这些操作非常灵活,允许多种选择定位UI元素和比较测试的期望结果与应用程序的实际行为。

Selenium的主要功能之一就是支持在多种浏览器平台上执行测试。

Selenium组件

Selenium由三个主要的工具组成。每一个在帮助网络应用测试自动化开发上都有独特的作用。

Selenium-IDE

Selenium-IDE是构建Selenium测试用例的集成开发环境。 它是一个Firefox插件,为开发和运行单一测试用例或者完整测试套件提供了易用的界面。 Selenium-IDE具有录制功能,能记录用户执行的操作并保存成可复用的脚本用来回放。 它也有一个上下文菜单(右键单击)集成到Firefox浏览器,允许用户在断言和验证列表中选择。 Selenium-IDE还为了测试用例更加精确和便于控制提供了充分的编辑功能。

虽然Selenium-IDE是一个Firefox插件,但是通过使用Selenium-RC并在命令行中指定测试套件名, 由它创建的测试也可以运行在其他的浏览器上。

Selenium-RC (Remote Control)

Selenium-RC允许测试自动化开发人员使用编程语言以最大的灵活性和可扩展性开发测试逻辑。 例如,如果被测程序返回一个结果集,并且如果自动化测试程序需要在结果集的每个元素上运行测试, 编程语言的迭代支持可以用来遍历结果集,在结果集的每一项上调用Selenium命令运行测试。

Selenium-RC为以下每种支持的语言提供API(应用程序接口)和函数库: HTML,Java,C#,Perl,PHP,Python和Ruby。 使用Selenium-RC通过高级编程语言开发测试用例的能力还使得自动化测试与项目自动化构建环境相集成。

Selenium-Grid

Selenium-Grid允许把Selenium-RC的解决方案应用到大型测试套件或者需要多环境运行的测试套件。 通过Selenium-Grid,多个Selenium-RC实例可以运行在不同的操作系统和浏览器配置中, 在运行的时候每个实例都会注册到一个中心。 当测试到达这个中心,他们会重定向到可用的Selenium-RC,然后启动浏览器运行测试。 这就可以并行的运行测试,理论上整个测试套件的运行时间就是那个运行时间最长的单个测试的时间。

支持的浏览器

浏览器 Selenium-IDE Selenium-RC 操作系统
Firefox 3 1.0 Beta-1 & 1.0 Beta-2: 录制回放测试 启动浏览器,运行测试 Windows, Linux, Mac
Firefox 2 1.0 Beta-1: 录制回放测试 启动浏览器,运行测试 Windows, Linux, Mac
IE 8   开发中 Windows
IE 7 只能通过Selenium-RC执行测试* 启动浏览器,运行测试 Windows
Safari 3 只能通过Selenium-RC执行测试 启动浏览器,运行测试 Mac
Safari 2 只能通过Selenium-RC执行测试 启动浏览器,运行测试 Mac
Opera 9 只能通过Selenium-RC执行测试 启动浏览器,运行测试 Windows, Linux, Mac
Opera 8 只能通过Selenium-RC执行测试 启动浏览器,运行测试 Windows, Linux, Mac
Google Chrome 只能通过Selenium-RC执行测试(Windows) 启动浏览器,运行测试 Windows
其他 只能通过Selenium-RC执行测试 可能部分支持** 可适用的

* 通过Selenium-IDE在Firefox上开发的测试只需通过Selenium-RC命令行就可以在任何其他可支持的浏览器中执行。

** Selenium-RC服务器可以启动任何可执行文件,但浏览器的安全设置的不同,可能有技术上的限制,将限制某些功能。

灵活性和扩展性

你会发现Selenium有非常高的灵活性。为了满足特殊的测试需求, 有许多种方法可以为Selenium框架添加功能以定制测试自动化。 与私有的自动化工具和其他开源解决方案比较,这或许是Selenium最大的特点。 Selenium-RC支持多种编程和脚本语言,允许测试编写人员把任何逻辑构建到他们的自动化测试中, 也允许测试编写人员使用他们喜欢的编程和脚本语言。

Selenium-IDE允许添加用户定义的“用户插件”以创建额外的根据用户需求定制的命令。 此外,还可能重新配置Selenium-IDE生成Selenium-RC代码的方式。 这使得用户定制产生的代码符合他们自己的测试框架。 最后,Selenium是开放源代码项目,它的代码可以修改,功能提高可以作为贡献提交。

关于本书

该参考文档既针对Selenium的新用户,又针对一直在使用Selenium并寻求更多知识的用户。 它向新手介绍Selenium测试自动化。我们不假设读者有高深的测试经验。

有经验的Selenium用户也能从该参考中发现价值。它收集了一系列有用的Selenium技巧和最佳实践, 这些都来自众多经验丰富的Selenium质量保证专家的知识。

目前参考的其余章节:

Selenium基础
介绍Selenium,描述如何选择最适合你的测试任务的Selenium组件。 此外,提供Selenium命令和语法的大致描述。 本节将给你一个关于Selenium如何实现测试自动化的总体的感受, 并帮助你决定从哪里开始。
Selenium-IDE
教你如何使用Selenium集成开发环境构建测试用例。 本章还介绍有用的技巧,使得在解释Selenium测试所捕捉的缺陷的时候,脚本更具可读性的。 我们还说明如何把脚本“导出”成你选择的编程语言。 最后,本节会介绍一些配置,便于扩展和定制Selenium-IDE以支持测试用例开发。
Selenium命令
详细介绍Selenium最常用的命令。本章介绍了为测试网络应用所用的不同类型的动作、验证和断言。
Selenium-RC
说明了如何使用Selenium-RC API开发自动化测试程序。 许多例子将以编程语言和脚本语言的形式展现。 此外,还涵盖了Selenium-RC的安装和启动。 介绍了Selenium-RC支持的多种模式和配置,以及权衡和限制。 提供了架构图以协助说明这些问题。 本章还介绍了许多难题的解决方案,这些难题对初学者来说常常是很困难的。 这包括处理安全证书,HTTPS请求,弹出窗口和打开新窗口。
测试设计的注意事项
展示了许多有效利用Selenium的有用技巧。 这包括写脚本的技巧和用Selenium-RC编程的技巧。 涵盖了许多源码的例子,以展示如何报告被测应用的缺陷。 涵盖了用户论坛上常问的技巧,例如实现数据驱动测试 (每一轮测试都是用不同的数据)。
Selenium-Grid
这一章还没有写
用户插件
介绍方便扩展Selenium所需的所有信息

文档团队

最初的作者

  • Dave Hunt
  • Paul Grandjean
  • Santiago Suarez Ordonez
  • Tarun Kumar

开始写作这篇文档的最初作者是按照字母表顺序列出的。 每个人的最主要贡献是在特定的领域承担领导的角色。 最初,每一章都有一个主要的作者,他们开始了最初的写作, 但是最后,每个人对整个项目的每一章都作出了重要的贡献。

当前的作者

  • Mary Ann May-Pumphrey
  • Peter Newhook

除了最初的团队成员仍在参与(09年5月)外,Mary Ann和Peter最近也做出了主要的贡献。 他们贡献的复查和编辑是无价的。Mary Ann积极地撰写了新的小节,并且协助编辑整篇文档。 Peter协助重新组织最难得章节,并且对包含的题目提供有价值的建议。 他们的热情和贡献是非常有帮助的。我们希望他们能继续参与。

致谢

感谢Patrick Lightbody给与的极大的特殊帮助。 作为SeleniumHQ网站的管理员,他的支持是无价的。 他帮助我们了解Selenium社区——我们的读者。 为了开发和发布这个用户指南, 他还安排我们在SeleniumHQ网站上所需的一切。 他的热情和鼓励促使这个项目得以推进。 同样感谢Andras Hatvani在发布解决方案上给与的建议, 感谢Amit Kumar参与我们的讨论并且协助复查文档。

当然,我们必须 感谢Selenium的开发者。他们的确设计出了令人惊奇的工具。 没有最初设计者的远见和当前开发者的不懈努力,我们将无法拥有如此伟大的工具呈现给你——读者。