SlideShare a Scribd company logo
1 of 24
Selenium Grid
       Kevin Menard
 Maintainer, Selenium Grid
    Founder, Mogotest
What is Selenium Grid?



• Maintain a cluster of Selenium RC servers
• Configure tests for different environments
• Parallelize your tests
How Does it Work?

Selenium Grid Hub      Selenium Grid Node   Selenium RC Server



                       Selenium Grid Node   Selenium RC Server

                       host_a


     Client
      Client           Selenium Grid Node   Selenium RC Server
       Client
        Client

                       host_b
How Does it Work?

Selenium Grid Hub      Selenium Grid Node   Selenium RC Server



                       Selenium Grid Node   Selenium RC Server

                       host_a


     Client
      Client           Selenium Grid Node   Selenium RC Server
       Client
        Client

                       host_b
How Does it Work?

Selenium Grid Hub      Selenium Grid Node   Selenium RC Server



                       Selenium Grid Node   Selenium RC Server

                       host_a


     Client
      Client           Selenium Grid Node   Selenium RC Server
       Client
        Client

                       host_b
Environments

    • Map descriptive names to browser strings
    • Configured in Selenium Grid Hub

hub:
  environments:
     - name:    "linux_firefox_3_6"
       browser: "*firefox /opt/firefox-3.6/firefox-bin"
     - name:    "windows_firefox_3_5"
       browser: "*firefox"
     - name:    "windows_firefox_3_6"
       browser: "*firefox"
Starting the Hub

   • Edit grid_configuration.yml

Rake:
 $ rake hub:start
 $ BACKGROUND=true nohup rake hub:start &>/dev/null



ant:
 $ ant launch-hub
 $ nohup ant launch-hub >> log_file 2>&1
Selenium Grid Console
• Open http://localhost:4444/console
Starting Up a Node
Rake:
 $ rake rc:start
 $ DISPLAY=:99.0 BACKGROUND=true HOST=host_b PORT=5000
 ENVIRONMENT=linux_firefox_3_6 HUB_URL='http://hub_host:4444'
 SELENIUM_ARGS='-ensureCleanSession -noBrowserSessionReuse'
 nohup rake rc:start &>/dev/null



ant:
 $ ant launch-remote-control
 $ DISPLAY=:99.0 nohup ant -Dhost=host_b -Dport=5000
 -Denvironment=linux_firefox_3_6 -DhubURL='http://hub_host:4444'
 -DseleniumArgs='-ensureCleanSession -noBrowserSessionReuse'
 launch-remote-control >> log_file 2>&1
Node Registration
                     1. Node connects to hub
Selenium Grid Node                                        Selenium Grid Hub
                       environment   windows_firefox_3_6
                          host             host_b
                          port             5000
Node Registration
                     1. Node connects to hub
Selenium Grid Node                                            Selenium Grid Hub
                        environment   windows_firefox_3_6
                           host             host_b
                           port             5000




        2. Hub adds node to environment queue
      windows_chrome                                 windows_firefox_3_6
          host_c:5000                                      host_a:5000

      linux_firefox_3_6                                     host_a:5001

          host_d:5000                                      host_b:5000
Available Node in
     Console
Client Connection

• Client connects with environment name as
  browser string
• Hub looks up by environment & reserves a
  node
  • Blocks until one is available
• Client communicates with hub at all times
  • Hub forwards traffic to correct node
Client Connection Code

Old:                                    New:

require 'rubygems'                      require 'rubygems'
require 'selenium/client'               require 'selenium/client'

browser =                               browser =
  Selenium::Client::Driver.new           Selenium::Client::Driver.new 
    :host => 'localhost',                   :host => 'localhost',
    :port => 4444,                          :port => 4444,
    :browser => '*firefox',                 :browser => 'linux_firefox_3_6',
    :url => 'http://mogotest.com/'          :url => 'http://mogotest.com/'

browser.start_new_browser_session       browser.start_new_browser_session
browser.open 'http://mogotest.com/'     browser.open 'http://mogotest.com/'
browser.close_current_browser_session   browser.close_current_browser_session
Makes Testing Simpler


• Client always connects to known
  endpoint
• Hub takes care of browser allocation
• Nodes can be added dynamically
• Hub handles bad nodes
Grid Resiliency


• Hub can send heartbeat requests to node to
  tell if it has gone down
• Hub can gracefully kill idle sessions
• Hub can kill sessions that take too long to
  create
Parallel Testing

• Need a way to execute in parallel
  • Java: TestNG or parallel-jUnit
  • Ruby: DeepTest
  • Python: nose
• Need a way to parameterize your tests for
  each node’s environment
