簡體   English   中英

Django 功能性 LiveServerTestCase - 使用 selenium 提交表單后,對象保存到非測試數據庫

[英]Django functional LiveServerTestCase - After submitting form with selenium, objects save to non-test database

完全失去了我的大腦。 我不明白為什么會這樣。 每次運行此測試時,對象都會保存到正常的非測試數據庫中。 然而,無論如何,測試結束時的兩個斷言都失敗了,說他們在數據庫中找不到任何用戶,即使每次測試運行我都必須進入管理員刪除它在本地主機上創建的對象。 我在我的設置中使用 SQLITE3,我知道 SQLITE 測試應該在內存中運行,而不是訪問數據庫。 我已經搜索並搜索了,但在網絡上找不到任何有用的信息。 下面是測試函數:

 import time
import datetime

from django.test import TestCase, LiveServerTestCase
from django.core.urlresolvers import resolve
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from django.contrib.auth.models import User

from apps.registration.forms import RegistrationForm

class NewVisitorTest(LiveServerTestCase):

    def setUp(self):
        self.browser = webdriver.Firefox()
        self.browser.implicitly_wait(3)

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

    def test_registration_process(self):

        # Goes to registration page

        self.browser.get('http://localhost:8000/register/')

        # User can find sign up form
        registration_form = self.browser.find_element_by_id('id_registration_form')

        # User can fill out sign up form
        first_name_input = self.browser.find_element_by_id('id_first_name')
        first_name_input.send_keys('Jim')

        last_name_input = self.browser.find_element_by_id('id_last_name')
        last_name_input.send_keys('Barrow')

        date = datetime.date.today()
        date_input = self.browser.find_element_by_id('id_birthday')
        date_input.send_keys(str(date))

        username_input = self.browser.find_element_by_id('id_username')
        username_input.send_keys('jim_barrow')

        password_input = self.browser.find_element_by_id('id_password')
        password_input.send_keys('kittensarecute')

        password_1_input = self.browser.find_element_by_id('id_password1')
        password_1_input.send_keys('kittensarecute')

        email_input = self.browser.find_element_by_id('id_email')
        email_input.send_keys('jim_barrow@gmail.com')

        # User can submit sign up form
        registration_form.submit()

        # User is now registered as a user object
        users = User.objects.all()
        self.assertEqual(len(users), 1)

        # User is now registered as a person object
        persons = Person.objects.all()
        self.assertEqual(len(persons), 1)

if __name__ == '__main__':
    unittest.main()

如果我可以提供任何其他上下文,我會很樂意向您展示。 這實際上是一個空白項目,因此 settings.py 中沒有任何奇怪或不尋常的設置可能會混淆。 任何幫助將不勝感激。

根據LiveServerTestCase docs ,默認情況下,實時服務器位於端口 8081 上。 但是,您是從端口 8000 獲取頁面。

我希望您在端口 8000 上運行開發服務器並且您的測試正在連接到它,因此您的新對象出現在非測試數據庫中。 您需要更改代碼以從端口 8081 獲取頁面。

快速更新:

從 Django 1.11 開始,LiveServerTestCase 設置的服務器使用本地主機分配的任何空閑端口,而不僅僅是 8081。

您可以根據文檔使用self.live_server_url訪問實時服務器 URL 和端口

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM