我的Django单元测试需要很长时间才能运行,因此我正在寻找加快速度的方法。我正在考虑安装SSD,但我也知道它也有缺点。当然,我的代码可以做一些事情,但是我正在寻找结构上的修复方法。由于每次都需要重建/向南迁移数据库,因此即使运行单个测试也很慢。所以这是我的主意
由于我知道测试数据库总是很小,所以为什么不能仅将系统配置为始终将整个测试数据库保留在RAM中?绝对不要触摸磁盘。如何在Django中进行配置?我宁愿继续使用MySQL,因为这是我在生产中使用的方式,但是如果使用SQLite 3或其他方法可以简化这一点,我会采用这种方式。
SQLite或MySQL是否可以选择完全在内存中运行?应该可以配置RAM磁盘,然后配置测试数据库以将其数据存储在其中,但是我不确定如何告诉Django / MySQL为特定数据库使用其他数据目录,尤其是因为它不断被删除并重新创建每次运行。(我在Mac FWIW上。)
如果在运行测试时将数据库引擎设置为sqlite3,则Django将使用内存数据库。
我settings.py在运行测试时使用类似的代码将引擎设置为sqlite:
settings.py
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