`
lsjlym
  • 浏览: 21605 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Selenium用户指南 - 第八章 Selenium-Grid

 
阅读更多

请参考Selenium栅格Web站点

注释:目前我们正在这一章上工作。此处我们为Selnium-Grid的完全的新手提供了一些介绍性的信息。在接下来的几个月,我们希望提供有用的示例和演示,以彻底地说明如何使用Selnium-Grid。

快速入门

如果你已经体验过Selenium测试自动化,你可能仅仅需要一个快速入门来起步和运行。这一章有许多适用于不同技术水平的信息,但如果你只是在寻找一个快速参考为了快速地尝试一下,就可能显得有点太多了。为了快速入门,请参考在Selenium Wiki的Selenium-Grid文章。

Selenium-Grid是什么?

Selenium-Grid允许你在不同的机器上,针对不同的浏览器并行地运行你的测试。也就是说,在同一时间,在运行不同浏览器和操作系统的机器上,运行多个测试。本质上,就是Selenium-Grid支持分布式测试执行。它允许在分布式测试执行环境运行你的测试。

何时使用

一般来说,你想要使用Selenium-Grid可能有两个原因。

  • 针对多个浏览器,浏览器的多个版本,以及在不同操作系统上运行的浏览器,运行你的测试。
  • 减少测试集完成一个测试所花费的时间。

Selenium-Grid用于通过使用多台机器并行地运行测试,以加速测试执行的时间。例如,你有一个包含100测试的测试集,但你搭建Selenium-Grid以支持四台不同的机器(虚拟机或不同的物理机器)运行这些测试,你的测试集大概,以你顺序地、在单一的机器上,运行你的测试所花的时间的1/4的时间完成。对大的测试集,和诸如执行大量的数据验证的长时间运行的测试集,这可以显著地节省时间。某些测试集的运行可能需要花费数小时。另一个提高运行测试集花费的时间的理由是,可以缩短开发者为AUT检入代码后,为获取测试结果而花费的周转时间。越来越多的采用敏捷软件开发的团队,想要尽可能快地立即得到测试反馈,而非为一个通宵的测试等待整夜。

Selenium-Grid也用于支持针对多个运行环境运行测试,特别是,在相同的时间针对不同的浏览器。例如,一个虚拟机的栅格,每一个支持在一个不同的浏览器上进行应用程序测试。如,机器1有Internet Explorer 8,机器2有Internet Explorer 9,机器3是最新的Chrome,机器4是最新的Firefox。当测试集运行时,Selenium-Grid接受每个测试-浏览器的组合,并分派每个测试运行在它要求的浏览器上。

此外,也可以有一个具有相同的浏览器,类型和版本的浏览器的栅格。例如,一个人可以有四台机器的栅格,每个运行Firefox 12的三个实例,允许一个可用的Firefox实例的(在某种意义上)“服务器场”。当测试集运行时,Selenium-Grid分配每个测试到下个可用的Firefox实例。以这种方式,可以想象,会同时并行地运行12个测试,可以显著地减少完成测试需要的时间。

Selenium-Grid是非常灵活的。以上两个示例可以组合,允许每种类型和版本的浏览器的多个实例。这样的一个配置,会同时提供并行执行的快速完成测试,以及对多浏览器类型和版本的支持。

Selenium-Grid 2.0

Selenium-Grid 2.0是在编写此文档时(5/26/2012)的最新版本。与Selenium-Grid的第一个版本差别很大。在2.0版中,Selenium-Grid已经与Selenium-RC服务器合并。现在你只需要下载一个单一的.jar文件,远程Selenium-RC-Server和Selenium-Grid都在一个包里。

Selenium-Grid 1.0

版本1是Selenium-Grid的第一个发布。如果你是Selenium-Grid的新手,你应该使用版本2。版本2已经更新,有许多新的特征,并支持Selenium-WebDriver。不敢怎样,遗留的测试系统可能仍然需要使用版本1。有关Selenium-Grid版本1的信息,可以在Selenium-Grid的Web站点找到。

Selenium-Grid是如何与集中器和节点一起工作的

一个栅格是由一个单一的集中器,和一个或多个节点组成的。两者的启动都使用selenium-server.jar可执行文件。我们在本章的后边部分列出了一些示例。

集中器接受一个等待执行的测试,带有测试应该运行在那个浏览器和那个“平台”(诸如,WINDOWS,LINUX等等)的信息。集中器知道已经注册到集中器的每一个节点的配置。使用配置信息,集中器可以选择有请求的浏览器-平台组合的可用节点。一旦一个节点被选择,由测试启动的Selenium命令就被发送给集中器,然后传递给分配给那个测试的节点。节点运行浏览器,并针对要测试的应用程序,在浏览器内执行Selenium命令。

图示如下。参见在本页的第二图(第一图演示Selenium-RC)。第二图是Selenium-Grid 1,然而它仍然适用,而且是我们在这里描述的内容的极好的图示。唯一的差别是一个术语。替代用术语“Selenium-Grid节点”替代术语“Selenium远程控制(Selenium Remote Control)”,该图将匹配我们对Selenium-Grid 2的描述。

安装

安装是简单的。从SeleniumHq站点的下载页,下载Selenium服务器jar文件。你想要的链接在这一节“Selenium服务器(以前的Selenium-RC)”。

安装它到一个你选择的文件夹。你需要确认该java可执行文件在你的可执行路径上,以便你可以从命令行运行它。如果你不能正确地运行,验证你的系统路径变量包含java.exe的路径。

启动Selenium-Grid

一般地,你会首先启动一个集中器,因为节点依赖于一个集中器。然而,这不是绝对必需的,因为节点在一个集中器启动后会识别出来,反之亦然。为了学习的目的,首先启动集中器会比较容易,否则你可能会碰到,你首次使用Selenium-Grid时不希望看到的错误消息。

启动一个集中器

要使用默认的参数启动一个集中器,从命令行shell运行下面的命令。这将在所有支持的平台,Windows,Linux或MacOs上工作。

java -jar selenium-server-standalone-2.21.0.jar -hub

这会使用默认的参数值启动一个集中器。在下边的子节中,我们会解释这些参数。注意,依赖于你正在使用的Selenium服务器的版本,你可能需要改变上边命令的jar文件名称的版本号。

启动一个节点

要启动一个使用默认参数的节点,从命令行运行下面的命令。

java -jar selenium-server-standalone-2.21.0.jar -role node -hub http://localhost:4444/grid/register

这假定集中器已经使用默认的参数启动。集中器使用于侦听新的请求的默认端口是4444。这就是为什么在URL中,端口4444被使用于定位集中器的原因。同样地,使用“localhost”是假定你的节点正运行在与你的集中器相同的机器上。对于起步阶段,这可能是最容易的。如果运行的集中器和节点在不同的机器上,只需要用运行集中器的远程机器的主机名称替代“localhost”。

警告:确信关闭运行你的集中器和节点的机器的防火墙。否则你可能会得到连接错误的信息。

配置Selenium-Grid

缺省配置

JSON配置文件

通过命令行选项配置

集中器配置

要使用缺省选项运行集中器,只需要为Selenium服务器指定-role hub

java -jar selenium-server-standalone-2.21.0.jar -hub

你应该会看到下面的日志输出。

Jul 19, 2012 10:46:21 AM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a selenium grid server
2012-07-19 10:46:25.082:INFO:osjs.Server:jetty-7.x.y-SNAPSHOT2012-07-19
10:46:25.151:INFO:osjsh.ContextHandler:started o.s.j.s.ServletContextHandler{/,null}2012-07-19
10:46:25.185:INFO:osjs.AbstractConnector:Started SocketConnector@0.0.0.0:4444

指定端口

集中器使用的默认端口是4444。该侦听端口是一个TCP/IP端口,是当“客户”,也就是说,连接到Selenium-Grid集中器的自动化测试使用的。如果在你的计算机上的另外一个应用程序已经使用了这个端口,或者如果,你已经有一个启动的Selenium服务器,你会在日志输出中,看到下面的消息。

10:56:35.490 WARN - Failed to start: SocketListener0@0.0.0.0:4444

线程中的异常

如果出现这种情况,你可以关闭那个使用端口4444的进程,或者告诉Selenium-Grid为集中器使用一个不同的端口。使用-port选项用于改变集中器使用的端口。

java -jar selenium-server-standalone-2.21.0.jar -hub -port 4441

这将工作良好,即时有另外一个集中器已经运行在这个相同的机器,也就是说,只要它们两个不都使用端口4441。

你可能,不管怎样,想要看看什么进程正在使用端口4444,以便你可以允许集中器使用这个默认端口。

要看看所有在你的机器上正在运行的程序都在使用什么端口,可以使用命令:netstat -a

这应该是可行的,在所有支持的系统,Unix/Linux,MacOs和Windows,虽然除了-a之外的附加选项可能是需要的。基本上,你需要显示进程ID连同某个端口,在Unix你可以“grep”输出(使用一个管道符)来仅仅显示那些你关注的记录。

节点配置

时序参数

获取命令行参数

Selenium服务器提供了带有简短描述的可用选项的列表。目前(2012夏天),命令行帮助有点古怪,但它可能是有帮助的,如果你知道到哪里可以找到和如何解释这些信息。

Selenium服务器提供了两个截然不同的功能,Selenium-RC服务器和Selenium-Grid。它们很可能是由不同的Selenium团队编写的,因此为每个功能的命令行帮助可能截止在两个不同的地方。对新用户来说,当你首次查看两个中的一个时,这可能不是非常明显的。

如果你只是传递-h选项,正如你可能首先假定的,你会得到Selenium-RC服务器的选项,而不是Selenium-Grid的。

java -jar selenium-server-standalone-2.21.0.jar -h

这将给予你Selenium-RC的服务器选项。如果你想要Selenium-Grid的命令行帮助,你必须首先使用-hub或-node选项,告诉Selenium服务器你对Selenium-Grid感兴趣,然后跟着一个-h。

java -jar selenium-server-standalone-2.21.0.jar -role node -h

或者,其实,你也可以只是传递一个垃圾参数给-role node选项,例如。

java -jar selenium-server-standalone-2.21.0.jar -role node xx

你会首先看到“INFO...”和一个“ERROR”,但跟着那个,你会得到Selenium-Grid的命令行选项。在此我们没有列出整个输出,因为它太长了,前几行看起来像这个。

Jul 19, 2012 10:10:39 AM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a selenium grid node
org.openqa.grid.common.exception.GridConfigurationException: You need to specify a hub to register to using -hubHost X -hubPort 5555. The specified config was -hubHost null -hubPort 4444
at org.openqa.grid.common.RegistrationRequest.validate(RegistrationRequest.java:610)
at org.openqa.grid.internal.utils.SelfRegisteringRemote.startRemoteServer(SelfRegisteringRemote.java:88)
at org.openqa.grid.selenium.GridLauncher.main(GridLauncher.java:72)
Error building the config :You need to specify a hub to register to using -hubHost X -hubPort 5555. The specified config was -hubHost null -hubPort 4444
Usage :
-hubConfig:
(hub) a JSON file following grid2 format.
-nodeTimeout:
(node) the timeout in seconds before the hub automatically ends a test that hasn't had aby activity than XX sec.The browser will be released for another test to use.This typically takes care of the client crashes.

常见错误

不能存取jarfile

Unable to access jarfile selenium-server-standalone-2.21.0.jar

该错误可能发生,当在启动一个集中器或节点的时候。这意思是Java不能找到Selenium服务器的jar文件。要么从selenium-server-XXXX.jar文件所在的目录运行这个命令,或者为这个jar指定显式的路径。

故障排除


© Copyright 2008-2012, Selenium Project. Last updated on Feb 02, 2012.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics