通过Vagrant运行Selenium Grid

时间:2014-02-03 05:49:25

标签: macos selenium vagrant selenium-grid selenium-grid2

我正在尝试从我的Mac上运行我的Selenium服务器和客户端迁移到让服务器在Vagrant VM中运行,并且客户端在我的Mac上本地运行。

我正在使用在Mac OS X 10.9.1上运行的Vagrant 1.4.3来启动Ubuntu 13.10 VM。启动VM后,我会安装Java,Node.js以及我的测试环境所需的一些其他依赖项。安装Selenium 2.39.0(撰写本文时的最新版本)后,以下是相关配置。


我通过SSH连接到我的Vagrant虚拟机并执行以下操作:

java -jar /usr/local/bin/selenium-server-standalone-*.jar \
    -role hub \
    -trustAllSSLCertificates \
    -hubConfig /vagrant/hub.json

VM上的

/vagrant映射到我本地Mac上项目目录的根目录。这是我Vagrantfile的相关配置。

config.vm.box = "saucy64"
config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/saucy/20140202/saucy-server-cloudimg-amd64-vagrant-disk1.box"
# ...
config.vm.define "testing" do | test |
  test.vm.network :forwarded_port, guest: 3444, host: 4444
  test.vm.network :private_network, ip: "192.168.50.6"
  # ...
end

以下是Selenium Grid Hub在Vagrant VM上使用的Hub配置。 Selenium Hub在VM中使用端口3444,它在VM外部4444端口映射,面向我的Mac。

{
    "browserTimeout": 180000,
    "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
    "cleanUpCycle": 2000,
    "maxSession": 5,
    "newSessionWaitTimeout": -1,
    "nodePolling": 2000,
    "port": 3444,
    "throwOnCapabilityNotPresent": true,
    "timeout": 30000
}

以下是我在Mac上作为节点启动Selenium的方法。

java -jar selenium-server-standalone-*.jar \
    -role node \
    -trustAllSSLCertificates \
    -nodeConfig node.mac.json

这是节点配置,它尝试与在Vagrant内运行的Hub通信。

{
    "capabilities": [
        {
            "platform": "MAC",
            "seleniumProtocol": "WebDriver",
            "browserName": "firefox",
            "maxInstances": 1
        },
        {
            "platform": "MAC",
            "seleniumProtocol": "WebDriver",
            "browserName": "chrome",
            "maxInstances": 1
        }
    ],
    "configuration": {
        "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
        "hubHost": "127.0.0.1",
        "hubPort": 4444,
        "hub": "http://127.0.0.1:4444/grid/register",
        "maxSession": 1,
        "port": 4445,
        "register": true,
        "registerCycle": 2000,
        "remoteHost": "http://127.0.0.1:4445",
        "role": "node",
        "url": "http://127.0.0.1:4445"
    }
}

最后,这是我在Mac端的终端上获得的内容。

Feb 02, 2014 9:29:07 PM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a selenium grid node
21:29:18.706 INFO - Java: Oracle Corporation 24.51-b03
21:29:18.706 INFO - OS: Mac OS X 10.9.1 x86_64
21:29:18.713 INFO - v2.39.0, with Core v2.39.0. Built from revision ff23eac
21:29:18.773 INFO - Default driver org.openqa.selenium.ie.InternetExplorerDriver registration is skipped: registration capabilities Capabilities [{platform=WINDOWS, ensureCleanSession=true, browserName=internet explorer, version=}] does not match with current platform: MAC
21:29:18.802 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4445/wd/hub
21:29:18.803 INFO - Version Jetty/5.1.x
21:29:18.804 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
21:29:18.804 INFO - Started HttpContext[/selenium-server,/selenium-server]
21:29:18.804 INFO - Started HttpContext[/,/]
21:29:18.864 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@593aa24f
21:29:18.864 INFO - Started HttpContext[/wd,/wd]
21:29:18.866 INFO - Started SocketListener on 0.0.0.0:4445
21:29:18.867 INFO - Started org.openqa.jetty.jetty.Server@48ef85f3
21:29:18.867 INFO - using the json request : {"class":"org.openqa.grid.common.RegistrationRequest","capabilities":[{"platform":"MAC","seleniumProtocol":"WebDriver","browserName":"firefox","maxInstances":1},{"platform":"MAC","seleniumProtocol":"WebDriver","browserName":"chrome","maxInstances":1},{"platform":"MAC","seleniumProtocol":"WebDriver","browserName":"iphone","maxInstances":1},{"platform":"MAC","seleniumProtocol":"WebDriver","browserName":"ipad","maxInstances":1}],"configuration":{"nodeConfig":"node.mac.json","port":4445,"host":"192.168.50.1","hubHost":"127.0.0.1","registerCycle":2000,"trustAllSSLCertificates":"","hub":"http://127.0.0.1:4444/grid/register","url":"http://127.0.0.1:4445","remoteHost":"http://127.0.0.1:4445","register":true,"proxy":"org.openqa.grid.selenium.proxy.DefaultRemoteProxy","maxSession":1,"role":"node","hubPort":4444}}
21:29:18.868 INFO - Starting auto register thread. Will try to register every 2000 ms.
21:29:18.868 INFO - Registering the node to hub :http://127.0.0.1:4444/grid/register
21:30:25.079 INFO - Registering the node to hub :http://127.0.0.1:4444/grid/register
21:31:31.254 INFO - Registering the node to hub :http://127.0.0.1:4444/grid/register
21:32:35.416 INFO - Registering the node to hub :http://127.0.0.1:4444/grid/register
21:33:41.581 INFO - Registering the node to hub :http://127.0.0.1:4444/grid/register
21:34:47.752 INFO - Registering the node to hub :http://127.0.0.1:4444/grid/register
21:35:51.908 INFO - Registering the node to hub :http://127.0.0.1:4444/grid/register
21:36:56.045 INFO - Registering the node to hub :http://127.0.0.1:4444/grid/register
21:38:00.189 INFO - Registering the node to hub :http://127.0.0.1:4444/grid/register

