Selenium Grid: MaxSessions vs MaxInstances

SeleniumSelenium WebdriverSelenium Grid

Selenium Problem Overview


I was wondering if anybody could shed some light on a Selenium question that has been giving us a bit of head scratching.

We're confused on meaning of MaxSession and MaxInstances of Selenium Grid. We think that the MaxSession is the total number of test sessions that can run on a single node. And we also think that the MaxInstances is the total number of browsers that a test can open.

Or is MaxInstances the total number of browsers available to the node?

The command that we are using is:

java -Xrs -jar selenium-server.jar -role node -port 44506 -hub http://localhost:44500
/grid/register -firefoxProfileTemplate SeleniumProfile -timeout 300000 -browser 
"browserName=firefox,maxInstances=10,platform=ANY,seleniumProtocol=WebDriver" -browser 
"browserName=chrome,maxInstances=10,platform=ANY,seleniumProtocol=WebDriver"

We think the way we are using our node (above) is 5 concurrent test sessions by default.

Does each test have 20 browsers available to it?

Or does each test session share the 20 browsers (10 chrome/10 FF) in a pool - with the other test sessions?

Selenium Solutions


Solution 1 - Selenium

Nice question....i would say it's bit confusing.... But will try to answer it in simple terms..

MaxInstances This says....how many instances of same version of browser can run over the Remote System.

For example, i have a FF12,IE and i declared the command as follows
-browser browserName=firefox,version=12,maxInstances=5,platform=LINUX
-browser browserName=InternetExplorer,version=9.0,maxInstances=5,platform=LINUX

So i can run 5 instances of Firefox 12 and as well as 5 instances of IE9 at the same time in remote machine. So total user can run 10 instances of different browsers (FF12 & IE9) in parallel.

MaxSession This says....how many browsers (Any Browser and any version) can run in parallel at a time in the remote system. So this overrides the Max Instances settings and can restrict the number of browser instances that can run in parallel.

For above example, when maxSession=1 forces that you never have more than 1 browser running. 

With maxSession=2 you can have 2 Firefox tests at the same time, or 1 Internet Explorer and 1 Firefox test). 

Irrespective of what MaxInstances you have defined.

For more clear info do visit - https://seleniumhq.github.io/docs/grid.html

Solution 2 - Selenium

To expand upon Anuragh27crony's answer, I've drawn up a quick diagram:

enter image description here

If this is your node config, then you can execute at most 5 tests in parallel, for example in the following combinations:

  • 3 * chrome, 2 * firefox
  • 2 * chrome, 2 * firefox, 1 * edge
  • 5 * edge
  • 3 * chrome

The following combinations are NOT possible:

  • 4 * chrome (exceeds Chrome maxInstances)
  • 6 * edge (exceeds maxSessions)
  • 3 * chrome, 3 * firefox (exceeds maxSessions)

As mentioned by Anuragh, MaxInstances applies to a specific browser, while MaxSessions applies to the entire node.

Solution 3 - Selenium

As per the documentation in Configuring the nodes by default, starting a Selenium Grid Node allows for concurrent usage of 11 browsers:

  • 5 Firefox
  • 5 Chrome
  • 1 Internet Explorer

The maximum number of concurrent tests is set to 5 by default. To change this and other browser settings, you can pass in parameters to each -browser switch (each switch represents a node based on your parameters). If you use the -browser parameter, the default browsers will be ignored and only what you specify command line will be used.


maxInstances

maxInstances is an optional parameter which can be passed through the -browser optional parameter.

Usecase 1

To configure a Selenium Grid Node for 20 instances of Firefox version=X.Y.Z you can use the following solution:

  • Command:

      java -Dwebdriver.gecko.driver=geckodriver.exe -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.125:4444/grid/register -browser browserName=firefox,version=X.Y.Z,maxInstances=20,platform=WINDOWS
      
    
  • Node Console Logs:

      C:\Utility\SeleniumGrid>java -Dwebdriver.gecko.driver=geckodriver.exe -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.125:4444/grid/register -browser browserName=firefox,version=X.Y.Z,maxInstances=20,platform=WINDOWS
      16:54:11.843 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.59, revision: e82be7d358
      16:54:12.003 INFO [GridLauncherV3.lambda$buildLaunchers$7] - Launching a Selenium Grid node on port 6318
      2020-02-14 16:54:12.523:INFO::main: Logging initialized @1022ms to org.seleniumhq.jetty9.util.log.StdErrLog
      16:54:12.860 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet
      16:54:12.974 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 6318
      16:54:12.974 INFO [GridLauncherV3.lambda$buildLaunchers$7] - Selenium Grid nodeis up and ready to register to the hub
      16:54:13.161 INFO [SelfRegisteringRemote$1.run] - Starting auto registration thread. Will try to register every 5000 ms.
      16:54:13.765 INFO [SelfRegisteringRemote.registerToHub] - Registering the node to the hub: http://192.168.1.125:4444/grid/register
      16:54:13.962 INFO [SelfRegisteringRemote.registerToHub] - The node is registered to the hub and ready to use
      
    
  • Grid Console Snapshot:

GidNodeFirefox20

Usecase 2

To configure a Selenium Grid Node for 10 instances of Firefox version=A.B.C and 20 instances of Chrome version=X.Y.Z you can use the following solution:

  • Command:

      java -Dwebdriver.gecko.driver=geckodriver.exe -Dwebdriver.chrome.driver=chromedriver.exe -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.125:4444/grid/register -browser browserName=firefox,version=X.Y.Z,maxInstances=10,platform=WINDOWS -browser browserName=chrome,version=X.Y.Z,maxInstances=20,platform=WINDOWS
      
    
  • Grid Console Snapshot:

GidNodeFirefox10Chrome20


-maxSession

-maxSession is also an optional parameter which can be passed as a main parameter to configure the maximum number of browsing contexts that can run in parallel on a particular node. This is different from the maxInstance of supported browsers (Example: For a node that supporting Firefox version A.B.C, Firefox version P.Q.R and Chrome version X.Y.Z, maxSession=1 will ensure that you never have more than 1 browser running. With maxSession=2 you can have 2 Firefox tests executing at the same time, or 1 Firefox and 1 Chrome test).

Example:

java -Dwebdriver.gecko.driver=geckodriver.exe -Dwebdriver.chrome.driver=chromedriver.exe -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.1.125:4444/grid/register -browser "browserName=firefox,version=A.B.C,maxInstances=10,platform=WINDOWS" -browser "browserName=firefox,version=P.Q.R,maxInstances=10,platform=WINDOWS" -browser "browserName=chrome,version=X.Y.Z,maxInstances=20,platform=WINDOWS" -maxSession 2
  • Grid Console Snapshot:

maxSession

Solution 4 - Selenium

MaxInstances: this gives you more slots per node, For example, MaxInstances=5 will allow a maximum of 5 browsers per node

MaxSession: sets the maximum amount of tests that can run at the same time in a node. if MaxInstances=5, then MaxSession should also be at least 5.

see more at https://github.com/SeleniumHQ/docker-selenium

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChristian ClarkeView Question on Stackoverflow
Solution 1 - SeleniumAnuragh27cronyView Answer on Stackoverflow
Solution 2 - SeleniumPixelMasterView Answer on Stackoverflow
Solution 3 - Seleniumundetected SeleniumView Answer on Stackoverflow
Solution 4 - SeleniumTerefeView Answer on Stackoverflow