仅在运行pytest

时间:2019-07-24 19:32:22

标签: python django pytest pytest-django

我有一个测试,尝试在登录Django应用程序的地方运行:

class FirefoxTestCases(StaticLiveServerTestCase):
    def setUp(self):
        data_setup.basic_apps_setup(self)
        self.browser = webdriver.Firefox()

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

    def test_log_in_with_no_apps_displays_firefox(self):
        # Opening the link we want to test
        self.browser.get(self.live_server_url)
        assert "log in" in self.browser.page_source
        time.sleep(2)
        self.browser.find_element_by_id("id_username").send_keys("userone")
        self.browser.find_element_by_id("id_password").send_keys("test")
        self.browser.find_element_by_id("log_in").click()
        time.sleep(2)
        # Check the returned result
        assert "Something appears to be missing" in self.browser.page_source

这样做-实际上不允许登录,因为在我的设置中,我具有特定的ALLOWED_HOSTS设置。

运行此测试时是否可以访问ALLOWED_HOSTS设置,以便在测试时允许登录?

1 个答案:

答案 0 :(得分:2)

问题是在settings.py中设置了SESSION_COOKIE_DOMAIN

例如:

SESSION_COOKIE_DOMAIN = ".company.com"

Django LiveServerTestCase仅执行localhost(据我所知是不可更改的)。因此,localhost的网站无法识别登录的用户Cookie

为了解决此问题-对于需要交互性(例如登录)的测试,您可以像这样override that setting

from django.test.utils import override_settings
...

...
@override_settings(SESSION_COOKIE_DOMAIN="")
def test_log_in_with_no_apps_displays_firefox(self):
    # Opening the link we want to test
    self.browser.get(self.live_server_url)
    assert "log in" in self.browser.page_source
    time.sleep(2)
    self.browser.find_element_by_id("id_username").send_keys("userone")
    self.browser.find_element_by_id("id_password").send_keys("test")
    self.browser.find_element_by_id("log_in").click()
    time.sleep(2)
    # Check the returned result
    assert "Something appears to be missing" in self.browser.page_source

此测试将覆盖该设置,并且用户将能够成功登录而不会出现问题。

由于Cookie问题,网站通常具有的所有其他功能现在已解决。