Selenium-Grid官方文档翻译

1 Selenium-Grid

Note:我们现在正在研究这一章。目前我们已经为大家介绍了Selnium-Grid的新用法。接下来的几个月我们将提供有用的例子和插图来彻底介绍怎么使用Selnium-Grid。

1.1 快速开始

如果您已经在Selenium测试自动化方面有经验,您可能只需要快速启动即可启动并运行。本章提供了许多与技能水平相关的信息,但如果您只是寻找快速参考来快速尝试,那可能太多了。有关快速入门的信息,请参阅Selenium Wiki中的Selenium-Grid文章。

1.2 什么是Selenium-Grid

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

1.3 什么时候使用它

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

  • 运行多个浏览器、多个浏览器版本和运行在不同操作系统上的浏览器的测试。
  • 减少测试套件完成测试通过所需的时间。

Selenium-Grid用于通过使用多台机器并行运行测试来加速执行测试。例如,如果您有一套100个测试,但是您将Selenium-Grid设置为支持4台不同的机器(虚拟机或单独的物理机器)来运行这些测试,那么您的测试套件将大致完成四分之一的时间就像在单台机器上依次运行测试一样。对于大型测试套件和长期运行的测试套件,例如那些执行大量数据验证的测试套件,这可以是一个重要的节省时间的方法。一些测试套件可能需要几小时才能运行。提高运行套件所花费时间的另一个原因是在开发人员为AUT注册代码之后缩短测试结果的周转时间。越来越多从事敏捷软件开发的软件团队希望尽快获得测试反馈,而不是通宵等待一个测试通过。

Selenium-Grid还用于支持针对多个运行时环境的运行测试,特别是在同一时间针对不同浏览器进行测试。例如,可以设置虚拟机的“网格”,每个虚拟机支持要测试的应用程序必须支持的不同浏览器。所以,机器1有Internet Explorer 8、机器2有Internet Explorer 9、机器3有最新的Chrome和机器4有最新的Firefox。运行测试套件时,Selenium-Grid接收每个测试浏览器组合,并将每个测试分配给其所需的浏览器。

另外,可以有一个相同的浏览器,类型和版本的网格。例如,可以有一个由4台机器组成的网格,每台机器运行3个Firefox实例,共12个,允许在可用的Firefox实例中有一个“服务器农场”(在某种意义上)。当套件运行时,每个测试都传递给Selenium-Grid,Selenium-Grid将测试分配给下一个可用的Firefox实例。通过这种方式,可以获得12次测试同时并行运行的测试通行证,大大缩短了完成测试所需的时间。

Selenium-Grid非常灵活。这两个示例可以结合使用,以允许每个浏览器类型和版本的多个实例。像这样的配置将同时提供并行执行,以便快速完成测试,并同时支持多种浏览器类型和版本。

1.4 Selenium-Grid 2.0

Selenium-Grid 2.0是本文档撰写(2012年5月26日)的最新版本。与Selenium-Grid的第一版完全不同。在2.0 Selenium-Grid与Selenium-RC服务器合并。现在,您只需下载一个.jar文件即可将远程Selenium-RC-Server和Selenium-Grid全部集成到一个包中。

1.5 Selenium-Grid是如何工作的-使用 Hub(集线器) 和 Nodes(节点)

网格(grid)由一个集线器和一个或多个节点组成。两者都是使用selenium-server.jar可执行文件启动的。我们在本章的以下部分列举了一些例子。

集线器接收一个要执行的测试,以及测试应该在哪个浏览器和“平台”(如WINDOWS,LINUX等)上运行的信息。它“知道”每个已”注册“到集线器的节点的配置。使用这些信息,它选择一个可用的节点,该节点具有所请求的浏览器平台组合。一旦节点被选中,测试启动的Selenium命令将被发送到集线器,并将其传递给分配给该测试的节点。该节点运行浏览器,并在该浏览器中执行针对被测试的应用程序的Selenium命令。

1.6 安装

