一尘不染

如何仅在内存中运行Django的测试数据库?

django

我的Django单元测试需要很长时间才能运行,因此我正在寻找加快速度的方法。我正在考虑安装SSD,但我也知道它也有缺点。当然,我的代码可以做一些事情,但是我正在寻找结构上的修复方法。由于每次都需要重建/向南迁移数据库,因此即使运行单个测试也很慢。所以这是我的主意

由于我知道测试数据库总是很小,所以为什么不能仅将系统配置为始终将整个测试数据库保留在RAM中?绝对不要触摸磁盘。如何在Django中进行配置?我宁愿继续使用MySQL,因为这是我在生产中使用的方式,但是如果使用SQLite 3或其他方法可以简化这一点,我会采用这种方式。

SQLite或MySQL是否可以选择完全在内存中运行?应该可以配置RAM磁盘,然后配置测试数据库以将其数据存储在其中,但是我不确定如何告诉Django / MySQL为特定数据库使用其他数据目录,尤其是因为它不断被删除并重新创建每次运行。(我在Mac FWIW上。)


阅读 591

收藏
2020-03-28

共1个答案

一尘不染

如果在运行测试时将数据库引擎设置为sqlite3,则Django将使用内存数据库。

settings.py在运行测试时使用类似的代码将引擎设置为sqlite:

if 'test' in sys.argv:
    DATABASE_ENGINE = 'sqlite3'

或在Django 1.2中:

if 'test' in sys.argv:
    DATABASES['default'] = {'ENGINE': 'sqlite3'}

最后在Django 1.3和1.4中:

if 'test' in sys.argv:
    DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}

(到Django 1.3并不一定要有完整的后端路径,但是可以使设置向前兼容。)

你还可以添加以下行,以防南向迁移出现问题:

    SOUTH_TESTS_MIGRATE = False
2020-03-28