【问题标题】:How can I run Selenium tests against a test database?如何针对测试数据库运行 Selenium 测试?
【发布时间】:2012-02-19 23:31:09
【问题描述】:

我喜欢在提交之前运行测试。 我是 Selenium 的新手,我不明白如何运行测试而不更改数据库。

我的本​​地数据库有几十个相同的已发布问题。

有什么方法可以让我运行这些测试而不让数据库在拆卸时恢复到其原始状态?

from selenium import webdriver  
from django.utils import unittest  
from selenium.webdriver.support.ui import WebDriverWait  

class TestAuthentication(unittest.TestCase):  
    scheme = 'http'  
    host = 'localhost'  
    port = '4444'  


    def setUp(self):  
        self._driver = webdriver.Firefox()  
        self._driver.implicitly_wait(5)  

    def login_as_Bryan(self):  
        self._driver.get('http://localhost:8000/account/signin/')  
        user = self._driver.find_element_by_id('id_username')  
        user.send_keys("Bryan")  
        password = self._driver.find_element_by_id('id_password')  
        password.send_keys('***************')  
        submit = self._driver.find_element_by_id('blogin')  
        submit.click()  

    def test_user_should_be_able_to_login_manually(self):  
        self.login_as_Bryan(self)  
        message = self._driver.find_element_by_class_name('darkred')  
        self.assertEqual("Welcome back Bryan, you are now logged in", message.text)  

    def test_Bryan_can_post_question(self):  
        self.login_as_Bryan()   
        self._driver.find_element_by_link_text("ask a question").click()  
        self._driver.find_element_by_id('id_title').send_keys("Question should succeed")  
        self._driver.find_element_by_id('editor').send_keys("This is the body text.")  
        self._driver.find_element_by_id('id_tags').send_keys("test")  
        self._driver.find_element_by_class_name("submit").click()  
        self.assertTrue(self._driver.find_element_by_link_text("Question should succeed"))  

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

【问题讨论】:

    标签: django unit-testing selenium


    【解决方案1】:

    问题不在于 Selenium,而在于您的执行环境。这取决于您如何启动应用程序。

    通常,您需要引导您的应用程序启动,以便它指向一个临时数据库,仅在该测试期间使用。测试执行后,您应该删除该数据库。

    或者,您可以在您的实际网站中提供一种 UI 机制来清除/刷新测试数据库。在这种情况下,您仍然需要一个测试数据库,但您不需要在每次测试执行时都删除/重新创建它。

    【讨论】:

      【解决方案2】:

      你可以使用django-selenium,它在测试数据库上运行测试

      【讨论】:

      • 虽然这在当时是正确答案,但根据链接上的说明,该库已不再用于 Django > 1.5。
      猜你喜欢
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多