Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where can I find a schema or documentation for the Se 2 grid hub configuration json?

I have a Se 2 grid hub running. Where can I find documentation for the effects and schema of the -hubConfig parameter? Currently my grid hub shows: "updated with grid2 config : No hub config file specified. To specify one, use -hubConfig XXX.json where XXX.json is a hub config file". I can use the hub without this configured.

I have found examples in blogs and issues, but no clear documentation.

blogs: http://opensourcetester.co.uk/2011/07/06/selenium-grid-2/

issues: http://code.google.com/p/selenium/issues/detail?id=2399

like image 425
Precipitous Avatar asked Sep 13 '11 17:09

Precipitous


2 Answers

I've found a good starting point is looking at examples in the Selenium Grid 2 code base.

Here is a sample hub file (assume we name the json file hub.json):

Use: java -jar selenium-server-standalone-2.6.0.jar -role hub -hubConfig hub.json

{
  "host": null,
  "port": 4444,
  "newSessionWaitTimeout": -1,
  "servlets" : [],
  "prioritizer": null,
  "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
  "throwOnCapabilityNotPresent": true,
  "nodePolling": 5000,

  "cleanUpCycle": 5000,
  "timeout": 300000,
  "maxSession": 5
}

here is a sample node file (assume the file is named rc.json):

Use: java -jar selenium-server-standalone-2.6.0.jar -role rc -nodeConfig rc.json

{
  "capabilities":
      [
        {
          "browserName": "firefox",
          "maxInstances": 5
        },
        {
          "browserName": "chrome",
          "maxInstances": 5
        },
        {
          "browserName": "internet explorer",
          "maxInstances": 1
        }
      ],
    "configuration":
        {
        "nodeTimeout":120,
        "port":5555,

        "hubPort":4444,
        "hubHost":"localhost",

        "nodePolling":2000,

        "registerCycle":10000,
        "register":true,
        "cleanUpCycle":2000,
        "timeout":30000,
        "maxSession":5,
        }
}

You can create use the similar format for role "wd" if it's required to have a different configuration.

like image 190
ehase Avatar answered Sep 28 '22 00:09

ehase


The javadocs and various source code files are helpful to a certain extent but the wiki is not very helpful and the various configuration examples seem inconsistent until you dig into the code. For example, DefaultHub.json specifies "timeout" : 300000 which leads one to assume timeout is in ms but if you look at command-line examples you'll see that timeout is specified in seconds. If you look at the code you'll see that, indeed, the JSON configuration scheme does take timeout (and all other time values) in ms but all other configuration schemes take the timeout (and some other time values) in seconds.

The most readable and concise documentation I've found for the hub and node options is in an old copy of GridParameters.properties (which no longer seems to exist), but keep in mind that all time values in a JSON configuration file are in ms:

role = <hub|node> (default is no grid, just run an RC/webdriver server). When launching a node, the parameters will be forwarded to the server on the node, so you can use something like -role node -trustAllSSLCertificates.  In that case, the SeleniumServer will be launch with the trustallSSLCertificates option.

# hub config
host = (hub & node)  <IP | hostname> : usually not needed and determined automatically. For exotic network configuration, network with VPN, specifying the host might be necessary.
port = (hub & node) <xxxx> : the port the remote/hub will listen on. Default to 4444.


throwOnCapabilityNotPresent = (hub) <true | false> default to true. If true, the hub will reject test requests right away if no proxy is currently registered that can host that capability.Set it to false to have the request queued until a node supporting the capability is added to the grid.
newSessionWaitTimeout = (hub) <XXXX>. Default to no timeout ( -1 ) the time in ms after which a new test waiting for a node to become available will time out.When that happens, the test will throw an exception before starting a browser.

capabilityMatcher = (hub) a class implementing the CapabilityMatcher interface. Defaults to org.openqa.grid.internal.utils.DefaultCapabilityMatcher. Specify the logic the hub will follow to define if a request can be assigned to a node.Change this class if you want to have the matching process use regular expression instead of exact match for the version of the browser for instance. All the nodes of a grid instance will use the same matcher, defined by the registry.
prioritizer = (hub) a class implementing the Prioritizer interface. Default to null ( no priority = FIFO ).Specify a custom prioritizer if you need the grid to process the tests from the CI, or the IE tests first for instance.
servlets = (hub & node) <com.mycompany.MyServlet,com.mycompany.MyServlet2> to register a new servlet on the hub/node. The servlet will accessible under the path  /grid/admin/MyServlet /grid/admin/MyServlet2


grid1Yml = (hub) a YML file following grid1 format.
hubConfig = (hub) a JSON file following grid2 format that defines the hub properties.
nodeConfig = (node) a JSON file following grid2 format that defines the node properties.


# config that will be inherited by the proxy and used for the node management.
cleanupCycle = (node) <XXXX> in ms. How often a proxy will check for timed out thread.
timeout = (node) <XXXX>  the timeout in seconds before the hub automatically ends a test that hasn't had any activity in the last X seconds. The browser will be released for another test to use. This typically takes care of the client crashes.
browserTimeout= (hub/node) The timeout in seconds a browser can hang
hub = (node) <http://localhost:4444/grid/register> : the url that will be used to post the registration request. This option takes precedence over -hubHost and -hubPort options.
hubHost = (node) <IP | hostname> : the host address of a hub the registration request should be sent to. Default to localhost. Option -hub takes precedence over this option.
hubPort = (node) <xxxx> : the port listened by a hub the registration request should be sent to. Default to 4444. Option -hub takes precedence over this option.
proxy = (node) the class that will be used to represent the node. By default org.openqa.grid.selenium.proxy.DefaultRemoteProxy.
maxSession = (node) max number of tests that can run at the same time on the node, independently of the browser used.
registerCycle = (node) how often in ms the node will try to register itself again.Allow to restart the hub without having to restart the nodes.
nodePolling = (node) in ms. Interval between alive checks of node how often the hub checks if the node is still alive.
unregisterIfStillDownAfter = (node) in ms. If the node remains down for more than unregisterIfStillDownAfter millisec, it will disappear from the hub.Default is 1min. 
downPollingLimit = (node) node is marked as down after downPollingLimit alive checks.
nodeStatusCheckTimeout = (node) in ms. Connection and socket timeout which is used for node alive check.
like image 21
rob Avatar answered Sep 28 '22 02:09

rob