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

问题:

我的Django单元测试需要很长时间才能运行,所以我正在寻找加快速度的方法。我正在考虑安装SSD,但我知道这也有其缺点。当然,我可以使用我的代码,但我正在寻找一个结构性的修复。即使运行单次测试也是缓慢的,因为数据库需要每次重建/南迁移。所以这是我的想法…
由于我知道测试数据库总是很小的,为什么我不能配置系统来始终将整个测试数据库保存在RAM中?切勿碰到磁盘。如何在Django中进行配置?我更喜欢继续使用MySQL,因为这是我在制作中使用的,但是如果SQLite xa03或者其他的东西让我很容易,我会这样走。
SQLite或MySQL有一个选项可以完全在内存中运行吗?应该可以配置一个RAM磁盘,然后配置测试数据库来存储它的数据,但我不知道如何告诉Django / MySQL为某个数据库使用不同的数据目录,特别是因为它不断被擦除并重新创建每个运行。 (我在一个Mac的FWIW。)

回答:

如果您在运行测试时将数据库引擎设置为sqlite3,则Django will use a in-memory database
我在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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How to run Django’s test database only in memory?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

88 − 86 =