How to set up a Selenium Grid Python test case to test multiple machines?

I have successfully configured SeleniumGrid to run my Python tests on multiple computers with different OS and browsers. However, I still have to write the same test case 3 times, once for each node, because the link to the node is inside the test case.

I looked at all kinds of online offers for Python, for example. separating node, they go into external files and import them into a test case, but none of them work or instructions for Java.

With this from Mozilla, I'm not sure how to install this file with my test cases / how to run it: http://viewvc.svn.mozilla.org/vc/projects/sumo/tests/frontend/python_tests/suite_sumo.py?view = markup

How to install Python test cases, so I only write once?

My Hub command line instruction:

java -jar selenium-server-standalone-2.29.0.jar -host http://localmachineipaddress -port 4444 -role hub 

My Nodes command line instructions:

 *FireFox PC, Chrome PC, Safari PC, and IE9 PC on local machine* java -jar selenium-server-standalone-2.29.0.jar -host localhost -role webdriver -hub http://theHubIP:4444/grid/register -port 5555 -browser browserName=firefox,maxInstances=5,platform=WINDOWS -browser browserName=chrome,maxInstances=5,platform=WINDOWS -Dwebdriver.chrome.driver=c:\SeleniumGrid\chromedriver.exe -browser browserName=iehta,maxInstances=5,platform=WINDOWS -Dwebdriver.ie.driver=c:\SeleniumGrid\IEDriverServer.exe -browser browserName=safari,maxInstances=5,platform=WINDOWS -Dwebdriver.safari.driver=c:\Python27\SafariDriver2.28.0.safariextz *FireFox MAC, Safari MAC, and Chrome MAC machine* java -jar selenium-server-standalone-2.29.0.jar -role webdriver -hub http://theHubIP:4444/grid/register -debug -port 5556 -browser browserName=firefox,maxInstances=5,platform=MAC -browser browserName=chrome,maxInstances=5,platform=MAC -browser browserName=safari,maxInstances=5,platform=MAC -Dwebdriver.safari.driver=c:\Python27\SafariDriver2.28.0.safariextz *IE8 PC machine* java -jar selenium-server-standalone-2.29.0.jar -role webdriver -hub http://theHubIP:4444/grid/register -port 5559 -browser browserName=iehta,maxInstances=5,platform=WINDOWS -Dwebdriver.ie.driver=c:\SeleniumGrid\IEDriverServer.exe 

My Test Case command line instructions:

 python Python27/Test_Cases/SeleniumTest.py 5555 firefox WINDOWS python Python27/Test_Cases/SeleniumTest.py 5555 chrome WINDOWS python Python27/Test_Cases/SeleniumTest.py 5555 iehta WINDOWS python Python27/Test_Cases/SeleniumTest.py 5555 safari WINDOWS python Python27/Test_Cases/SeleniumTestIE8.py 5559 iehta WINDOWS python Python27/Test_Cases/SeleniumTestApple.py 5556 chrome MAC python Python27/Test_Cases/SeleniumTestApple.py 5556 firefox MAC python Python27/Test_Cases/SeleniumTestApple.py 5556 safari MAC 

My test case:

 # coding: utf-8 from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys import HTMLTestRunner import unittest, time import sys class SeleniumTest1(unittest.TestCase): def setUp(self): self.driver = webdriver.Remote(command_executor="http://theNodeIP:5555/wd/hub",desired_capabilities={ "browserName": browser, "platform": platform, "node":node }) self.driver.implicitly_wait(2) def mytest(self): self.driver.get("http://url.com") self.driver.find_element_by_css_xpath("test_some_stuff").click() def tearDown(self): self.driver.quit() def suite(): s1 = unittest.TestLoader().loadTestsFromTestCase(SeleniumTest1) return unittest.TestSuite([s1]) def run(suite, report = "C:\\Python27\\Test_Cases\\Reports\\SeleniumTest1.html"): with open(report, "w") as f: HTMLTestRunner.HTMLTestRunner( stream = f, title = 'SeleniumTest1', verbosity = 2, description = 'SeleniumTest1' ).run(suite) if __name__ == "__main__": args = sys.argv node=args[1] browser = args[2] platform = args[3] run(suite()) 
+6
source share
2 answers

I was able to immediately check two browsers using the nose_parameterized module. (You do not need to use a nasal test drive to use the nose_parameterized module).

 from django.test import LiveServerTestCase from nose_parameterized import parameterized from selenium import webdriver class UITest(LiveServerTestCase): def setUp(self): self.selenium = { 'chrome': webdriver.Chrome(), 'firefox': webdriver.Firefox(), } def tearDown(self): for browser in self.selenium: self.selenium[browser].quit() testdata = [ ('chrome',), ('firefox',), ] @parameterized.expand(testdata) def test_something(self, browser): driver = self.selenium[browser] # [...] 

To use the Selenium Grid as your question asks a question, just change the webdrivers.

+2
source

Instead of passing arguments to the browser and platform through a shell call, you can use a Python script to read the configuration file. Essentially, you will have a configuration file that lists the browsers you want to run along with the list of platforms.

The trick is that you need a higher level file that will trigger other tests with each combination. Thus, you will have a package file that polls this configuration file for browser and platform combinations by executing packages with various combos.

You can even parallelize test execution if Python has support for multiple threads.

For example, in Ruby, I would read my configuration from a .yml file, and then make rake calls on multiple threads with each combination of browser platform.

+1
source

All Articles