安装很简单。从SeleniumHq网站的下载页面(http://www.seleniumhq.org/download/)下载Selenium-Server jar文件。您需要“Selenium Standalone Server(以前的Selenium-RC)”部分下的链接。

将其安装在您选择的文件夹中。您需要确保java可执行文件在您的执行路径上,以便您可以从命令行运行它。如果没有正确运行,请验证您的系统路径变量是否包含java.exe的路径。

1.7 开始Selenium-Grid

一般来说,由于节点依赖于集线器,因此首先启动集线器。但是,这并不是绝对必要的,因为节点可以识别集线器何时启动,反之亦然。不过,对于学习目的而言,首先启动集线器会更容易,否则,您将会看到错误消息,可能不想从第一次使用Selenium-Grid开始。

1.7.1 启动一个Hub

若要启动带有默认参数的集线器,请从命令行shell运行以下命令。这将适用于所有支持的平台,Windows Linux或Mac OSX。

java -jar selenium-server-standalone-3.8.1.jar -role hub

这将使用默认参数值启动集线器。我们将在下面的小节中解释这些参数。请注意,您可能必须更改jar文件名中的版本号,具体取决于您使用的是哪个版本的selenium-server。

1.7.2 启动节点(node)

要使用默认参数启动节点,请从命令行运行以下命令。

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

这假定集线器已经使用默认参数在上面启动了。集线器用于侦听新请求的默认端口是端口4444.这就是为什么在URL中使用端口4444来定位集线器的原因。同样,“localhost”的使用假设你的节点和你的集线器在同一台机器上运行。为了开始,这可能是最简单的。如果在不同的机器上运行集线器和节点,只需将“localhost”替换为运行集线器的远程机器的主机名即可。

警告:请务必关闭运行集线器和节点的计算机上的防火墙。否则,您可能会收到连接错误。

1.8 配置Selenium-Grid

1.8.1 默认配置

1.8.2 JSON配置文件

1.8.3 通过命令行选项配置

1.9 Hub配置

要使用默认选项运行集线器,只需指定-role hub到Selenim-Server

java -jar selenium-server-standalone-3.8.1.jar -role hub

您应该能看到以下日志记录输出。

13:52:09.680 INFO - Selenium build info: version: '3.8.1', revision: '6e95a6684b'
13:52:09.681 INFO - Launching Selenium Grid hub
2018-01-17 13:52:51.314:INFO:osjs.Server:main: jetty-9.4.7.v20170914
2018-01-17 13:52:10.398:INFO:osjsh.ContextHandler:main: Started o.s.j.s.ServletContextHandler@80ec1f8{/,null,AVAILABLE}
2018-01-17 13:52:10.421:INFO:osjs.AbstractConnector:main: Started ServerConnector@6c763753{HTTP/1.1,[http/1.1]}{0.0.0.0:4444}

1.9.1指定端口

集线器使用的默认端口是4444.这里引用的端口是“客户端”(即自动测试连接到Selenium-Grid集线器)时使用的TCP / IP端口。如果您的计算机上的另一个应用程序已经在使用此端口,或者您已经启动了Selenium-Server,则会在日志输出中看到以下消息。

java.net.BindException: Address already in use

如果发生这种情况,可以关闭使用端口4444的其他进程,也可以让Selenium-Grid为其Hub使用不同的端口。使用-port选项更改集线器使用的端口。

java -jar selenium-server-standaloe-3.8.1.jar -role hub -port 4441

即使另一个Hub已经在同一台机器上运行,也就是说,只要它们都不使用端口4441,这将工作。

但是,您可能想查看使用端口4444的进程,因此您可以允许Hub使用默认设置。要查看机器上所有正在运行的程序使用的端口,请使用该命令。

netstat -a

这应该适用于所有支持的系统,Unix / Linux,MacOs和Windows,尽管可能需要超出-a之外的其他选项。基本上你需要显示进程ID和端口。在Unix中,您可以从端口号中“输入”输出(使用管道),只显示您所关心的记录。

1.10 节点配置

1.11 时序参数

1.12 定制网格

1.12.1 在Hub和/或node添加自定义

网格允许您定义自己的servlet,然后将它们插入Hub(或)到node(节点)中。这使您可以在Hub端(或)在Node端添加自定义设置。让我们举一个例子来更详细的理解这个定制需求。

为了调试的目的,我们希望能够访问所有node(节点)生成的日志。唯一的问题是,我们需要启用日志记录到节点运行的每台机器上。除此之外,我们可以通过在Hub和node上添加servlet来构建自定义解决方案。

这将是我们定制Hub的一个很好的例子。我们首先创建一个自定义的servlet。所有的servlet(无论是Hub还是Node)都可以通过扩展来创建:

1.org.openqa.grid.web.servlet.RegistryBasedServlet (or)
2.javax.servlet.http.HttpServlet.

扩展org.openqa.grid.web.servlet.RegistryBasedServlet当你需要访问中心的内部(例如,org.openqa.grid.internal.Registry是Hub的心脏)和扩展javax.servlet.http.HttpServlet,如果你不需要访问Hub内部。

所以对于我们的例子,可以说我们正在创建两个servlet。

  • 一个servlet(可以称之为org.openqa.demo.AllNodes)在Hub上注入。当这个servlet被调用时,它会列出所有注册到Hub的node
  • 一个servlet(让我们称之为org.openqa.demo.NodeLog)被注入到node中。当这个servlet被调用时,它会从节点读取日志并将其作为一个网页。为了简单起见,我们不打算熟悉如何让节点将其所有日志记录重定向到日志文件。
    现在你需要构建一个JAR文件(假设其为myservlets.jar)包含上面提到的类(AllNodes和NodeLog)的jar文件(假设它被调用)。

从目录中同时两个myservlets.jar和selenium-server-standalone-2.44.0.jar存在,通过运行命令启动hub

java -cp *:. org.openqa.grid.selenium.GridLauncher -role hub -servlets org.openqa.demo.AllNodes

这个命令会导致网格生成,并将新的servlet添加到hub。它可以通过访问http://localhost:4444/grid/admin/AllNodes

从目录中都有myservlets.jar和selenium-server-standalone-2.44.0.jar存在,通过运行以下命令启动节点

java -cp *:. org.openqa.grid.selenium.GridLauncher -role node -hub http://localhost:4444/grid/register -servlets org.openqa.demo.AllNodes

这个命令会产生节点,我们的新servlet会被添加到节点中。它可以通过被访问http://xxx:5555/extra/NodeLog,其中xxx 表示其中节点运行的机器名/ IP。

要记住的要点:

  • 假设集线器运行在端口4444上,所有添加到集线器上的servlet都可以在http://xxx:4444/admin/路径和路径下访问
  • 假设节点在端口5555上运行,所有添加到节点的serlvets都可以在http://xxx:5555/extra/路径下访问。

1.12.2 添加自定义代理

可能会出现这样的情况,你想在每个节点上建立一些自定义的逻辑,比如“自动重启”(或者“开始/停止视频录制”等等)。在这种情况下,你会去建立你自己的定制代理,然后将其注入到网格系统中。

以下是你如何去做这件事。

  • 首先扩展org.openqa.grid.selenium.proxy.DefaultRemoteProxy并定义您的自定义功能。
  • 建一个myproxy.jar包含自定义代理的jar(让我们称之为jar )(为了简单起见,假设我们的自定义代理将被称为org.openqa.grid.MyProxy)。
  • 从目录其中两个myproxy.jar和selenium-server-standalone-2.44.0.jar存在,通过运行命令启动hub。

    java -cp *:. org.openqa.grid.selenium.GridLauncher -role hub
    
  • 从目录中都有myproxy.jar和selenium-server-standalone-2.44.0.jar存在,通过运行以下命令启动节点。

    java -cp * :. org.openqa.grid.selenium.GridLauncher -role node -hub http:// localhost:4444 / grid / register -proxy org.openqa.grid.MyProxy
    

要记住的要点:

  • 使用自定义代理时,请确保代理仅在定义的内容之上添加自定义功能org.openqa.grid.selenium.proxy.DefaultRemoteProxy。
  • 确保包含自定义代理类的jar在Grid Hub和Node的类路径中都可用(这就是为什么我们要使用java -cp而不是使用java -jar)。

1.13 获取命令行帮助

Selenium-Server提供了可用选项列表,并对每个选项进行了简要说明。目前(2012年夏季),命令行帮助有一些奇怪之处,但是如果您知道在哪里查看以及如何解释这些信息,这可能会有帮助。

Selenium-Server提供了两个截然不同的功能,Selenium-RC服务器和Selenium-Grid服务器。这些可能是由不同的Selenium团队编写的,因此每个函数的命令行帮助已经在两个不同的地方结束了。而且,对于新用户来说,您可能并不清楚您正在查看的这两个中的哪一个。

如果您只是简单地传递一个-h选项,您可能会首先获得Selenium-RC服务器选项,而不是Selenium-Grid。

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

这会给你Selenium-RC的服务器选项。如果您需要Selenium-Grid的命令行帮助,则首先使用-hub或-node选项来告诉您对Selenium-Grid感兴趣的Selenium-Server,然后跟随-h。

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

或者,就这一点而言,只需将一个垃圾参数传递给-role节点,如下所示。

java -jar selenium-server-standalone-3.8.1.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) <XXXX>  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.

1.13 常见错误

1.13.1 无法接取jar文件

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

启动hub或node时可能会发生此错误。这意味着Java无法找到hub服务器的jar文件。从存储了selenium-server-XXXX.jar文件的目录运行该命令,或者指定jar的显式路径。

1.13.2 故障排除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章