用sqlite运行django测试

时间:2011-06-15 04:46:27

标签: django django-testing

我使用Postgres进行生产和开发,但我想使用sqlite来运行一些测试。我没有看到一种简单的方法来配置一个引擎用于测试,另一个用于开发/生产。我错过了什么吗?

4 个答案:

答案 0 :(得分:41)

在您的设置中添加以下行:

import sys
if 'test' in sys.argv or 'test_coverage' in sys.argv: #Covers regular testing and django-coverage
    DATABASES['default']['ENGINE'] = 'django.db.backends.sqlite3'

确保您的实际数据库设置在他们之前。

答案 1 :(得分:6)

这不是一个直接的答案,但是,是的,你错过了一个大问题 - 在SQLite上测试Postgres应用程序很棘手 - 它们如此不同。我建议你创建一个ram-disk(例如使用tmpfs)并在那里创建你的Postgres测试数据库。它不会像SQLite一样快,但可能比存储在HDD上的常规Postgres数据库快一个数量级。

答案 2 :(得分:3)

您可以尝试类似于Zachary Voase建议的设置:   http://blog.zacharyvoase.com/2010/02/03/django-project-conventions/

(整个帖子很有用,但请向下滚动到“设置”部分,了解与此处最相关的部分。)

Zach的策略是创建一个设置文件夹,并使用__init__.py文件将其标记为python包。然后,您可以为每种部署类型提供单独的子模块,结构如下:

settings/
|-- __init__.py     # Empty; makes this a Python package
|-- common.py       # All the common settings are defined here
|-- development.py  # Settings for development
|-- production.py   # Settings for production
|-- staging.py      # Settings for staging

遵循此概念,您可以为postgres设置部署并为sqlite设置单独部署,并根据需要分别为每个部署配置。

答案 3 :(得分:0)

我建议您在运行-k时使用--keepdbmanage.py test -Flag并执行以下设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'DBNAME',
        'USER': 'DBNAME',
        'PASSWORD': 'DBNAME',
        'HOST': 'localhost',
        'PORT': '',
        'TEST': {
            'NAME': 'DBNAME_test',
        }
    },
}

在我使用Django == 1.11的设置中,它就像一个魅力。祝你好运!