Выйти из экземпляра драйвера в pytest после выполнения всех тестов - PullRequest
0 голосов
/ 09 сентября 2018

Ниже приведен класс pytest, используемый для запуска 2 тестов. Хотите выйти из драйвера после выполнения обоих тестов. использовал Teardown, но он завершает работу драйвера после каждого выполнения теста

class FlightTest(unittest.TestCase):

        driver = webdriver.Chrome(direct_path+'/resources/chromedriver.exe')
        startup = StartUpPage(driver)
        register = RegisterPage(driver)

        def test_flight_registration(self):
            dat = self.json_reader.read_from_file("testdata.json")
            self.startup.navigate_to_url(dat['url'])\
                        .click_on_register_button()
            self.register.create_user(dat['uid'], dat['pwd'], dat['con_pwd'])

        def test_flight_sign_in(self,):
            dat = self.json_reader.read_from_file("testdata.json")
            self.startup.click_sign_in_link()

        def tearDown(self):
            self.driver.quit()

1 Ответ

0 голосов
/ 09 сентября 2018

В терминах unittest необходимо использовать методы класса setUpClass и tearDownClass:

class FlightTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls)
        cls.driver = webdriver.Chrome()
        cls.startup = StartUpPage(driver)
        cls.register = RegisterPage(driver)

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    ...

В терминах pytest вы бы создали прибор с классовой областью :

import pytest

@pytest.fixture(scope="class")
def driver(request):
    # code before 'yield' is executed before the tests
    request.cls.driver = webdriver.Chrome()
    request.cls.startup = StartUpPage(request.cls.driver)
    request.cls.register = RegisterPage(request.cls.driver)
    yield
    # code after 'yield' is executed after the tests
    request.cls.driver.quit()


@pytest.mark.usefixtures('driver')
class FlightTest(unittest.TestCase):

    def test_spam(self):
        self.driver.get('https://www.google.de')

    def test_eggs(self):
        self.driver.get('https://www.facebook.com')

Еще лучшим решением было бы использование свойства менеджера контекста веб-драйвера, поэтому оно автоматически закрывается независимо от того, что:

import pytest

@pytest.fixture(scope="class")
def driver(request):
    with webdriver.Chrome() as driver:
        request.cls.driver = driver
        request.cls.startup = StartUpPage(driver)
        request.cls.register = RegisterPage(driver)
        yield


@pytest.mark.usefixtures('driver')
class FlightTest(unittest.TestCase):

    def test_spam(self):
        self.driver.get('https://www.google.de')

    def test_eggs(self):
        self.driver.get('https://www.facebook.com')
...