Можно ли войти один раз для всех LiveServerTestCases?

#python #selenium #liveservertestcase

#python #selenium #liveservertestcase

Вопрос:

Я хотел бы сделать что-то вроде этого:

 class TestSuite(LiveServerTestCase):

    @classmethod
    def setUp(self):
        self.driver = webdriver.Chrome()
        
        # Login User
        self.driver.get(self.live_server_url   '/somesite/login/')
        self.driver.find_element(By.ID, "username").click()
        self.driver.find_element(By.ID, "username").send_keys("foo")
        self.driver.find_element(By.ID, "password").click()
        self.driver.find_element(By.ID, "password").send_keys("bar")
        self.driver.find_element(By.ID, "login_button").click()
        # Redirects to home page
    
    @classmethod
    def tearDown(self):
        self.driver.quit()

    def test_foo(self):
        # Do some clicking with already logged in user from home page

    def test_bar(self):
        # Do some clicking with already logged in user from home page
  

Я просто чувствую, что неэффективно вызывать setUp() в каждом тестовом примере.

Любая помощь была бы оценена, спасибо…

Ответ №1:

итак, перейдите setUp из TestSuite в LiveServerTestCase класс

Комментарии:

1. чтобы улучшить ответ, пожалуйста, дайте некоторое объяснение причины, по которой это устраняет проблему

2. спасибо @olli_kahn за ваш вклад. Я не хочу связываться со сторонними модулями, но, если я вас правильно понимаю, путем расширения LiveServerTestCase ; это должно сработать. Так будет super() работать в этом случае? Если да, то как бы я это реализовал?

Ответ №2:

Я ненавижу отвечать на свой собственный вопрос… но у меня получилось благодаря расширению подсказки olli_kahn LiveServerTestCase .

Шаги:

  • Используйте setUpClass / tearDownClass (не setUp / tearDown )
  • Объявите setUpClass / tearDownClass как @classmethods (ставьте @classmethod первым, если используете больше декораторов)
  • Используйте super() для расширения LiveServerTestCase
  • Используйте cls вместо self for @classmethod ‘s для соответствия PEP8

Полный код:

 class TestSuite(LiveServerTestCase):

    @classmethod
    def setUpClass(cls):
        super(TestSuite, cls).setUpClass()

        cls.driver = webdriver.Chrome()
        
        # Login User
        cls.driver.get(cls.live_server_url   '/somesite/login/')
        cls.driver.find_element(By.ID, "username").click()
        cls.driver.find_element(By.ID, "username").send_keys("foo")
        cls.driver.find_element(By.ID, "password").click()
        cls.driver.find_element(By.ID, "password").send_keys("bar")
        cls.driver.find_element(By.ID, "login_button").click()
        # Redirects to home page
    
    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()
        super(TestSuite, cls).tearDownClass()

    def test_foo(self):
        # Do some clicking with already logged in user from home page

    def test_bar(self):
        # Do some clicking with already logged in user from home page