使用内存中的SQLite数据库运行Django

7

我正在使用Robot Framework进行验收测试。

为了启动django服务器,我从Robot Framework中运行python manage.py runserver命令。之后,我调用python manage.py migrate。但是,由于没有使用内存数据库,测试非常缓慢。

我尝试创建一个名为testing的新设置文件,并使用以下配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': ':memory:',
    }
}

并在运行时使用此配置设置环境变量DJANGO_SETTINGS_MODULE。

我运行了迁移,然后运行了 runserver,但是数据库不存在。我无法弄清楚原因。如果我使用物理数据库,它可以工作。

我尝试检查Django TestCase如何运行和创建数据库,但是我找不到它。


内存数据库从不存在于磁盘上。 - CL.
我知道。但是 Django 告诉我找不到表,所以它不能工作。 - Carlos Goce
5
我认为迁移和运行服务器在不同的进程中,因此它们没有使用相同的数据库。 - Carlos Goce
我发现有一些工具可以设置环境和数据库,但我不知道django DiscoverRunner如何使用web服务器。https://docs.djangoproject.com/en/dev/topics/testing/advanced/#testing-utilities 我离成功越来越近了。 - Carlos Goce
2个回答

1
我会尝试在手动调用execute_from_command_line()之前模拟make migrate,这与编写测试用例有关。
因此,我选择的命令是:(如果您不使用poetry,则删除poetry run)。
poetry run ./manage.py test --settings=myproject.settings_test

我将这个命令放入GNUMakefile中,以便我可以使用make test
然后在myproject/settings_test.py文件内:
from .settings import *

ALLOWED_HOSTS = [ '127.0.0.1', ]
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': ':memory:',
    }
}

from django.core.management import execute_from_command_line
execute_from_command_line(['./manage.py', 'migrate'])

0

在测试开始时,您可以使用django.db.connection.creation.create_test_db函数在此处记录,然后在测试完成后调用django.db.connection.creation.destroy_test_db


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接