Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Распараллеливание тестов python


(Shestavin) #1

Добрый вечер!

Помогите, пожалуйста разобраться.

Есть тесты написанные на python+webdriver раньше запускал их в eclipse с помощью ctrl+f9.

Естественно встал вопрос о распараллеливании и проверке кросбраузерности верстки. Сделал следующее:

import threading

 

class FirstThread(threading.Thread):
    def run(self):
        CV.brouse = 'ie'
        res = unittest.TestResult()
        suite = unittest.TestLoader().loadTestsFromTestCase(CounterTest)
        suite.run(res)
 
class SecondThread(threading.Thread):
    def run(self):
        CV.brouse = 'ff'
        res = unittest.TestResult()
        suite = unittest.TestLoader().loadTestsFromTestCase(CounterTest)
        suite.run(res)
 
FirstThread().start()
 
SecondThread().start()
...
    def remote_webdriver(self, driver="ch"):
        if not CV.brouse == "": driver = CV.brouse
        if driver == 'ie' : cap = webdriver.DesiredCapabilities().INTERNETEXPLORER 
        if driver == 'ff' : cap = webdriver.DesiredCapabilities().FIREFOX
        if driver == 'ch' : cap = webdriver.DesiredCapabilities().CHROME        
        self._connection = webdriver.Remote(hub, cap)
        return self._connection
...

Браузеры запускаются на хабе он же нод и происходит следующее, значения пишутся два раза в необходимое поле одного браузера, а не двух.

Как сделать, чтобы каждый кейс отрабатывал в своем браузере? При запуске в консоли нода создаются две сессии, почему же при использовании send_keys в разных потоках, команды уходят не в тот браузер?

Спасибо!

 


(Mykhailo Poliarush) #2

1. если у вас пришутся значения в один браузер, то значит что у вам необходимо параллелить запуск вашего браузера

очень похоже на то, что при вызове remote_webdriver метода создается один экземпляр класса

хотя могу ошибаться, так как не вижу всего кода

2. но это не главное, не изобретайте велосипед

используйте nose или py.test там уже все сделано для параллелизации тестов

это очень просто

http://pypi.python.org/pypi/pytest-xdist

https://nose.readthedocs.org/en/latest/doc_tests/test_multiprocess/multiprocess.html

https://nose.readthedocs.org/en/latest/plugins/multiprocess.html?highlight=parallel


(Shestavin) #3

1. Спасибо, за наводку. Синглтон дал трещину ))) Видимо теперь придется, переписывать часть кода, чтобы для каждого браузера был свой класс.

2.  nose или py.test насколько я понимаю поддерживают только python 2.X


(kpx) #4

нет, py.test поддерживается для Python 2.4-3.3, Jython, PyPy

 http://pytest.org/latest/getting-started.html


(Mykhailo Poliarush) #5

ну потому я тебе говорю, что не стоит изобретать велосипед :)

надеюсь у тебя все получилось


(Mykhailo Poliarush) #6

nose в том числе поддерживает версию 3.х


(Shestavin) #7

Спасибо, и действительно все просто. Распараллеливает как два отдельных приложения и синглтоны не помеха.