LiveServerTestCase - settings.Database配置不正确

时间:2015-09-16 07:04:13

标签: python django python-3.x selenium testing

我正在尝试设置LiveServerTestCase。

为此,我使用

在我的测试类中创建用户
class ExampleTest(LiveServerTestCase):
    user = User.objects.create_superuser('Testuser','test@user.com','1234')
    user.save()
.
.
.(rest of the test)

如果没有这一行,服务器和测试就会启动,但很明显它无法登录,因为之前没有创建用户。

但是这条线我得到了

 django.core.exceptions.ImproperlyConfigured: settings.DATABASES
 is improperly configured. Please supply the NAME value.

错误。

我是否需要在settings.py中为LiveServerTestCase设置服务器,如果是,请使用哪些值或在哪里找到它们?

更新:

我用

运行此测试
python manage.py test

所以它设置了一个数据库本身,我不必在settings.py中定义,或者我错了。

UPDATE2:

我已经定义了一个'生产'数据库(在我问问题之前),它看起来像这样:

DATABASES = {
 'default': {
     'ENGINE': 'django.db.backends.postgresql_psycopg2',
     'HOST': 'localhost',  # 10.1.2.41
     'NAME': 'pim_testdatabase',
     'USER': 'postgres',
     'PASSWORD': '1234',
     'PORT': '5432',
     'HAS_HSTORE': True,
     'TEST':{
             'NAME': 'test_pim_testdatabase'
      },
  },
}

仍然出现例外。

2 个答案:

答案 0 :(得分:1)

您需要在DATABASES设置中设置数据库。

  

Django设置了与每个数据库对应的test database   在设置文件的DATABASES定义中定义。

     

默认情况下,测试数据库通过预先test_来获取其名称   NAME中定义的数据库的DATABASES设置的值。

如果要使用其他数据库名称,请在NAME字典中为TEST中的任何给定数据库指定DATABASES

示例测试数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'USER': 'mydatabaseuser',
        'NAME': 'mydatabase',
        'TEST': { # test database settings
            'NAME': 'mytestdatabase', # test database name
        },
    },
}

答案 1 :(得分:1)

问题是您是在类定义中创建用户。这在加载测试类时,在创建数据库之前运行。

class ExampleTest(LiveServerTestCase):
    user = User.objects.create_superuser('Testuser','test@user.com','1234')
    user.save()  # This save isn't required -- it has been saved already

您可以通过将用户创建移动到单个测试中来解决问题。然后,在创建数据库之后运行测试方法时将创建用户。

class ExampleTest(LiveServerTestCase):
    def test_user(self):
        self.user = User.objects.create_superuser('Testuser','test@user.com','1234')
        ...

Django 1.8有一个setUpTestData方法,您可以为整个测试用例设置一次初始数据。这样更快,重复性更低。

class ExampleTest(LiveServerTestCase):
    @classmethod
    def setUpTestData(cls):
        # Set up data for the whole TestCase
        self.user = User.objects.create_superuser('Testuser','test@user.com','1234')

    def test_user(self):
        # access the user with self.user
        ...

在早期版本的Django中没有setUpTestData,您可以使用setUp方法创建用户。

class ExampleTest(LiveServerTestCase):
    def setUp(self):
        self.user = User.objects.create_superuser('Testuser','test@user.com','1234')