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

Как запускать тесты на разных браузерах Selenium + Python.

pytest
pycharm
python
selenium
webdriver
Теги: #<Tag:0x00007f7b64c2ca40> #<Tag:0x00007f7b64c2c900> #<Tag:0x00007f7b64c2c7c0> #<Tag:0x00007f7b64c2c680> #<Tag:0x00007f7b64c2c540>

#1

Подскажите как реализовать запуск тестов Selenium + Python в разных браузерах ( разных версий) - количество браузеров разных версий.
Спасибо.


(Евгений Бухгаммер) #2

Заведене инстанса драйвера Хрома, Мозиллы и т.д. - опирается на текущую версию браузера в системе. Чтобы протестировать разные версии браузеров, я бы предложил в ваших тестах к модулю завести setUp и tearDown методы, в которых вы модулем subprocess(Popen method) запускаете сайлент инсталляцию нужной вам версии браузера (учтите, что пул версий, поддерживаемый конкретно вашей версией селениума ограничен с обоих концов) и ее деинсталляцией.

Тест разных браузеров (Chrome, Mozilla, etc) - решается заведением соотв инстанса webdriver

Пример запуска инсталляции на Виндоуз:

import sys
from subprocess import Popen, PIPE
import unittest

class TestReturnCode(unittest.TestCase):

    def test_a_test_return_code(self):

        p = Popen(["start", r"C:\Users\eugene_wins\Desktop\setup.exe", "-ms" ], stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=True) 
        output, err = p.communicate()
        rc = p.returncode
        self.assertTrue(rc==0, 'Return code is not 0: %s %s' % (rc,err))


if __name__ == '__main__':

    sys.argv = [sys.argv[0], "--failfast", "--verbose"]
    unittest.main()

(rmerkushin) #3

Я бы еще добавил что лучше это делать на снапшоте виртуалки чтобы не удалять браузер каждый раз. Запускаете снапшот, ставите что нужно и поехали! Потом просто тушится машина и все заново. :smile:


(Евгений Бухгаммер) #4

Выбор, что больше подойдет, зависит от того, какие это виртуальные машины, и насколько критичен процесс тестирования к оверхеду по времени на такие “сервисные” задачи, как реверт снепшотов. Контекст будет чище, чем инсталляция\деинсталляция в пределах одной системы, это безусловно.

Если исключить шаг деинсталляции, то на примере VMWare Workstation должно быть что-то вроде такого:

# using VMWare Workstation API

from pysphere import VIServer
server = VIServer()
server.connect("127.0.0.1","user","123123")  # connecting to the machine with installed VMWare Workstation
win7 = server.get_vm_by_name("Win_7")     # getting virtual machine object
win7.revert_to_named_snapshot("before_browser_install")

Т.е. если вы тестируете на виртуалках, то практически у каждой технологии есть очень похожий API по реверту снепшотов. Такой код, естественно, должен запускаться снаружи - либо на компьютере, где установлен VMWare (с локалхостом в кач-ве параметра коннекта к серверу, либо с внутрисетевым айпи), либо с любого другого компьютера вашей внутренней сети, где установлен соответствующий модуль-враппер поверх API вашего средства виртуализации (VMWare, VBox, OpenVZ, KVM, etc).


(rmerkushin) #5

Думаю время на поднятие машины из снапшота не будет критичным если только там не один тест :smile:
А переустановка браузеров каждый раз может не хило так подгадить реестр в Windows, что может повлиять на работу браузера.


(Евгений Бухгаммер) #6

Я предпочитаю эксперементировать в таких случаях. Если продукт веб приложение в браузере - совсем не плохо иметь знание насчет того, что именно множественная деинсталляция делает. Это не прямая забота тестов, но неизбежно хорошая вещь, которой стоит отдавать отчет и принимать во внимание.

Например, можно подружиться с замечательными утилитами sysinternals, чтобы знать, как регрессионно от версии к версии браузеры меняют свою файловую структуру и вообще ведут себя в системе.

В моем поле деятельности следить даже не за своими программами нужно :slight_smile: Слепки реестра и списки временных файлов. Новые драйвера, etc.