• Your tests must maintain their own state
Shortcomings

• Selenium 1 API compatible only
  • Using an old version of Selenium RC at that
• 1 request per RC
  • Doesn’t scale vertically very well
• Historically has had multi-threaded problems
  • Fixed as of 1.0.8
Selenium Grid’s Future


• Combine Selenium Grid & RC
  • De facto single-node grid
  • Grid available out of the box
• Auto-discovery of other nodes on network
Selenium Grid 2.0

• Proposal on dev list for new grid 2.0
• Project rewrite by François Reynaud
• Supports Selenium 1 & 2 APIs
• Nicer Web interface
• Very extensible with callback points &
  listeners
Selenium Grid 2.0
        Listeners


• Possible uses
 • Priority queue for test execution
 • Stat tracking
 • OS environment preparation
Conclusion

• Selenium Grid is alive and well
 • 4 releases in the last 9 months
• Pushing towards a Selenium 2
  compatible grid
• If you have time, please review the
  proposed new grid code
Resources
Resources

• Project:
  • Source: http://github.com/nirvdrum/selenium-grid
  • Issues: http://selenium.googlecode.com/
  • Blog: http://seleniumhq.wordpress.com/

• Personal:
  • Twitter: @nirvdrum
  • Email: kevin@mogotest.com

More Related Content

What's hot

What's hot (20)

Web application testing with Selenium
Web application testing with SeleniumWeb application testing with Selenium
Web application testing with Selenium
 
Selenium introduction
Selenium introductionSelenium introduction
Selenium introduction
 
Selenium- A Software Testing Tool
Selenium- A Software Testing ToolSelenium- A Software Testing Tool
Selenium- A Software Testing Tool
 
Web Test Automation with Selenium
Web Test Automation with SeleniumWeb Test Automation with Selenium
Web Test Automation with Selenium
 
Selenium
SeleniumSelenium
Selenium
 
Selenium WebDriver training
Selenium WebDriver trainingSelenium WebDriver training
Selenium WebDriver training
 
Introduction to Selenium Web Driver
Introduction to Selenium Web DriverIntroduction to Selenium Web Driver
Introduction to Selenium Web Driver
 
Data driven Automation Framework with Selenium
Data driven Automation Framework with Selenium Data driven Automation Framework with Selenium
Data driven Automation Framework with Selenium
 
QSpiders - Automation using Selenium
QSpiders - Automation using SeleniumQSpiders - Automation using Selenium
QSpiders - Automation using Selenium
 
Selenium
SeleniumSelenium
Selenium
 
Selenium Concepts
Selenium ConceptsSelenium Concepts
Selenium Concepts
 
Introduction to Selenium Automation
Introduction to Selenium AutomationIntroduction to Selenium Automation
Introduction to Selenium Automation
 
Selenium ppt
Selenium pptSelenium ppt
Selenium ppt
 
Selenium WebDriver with C#
Selenium WebDriver with C#Selenium WebDriver with C#
Selenium WebDriver with C#
 
Selenium
SeleniumSelenium
Selenium
 
Automation - web testing with selenium
Automation - web testing with seleniumAutomation - web testing with selenium
Automation - web testing with selenium
 
Automated Web Testing Using Selenium
Automated Web Testing Using SeleniumAutomated Web Testing Using Selenium
Automated Web Testing Using Selenium
 
Automation Testing using Selenium
Automation Testing using SeleniumAutomation Testing using Selenium
Automation Testing using Selenium
 
Introduction to selenium
Introduction to seleniumIntroduction to selenium
Introduction to selenium
 
Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...
Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...
Selenium WebDriver Tutorial For Beginners | What Is Selenium WebDriver | Sele...
 

Similar to Selenium Grid

Introduction to selenium_grid_workshop
Introduction to selenium_grid_workshopIntroduction to selenium_grid_workshop
Introduction to selenium_grid_workshop
seleniumconf
 
Automatically test in WebEx11
Automatically test in WebEx11Automatically test in WebEx11
Automatically test in WebEx11
showgoodjiang
 

Similar to Selenium Grid (20)

Introduction to selenium_grid_workshop
Introduction to selenium_grid_workshopIntroduction to selenium_grid_workshop
Introduction to selenium_grid_workshop
 
How to Dockerize Parallel Execution of Selenium Tests - SQA Days EU, Rgia, La...
How to Dockerize Parallel Execution of Selenium Tests - SQA Days EU, Rgia, La...How to Dockerize Parallel Execution of Selenium Tests - SQA Days EU, Rgia, La...
How to Dockerize Parallel Execution of Selenium Tests - SQA Days EU, Rgia, La...
 
