2013-02-20 11 views
5

Pomyślnie skonfigurowałem SeleniumGrid do uruchamiania testów w języku Python na wielu komputerach z różnymi systemami operacyjnymi i przeglądarkami. Jednak wciąż muszę napisać ten sam test 3 razy, raz dla każdego węzła, ponieważ odwołanie do węzła znajduje się w teście.Jak skonfigurować skrzynkę testową Selenium Grid Python do testowania na wielu komputerach?

Przyjrzałem się wszelkim sugestiom online dotyczącym Pythona, np. oddzielny węzeł przeskakuje do zewnętrznych plików i importuje je do testowego przypadku, ale żaden z nich nie działa lub instrukcje dotyczą Javy.

Z tym jednym z Mozilli, nie jestem pewien, jak ustawić ten plik z moich testów/jak go uruchomić: http://viewvc.svn.mozilla.org/vc/projects/sumo/tests/frontend/python_tests/suite_sumo.py?view=markup

Jak mogę ustawić Pythona przypadków testowych tak, ja tylko pisać pewnego razu?

Moje polecenie Hub szybka instrukcja jest:

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

Moi Węzły Command Prompt instrukcje:

*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 

mojego testu Case Command Prompt instrukcje:

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 

mojego testu Sprawa jest:

# 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()) 
+0

Dlaczego po prostu nie włożyć powtórnego kodu testowego do działania? def someRepeatTest (webdriver): # twoje linie kodu idą tutaj ... –

Odpowiedz

1

zamiast przekazywać argumenty do przeglądarki i platformy za pośrednictwem połączenia powłoki, można mieć skrypt Pythona odczytać plik konfiguracyjny. Zasadniczo masz plik konfiguracyjny zawierający listę przeglądarek, które chcesz uruchamiać wraz z listą platform.

Sztuką jest to, że musisz mieć plik pakietu wyższego poziomu, który wywoła inne testy z każdą kombinacją. Tak więc, będziesz miał plik pakietu, który odpytuje ten plik konfiguracyjny dla kombinacji przeglądarki i platformy, wykonując pakiety z różnymi kombinacjami.

Można nawet równolegle wykonać test, jeśli istnieje obsługa wielu wątków w Pythonie.

Na przykład w Ruby, czytałbym moją konfigurację z pliku .yml, a następnie wykonuję połączenia rake w wielu wątkach z każdą kombinacją platformy przeglądarki.

2

Udało mi się przetestować dwie przeglądarki jednocześnie za pomocą modułu nose_parameterized. (Nie trzeba używać zawodnik testowy nos użyć modułu nose_parameterized.)

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] 
     # [...] 

Aby użyć selen siatka, jak Twoje pytanie pyta, po prostu zmienić webdrivers dostosowane.

+0

Jak możesz "pomyślnie skonfigurować SeleniumGrid do uruchomienia moich testów Pythona", pomóż mi z moim problemem tutaj https://stackoverflow.com/q/45127482/ 248616. Wielkie dzięki! –

Powiązane problemy