Python 是否可以为所有LiveServerTestCases登录一次?

Python 是否可以为所有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_elem

我想这样做:

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()效率很低


非常感谢您的帮助……

因此,请将
安装程序
TestSuite
移动到
LiveServerTestCase

我讨厌回答我自己的问题。。。但多亏了奥利·卡恩的提示——扩展
LiveServerTestCase
,我才让它工作起来

步骤:

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
  • 使用
    setUpClass
    /
    tearDownClass
    (而不是
    setUp
    /
    tearDown
  • setUpClass
    /
    tearDownClass
    声明为
    @classmethods
    (如果使用更多装饰器,请将
    @classmethod
    放在第一位)
  • 使用
    super()
    扩展
    LiveServerTestCase
  • 对于
    @classmethod
    ,使用
    cls
    而不是
    self
    ,以符合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

为了改进答案,请解释一下解决问题的原因谢谢@olli_kahn提供的意见。我不想弄乱第三方模块,但如果我理解正确,可以通过扩展
LiveServerTestCase
;它应该会起作用。那么在这种情况下,
super()
会起作用吗?如果是,我将如何实施?