最后,这是我在Vagrant VM端的终端上获得的内容。

Feb 03, 2014 5:28:53 AM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a selenium grid server
2014-02-03 05:28:54.780:INFO:osjs.Server:jetty-7.x.y-SNAPSHOT
2014-02-03 05:28:54.811:INFO:osjsh.ContextHandler:started o.s.j.s.ServletContextHandler{/,null}
2014-02-03 05:28:54.823:INFO:osjs.AbstractConnector:Started SocketConnector@0.0.0.0:3444
Feb 03, 2014 5:29:20 AM org.openqa.grid.selenium.proxy.DefaultRemoteProxy isAlive
WARNING: Failed to check status of node: Connection refused
Feb 03, 2014 5:29:22 AM org.openqa.grid.selenium.proxy.DefaultRemoteProxy isAlive
WARNING: Failed to check status of node: Connection refused
Feb 03, 2014 5:29:22 AM org.openqa.grid.selenium.proxy.DefaultRemoteProxy onEvent
WARNING: Marking the node as down. Cannot reach the node for 2 tries.
Feb 03, 2014 5:29:24 AM org.openqa.grid.selenium.proxy.DefaultRemoteProxy isAlive
WARNING: Failed to check status of node: Connection refused
Feb 03, 2014 5:29:26 AM org.openqa.grid.selenium.proxy.DefaultRemoteProxy isAlive
WARNING: Failed to check status of node: Connection refused
Feb 03, 2014 5:29:28 AM org.openqa.grid.selenium.proxy.DefaultRemoteProxy isAlive
WARNING: Failed to check status of node: Connection refused
Feb 03, 2014 5:29:30 AM org.openqa.grid.selenium.proxy.DefaultRemoteProxy isAlive
WARNING: Failed to check status of node: Connection refused
Feb 03, 2014 5:29:32 AM org.openqa.grid.selenium.proxy.DefaultRemoteProxy isAlive
WARNING: Failed to check status of node: Connection refused

Google在这种情况下没有回报任何有用的东西。任何人都可以帮我确定为什么Hub和Node不能互相交流?

3 个答案:

答案 0 :(得分:1)

我有一个类似的设置,我的selenium服务器(也称为集线器)位于远程虚拟机上,客户端(也称为节点)位于我的本地计算机上。我一直看到同样的错误:

Feb 04, 2014 5:29:22 PM org.openqa.grid.selenium.proxy.DefaultRemoteProxy isAlive
WARNING: Failed to check status of node: Connection refused
Feb 04, 2014 5:29:22 PM org.openqa.grid.selenium.proxy.DefaultRemoteProxy onEvent
WARNING: Marking the node as down. Cannot reach the node for 2 tries.

我和我们的Ops团队谈过,他们告诉我,我的vm坐在不同的网络和不同的位置。即使节点机器能够到达集线器,但集线器也永远无法到达节点。他们建议让另一个位于同一网络上的虚拟机。这就像一条街。 希望它有所帮助。

答案 1 :(得分:0)

我对Selenium的了解不多,但我想问题是关于使用127.0.0.1。特别是VM无法连接到主机,并且您不转发端口4445。

由于您已经指定了 private_network 地址(192.168.50.6),因此您可以尝试直接使用它而无需任何端口转发。

答案 2 :(得分:0)

第一个答案是部分正确的。您必须确保节点和服务器之间的通信路径以及节点的服务器是清晰的,并且能够在特定端口上进行连接。从技术上讲,您运行2台服务器,节点上的服务器监听1个端口,而集线器上的服务器则监听另一个端口。

试试这个: 我有同样的问题,但通过添加主机字段来修复它:

" host":[ip或节点的主机名],

这是我的节点配置文件:

{
    "capabilities":[
        {
            "platform":"MAC",
            "browserName":"firefox",
            "version":"28",
            "maxInstances":1
        },
        {
            "platform":"MAC",
            "browserName":"chrome",
            "version":"34",
            "maxInstances":1
        }
    ],
    "configuration":{
        "port": 5556,
        "hubPort": 5555,
        "host": 10.50.10.101, //this is the ip of my node
        "hubHost":"10.50.10.100", //this is ip of my grid hub
        "nodePolling":2500,
        "registerCycle":10500,
        "register":true,
        "cleanUpCycle":2500,
        "maxSession":5,
        "role":"node"
    }
}