第一章 初识 Selenium

Selenium 是用于 Web 应用程序的自动化测试工具。基于 Selenium 的测试用例直接运行在浏览器中,就像真正的用户操作一样。其支持多平台多浏览器。

Selenium 的主要功能包括:

  1. 功能性测试:创建回归测试验证软件功能和用户需求。
  2. 兼容性测试:测试应用程序在不同的操作系统和不同的浏览器中是否允许正常。

自动化测试 是把以人为驱动的测试行为转化为机器执行的一种过程。通过自动化测试可以极大的提升回归测试、稳定性测试和兼

容性测试的工作效率,在保障产品质量和持续构建等方面起到举足轻重的作用。

自动化测试相较于手工测试的优势在于:

  1. 自动化测试可以完成某些手工测试难以完成的工作,如并发测试、压力测试等。
  2. 自动化测试可以提高手工测试的工作效率,如执行具有多个重复步骤的测试用例。
  3. 自动化测试在敏捷开发过程中,可以快速验证代码修改的正确性。
  4. 自动化测试和手工测试相辅相成,互相促进。

实施自动化测试需满足以下几个条件:

  1. 需求变动不频繁。
  2. 项目周期足够长。
  3. 自动化测试脚本可重复使用。
  4. 手工测试无法完成的测试工作。某些测试采用手工的方式无法完成,或者需要投入大量时间与人力,此时就可以考虑引入自动化测试,如性能测试、配置测试、兼容性测试、大数据量输入测试等。

Web 自动化测试 是指Web 应用系统从用户界面层面进行的自动化测试,通过用户界面测试内部的业务逻辑。

Web 自动化测试的自身特点如下:

  1. Web 页面上出现的元素可能具有不确定性。
  2. 不用操作系统上不同Web 浏览器之间的兼容性。
  3. Web 应用的高并发性和容错性。
  4. 移动设备上的Web 客户端兼容性、旋转新和各种触摸特性。

Selenium 的前世今生

  • 2004年,ThoughtWorks公司的Jason Huggins 和他所在的团队自主研发了一个基于浏览器并且采用 JavaScript 编程语言的测试工具,命名为 Selenium Core.不过由于Selenium Core 的设计没有绕过浏览器的 “同源” 规则,故待测试产品、Selenium Core 和测试脚本三者需要署到同一台服务器上才可以完成自动化测试工作。
  • 此后,Jason Huggins所在的研发团队编写了HTTP代理,以让Selenium截获所有的HTTP请求。使用HTTP代理不仅绕过了浏览器的“同源”规则,使得待测试的产品、Selenium Core 和测试脚本三者可以分散在不同的机器上;同时也使得Selenium 测试脚本采用多种语言编写成为可能,测试脚本只需要关心将标准的HTTP请求发送到指定的 URL 即可,而Selenium 本身并不需要关心这些 HTTP 请求是由什么程序语言编写而成。正是由于这种离散的分布方式使得测试脚本可以远程控制浏览器并执行测试用例,Selenium Remote Control 也因此得名,也可简称为 Selenium RC.其由两部分组成:一个是 Selenium RC Server;另一个是提供各种编程语言绑定的客户端驱动。
  • 2007年,ThoughtWorks公司发布了WebDriver 雏形
  • Selenium RC 与 WebDriver 合并为 Selenium WebDriver

Selenium 1 即Selenium RC

其典型使用方式如下:

  1. 测试人员基于客户端驱动所提供的API来编写测试用例脚本。
  2. 测试程序打开浏览器,此时 Selenium RC Server 绑定 Selenium Core 并自动将它嵌入到浏览器中。Selenium Core 实际上是一系列 JavaScript 函数,它们使用浏览器内置的 JavaScript 翻译器来翻译和执行 Selenium Command.
  3. 客户端驱动持续执行测试用例脚本并发送特定的命令到 Selenium RC Server。这些特定的命令即 Selenium Command。
  4. Selenium RC Server 解释 Selenium Command,并触发 Selenium Core 执行对应的 JavaScript 代码来完成相应操作。
  5. 浏览器上所有的请求和响应都通过 Selenium RC 的 HTTP 代理与实际的 Web 应用服务器进行交互,并且 Selenium RC 一旦收到响应就将页面传递给浏览器。但它会篡改源,使得页面看上去好像来自于与 Selenium Core 同源的服务器(这样 Selenium Core 就遵循了同源规则)。
  6. 浏览器接收到Web页面后,便在框架或者窗口中展示页面。

Selenium 2 的主要新特性就是将 WebDriver API 集成进 Selenium RC,WebDriver 与 Selenium RC 合并的结晶就是 Selenium 2。Selenium 2 不与任何的测试框架绑定,这样便于与其他测试工具进行集成,如 JUnit 或 TestNG 等。