Automatically test in WebEx11
Automatically test in WebEx11Automatically test in WebEx11
Automatically test in WebEx11
 
How to create a multi tenancy for an interactive data analysis
How to create a multi tenancy for an interactive data analysisHow to create a multi tenancy for an interactive data analysis
How to create a multi tenancy for an interactive data analysis
 
Getting Started with Dockerization of Selenium Tests Execution - Testwarez 2019
Getting Started with Dockerization of Selenium Tests Execution - Testwarez 2019Getting Started with Dockerization of Selenium Tests Execution - Testwarez 2019
Getting Started with Dockerization of Selenium Tests Execution - Testwarez 2019
 
Openstack days sv building highly available services using kubernetes (preso)
Openstack days sv   building highly available services using kubernetes (preso)Openstack days sv   building highly available services using kubernetes (preso)
Openstack days sv building highly available services using kubernetes (preso)
 
Grid Router – scalable and fault tolerant solution for Selenium grid
Grid Router – scalable and fault tolerant solution for Selenium gridGrid Router – scalable and fault tolerant solution for Selenium grid
Grid Router – scalable and fault tolerant solution for Selenium grid
 
Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshop
 
OSGi Community Event 2010 - OSGi Technical Update
OSGi Community Event 2010 - OSGi Technical UpdateOSGi Community Event 2010 - OSGi Technical Update
OSGi Community Event 2010 - OSGi Technical Update
 
Selenium
SeleniumSelenium
Selenium
 
Getting started with Selenium 2
Getting started with Selenium 2Getting started with Selenium 2
Getting started with Selenium 2
 
Scalable Selenium cluster: up and running
Scalable Selenium cluster: up and runningScalable Selenium cluster: up and running
Scalable Selenium cluster: up and running
 
Easy Setup for Parallel Test Execution with Selenium Docker
Easy Setup for Parallel Test Execution with Selenium DockerEasy Setup for Parallel Test Execution with Selenium Docker
Easy Setup for Parallel Test Execution with Selenium Docker
 
Selenium
SeleniumSelenium
Selenium
 
Local development environment evolution
Local development environment evolutionLocal development environment evolution
Local development environment evolution
 
Using MCollective with Chef - cfgmgmtcamp.eu 2014
Using MCollective with Chef - cfgmgmtcamp.eu 2014Using MCollective with Chef - cfgmgmtcamp.eu 2014
Using MCollective with Chef - cfgmgmtcamp.eu 2014
 
How to configure a hive high availability connection with zeppelin
How to configure a hive high availability connection with zeppelinHow to configure a hive high availability connection with zeppelin
How to configure a hive high availability connection with zeppelin
 
Selenium - Introduction
Selenium - IntroductionSelenium - Introduction
Selenium - Introduction
 
Selenium - Introduction
Selenium - IntroductionSelenium - Introduction
Selenium - Introduction
 
Selenium grid workshop london 2016
Selenium grid workshop london 2016Selenium grid workshop london 2016
Selenium grid workshop london 2016
 

Recently uploaded

