Ich habe SeleniumGrid erfolgreich eingerichtet, um meine Python-Tests auf mehreren Computern mit unterschiedlichen Betriebssystemen und Browsern auszuführen. Allerdings muss ich immer noch dreimal den gleichen Testfall schreiben, einmal für jeden Knoten, weil der Verweis auf den Knoten innerhalb des Testfalls liegt.Wie richte ich einen Selenium Grid Python-Testfall ein, um ihn auf mehreren Rechnern zu testen?
Ich habe mir alle möglichen Online-Vorschläge für Python angesehen. Trennen von Knoten in externe Dateien und importieren diese in den Testfall, aber keiner von ihnen scheint zu funktionieren oder die Anweisungen sind für Java.
Mit diesem einem von Mozilla, ich bin nicht sicher, wie ich diese Datei mit meinem Testfall einrichten/wie es läuft: http://viewvc.svn.mozilla.org/vc/projects/sumo/tests/frontend/python_tests/suite_sumo.py?view=markup
Wie kann ich eine Python Testfall einrichten, so dass nur ich es schreiben Einmal?
My Hub Eingabeaufforderung Befehl:
java -jar selenium-server-standalone-2.29.0.jar -host http://localmachineipaddress -port 4444 -role hub
Meine Knoten-Eingabeaufforderung Befehle sind:
*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
Mein Test Case-Eingabeaufforderung Befehle sind:
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
Mein Testfall ist:
# 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())
Warum nicht einfach den wiederholten Testcode in Funktion bringen, z.B. def someRepeatTest (webdriver): #Ihre Codezeilen gehen hier ... –