WebDriver 的实现与具体的浏览器相关,包括 HtmlUnit Driver、Firefox Driver、Chrome Driver、Internet Explore Driver等。

  1. HtmlUnit Driver: HtmlUnit Driver 是目前运行速度最快和最轻量级的 WebDriver 实现。正如其名字所体现的,HtmlUnit Driver 基于 HtmlUnit,优点是纯Java实现,所以容易跨平台使用。
  2. Firefox Driver: Firefox Driver 是最容易配置和使用的 WebDriver,因为所有的准备工作都伴随 Java 语言绑定的客户端被打包在一起。只要下载 WebDriver Java Client Driver 就能够使用 Firefox WebDriver。
  3. Chrome Driver: Chrome Driver 是针对 Google Chrome 浏览器开发的 WebDriver,因此其跨平台性也是非常的优异。
  4. Internet Explorer Driver: Internet Explorer Driver 只能运行在 Windows 操作系统上,相较于 Firefox Driver 和 Chrome Driver,其运行速度略显缓慢。

Selenium 2 相较于 Selenium 1 还有一个重要变化,用户可以通过 WebDriver 来测试手机应用,无论在模拟器上还是真实设备上。这是在 Selenium 1 时代无法实现的功能。

Selenium 3

Selenium IDE 

优点如下:

  1. 录制功能快捷方便,上手快。
  2. 代码转换功能易用,容易生成其他编程语言的测试用例代码。
  3. 支持跨域。
  4. 不依赖 Java 运行时环境。

缺点如下:

  1. 录制回放方式的稳定性和可靠性有限。
  2. 只支持 Mozilla Firefox。
  3. 只支持 Selense Command 语言,虽然可以导出成其他编程语言的测试用例。
  4. 对于复杂的页面逻辑其处理能力有限。

Selenium Grid

Selenium Grid 运用多个机器同时并列运行,目的在于加快测试用例运行的速度,从而减少测试运行的总时间。对于大型测试套件和需要处理海量数据验证的测试套件,Sselenium Grid 毫无疑问可以节约大量时间。Selenium Grid 的另一个优势在于可以通过节省测试时间而更快地将测试结果返还给开发人员。

Selenium Grid 还可以被用于在多种运行环境中进行测试,即并行测试多种浏览器。当测试套件运行起来时,Selenium Grid 会接受到每个测试用例及其对应浏览器的组合信息,并分配每个测试用例去测试其对应浏览器。

除此之外,对于相同类型和版本的浏览器来建立测试矩阵也是可行的。Selenium Grid 的使用相当灵活,以上所列举的的并行测试浏览器的例子也可结合起来使用,用于测试每种类型和版本的浏览器的多个实例。

Selenium Grid 包含一个Hub 和至少一个 Node。Hub 会接收到即将被执行的测试用例及其相关信息,既测试用例在哪种浏览器和操作系统上运行。Hub 将记录每个“注册过”的Node 的配置信息,并能通过这些信息自动选择可用的且符合浏览器与平台搭配要求的 Node。Node 被选中后,测试用例所调用的 Selenium 命令就会被发送至 Hub, Hub 再将这些命令发送到指定给该测试用例的 Node。随即 Node 开始启动浏览器,并执行这些 Selenium 命令对指定的 Web 程序或 Native 程序进行测试。

Selenium 与嵌入式

嵌入式设备中(如Android 、Ios),尤其是需要在手机设备上测试 Web 应用程序,一直以来都是采用手工测试的方式。而Selenium WebDriver 赋予了我们采用自动化方式来测试嵌入式设备上基于浏览器应用的能力,可谓一代神器。

WebDriver 为手机设备提供了专门针对触摸屏的 API,因此可以让测试程序模拟人通过手指操作触摸屏的真实动作。

Selenium 与云计算

基于 Selenium 且比较流行的云测试平台当属 Sauce Labs,它是一个提供自动化功能测试的云测试服务公司|(创始者也是Selenium的创始人 Jason Huggins)。该平台的优势在于资源的合理调配,并且能够尽可能多地解决测试多种不同操作系统类型或者不同尺寸屏幕的兼容性问题。该种直接在云端完成兼容性矩阵的测试使得不需要自己购买大量的硬件并自行维护成千上万台测试虚拟机。

为了应对嵌入式系统的大量普及,尤其是 Android 和 Ios,Jason Huggins 又一次开发了针对嵌入式系统且基于 WebDriver 的自动化测试框架 Appium,并且开源托管在 GitHub 上。



你可能感兴趣的:(selenium,2)