Recently uploaded (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 

Selenium Grid

  • 1. Selenium Grid Kevin Menard Maintainer, Selenium Grid Founder, Mogotest
  • 2. What is Selenium Grid? • Maintain a cluster of Selenium RC servers • Configure tests for different environments • Parallelize your tests
  • 3. How Does it Work? Selenium Grid Hub Selenium Grid Node Selenium RC Server Selenium Grid Node Selenium RC Server host_a Client Client Selenium Grid Node Selenium RC Server Client Client host_b
  • 4. How Does it Work? Selenium Grid Hub Selenium Grid Node Selenium RC Server Selenium Grid Node Selenium RC Server host_a Client Client Selenium Grid Node Selenium RC Server Client Client host_b
  • 5. How Does it Work? Selenium Grid Hub Selenium Grid Node Selenium RC Server Selenium Grid Node Selenium RC Server host_a Client Client Selenium Grid Node Selenium RC Server Client Client host_b
  • 6. Environments • Map descriptive names to browser strings • Configured in Selenium Grid Hub hub: environments: - name: "linux_firefox_3_6" browser: "*firefox /opt/firefox-3.6/firefox-bin" - name: "windows_firefox_3_5" browser: "*firefox" - name: "windows_firefox_3_6" browser: "*firefox"
  • 7. Starting the Hub • Edit grid_configuration.yml Rake: $ rake hub:start $ BACKGROUND=true nohup rake hub:start &>/dev/null ant: $ ant launch-hub $ nohup ant launch-hub >> log_file 2>&1
  • 8. Selenium Grid Console • Open http://localhost:4444/console
  • 9. Starting Up a Node Rake: $ rake rc:start $ DISPLAY=:99.0 BACKGROUND=true HOST=host_b PORT=5000 ENVIRONMENT=linux_firefox_3_6 HUB_URL='http://hub_host:4444' SELENIUM_ARGS='-ensureCleanSession -noBrowserSessionReuse' nohup rake rc:start &>/dev/null ant: $ ant launch-remote-control $ DISPLAY=:99.0 nohup ant -Dhost=host_b -Dport=5000 -Denvironment=linux_firefox_3_6 -DhubURL='http://hub_host:4444' -DseleniumArgs='-ensureCleanSession -noBrowserSessionReuse' launch-remote-control >> log_file 2>&1
  • 10. Node Registration 1. Node connects to hub Selenium Grid Node Selenium Grid Hub environment windows_firefox_3_6 host host_b port 5000
  • 11. Node Registration 1. Node connects to hub Selenium Grid Node Selenium Grid Hub environment windows_firefox_3_6 host host_b port 5000 2. Hub adds node to environment queue windows_chrome windows_firefox_3_6 host_c:5000 host_a:5000 linux_firefox_3_6 host_a:5001 host_d:5000 host_b:5000
  • 12. Available Node in Console
  • 13. Client Connection • Client connects with environment name as browser string • Hub looks up by environment & reserves a node • Blocks until one is available • Client communicates with hub at all times • Hub forwards traffic to correct node
  • 14. Client Connection Code Old: New: require 'rubygems' require 'rubygems' require 'selenium/client' require 'selenium/client' browser = browser = Selenium::Client::Driver.new Selenium::Client::Driver.new :host => 'localhost', :host => 'localhost', :port => 4444, :port => 4444, :browser => '*firefox', :browser => 'linux_firefox_3_6', :url => 'http://mogotest.com/' :url => 'http://mogotest.com/' browser.start_new_browser_session browser.start_new_browser_session browser.open 'http://mogotest.com/' browser.open 'http://mogotest.com/' browser.close_current_browser_session browser.close_current_browser_session
  • 15. Makes Testing Simpler • Client always connects to known endpoint • Hub takes care of browser allocation • Nodes can be added dynamically • Hub handles bad nodes
  • 16. Grid Resiliency • Hub can send heartbeat requests to node to tell if it has gone down • Hub can gracefully kill idle sessions • Hub can kill sessions that take too long to create
  • 17. Parallel Testing • Need a way to execute in parallel • Java: TestNG or parallel-jUnit • Ruby: DeepTest • Python: nose • Need a way to parameterize your tests for each node’s environment • Your tests must maintain their own state
  • 18. Shortcomings • Selenium 1 API compatible only • Using an old version of Selenium RC at that • 1 request per RC • Doesn’t scale vertically very well • Historically has had multi-threaded problems • Fixed as of 1.0.8
  • 19. Selenium Grid’s Future • Combine Selenium Grid & RC • De facto single-node grid • Grid available out of the box • Auto-discovery of other nodes on network
  • 20. Selenium Grid 2.0 • Proposal on dev list for new grid 2.0 • Project rewrite by François Reynaud • Supports Selenium 1 & 2 APIs • Nicer Web interface • Very extensible with callback points & listeners
  • 21. Selenium Grid 2.0 Listeners • Possible uses • Priority queue for test execution • Stat tracking • OS environment preparation
  • 22. Conclusion • Selenium Grid is alive and well • 4 releases in the last 9 months • Pushing towards a Selenium 2 compatible grid • If you have time, please review the proposed new grid code
  • 24. Resources • Project: • Source: http://github.com/nirvdrum/selenium-grid • Issues: http://selenium.googlecode.com/ • Blog: http://seleniumhq.wordpress.com/ • Personal: • Twitter: @nirvdrum • Email: kevin@mogotest.com

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. When running headless on *nix you’ll want to set the display value. Xvfb is a great way to do this.\n\nWhen running headless on Windows you’ll want to set up VNC so the window session remains active (RDP won’t work).\n\nThe HOST value must be a routable host from the hub’s point of view. Unless you’re running the hub and the node on the same machine, this value should not be “localhost.”\n\nThe hub URL must not end in a “/”, otherwise the node will fail to register. Yes, this is not a proper URL.\n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. Since Selenium RC Server works over HTTP, you could maintain your own list of known servers and parameterize your tests accordingly, but grid affords additional benefits.\n
  25. \n
  26. Some people are doing this with Hudson.\n\nI’m running tests using resque as an asynchronous job queuing system.\n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n