如何只在内存中运行Django测试数据库?
回答问题 我的 Django 单元测试需要很长时间才能运行,所以我正在寻找加快速度的方法。我正在考虑安装SSD,但我知道这也有缺点。当然,我可以用我的代码做一些事情,但我正在寻找结构修复。即使运行单个测试也很慢,因为每次都需要重建/南迁移数据库。所以这是我的想法... 既然我知道测试数据库总是很小,为什么我不能将系统配置为始终将整个测试数据库保存在 RAM 中?永远不要触摸磁盘。如何在 Djang
回答问题
我的 Django 单元测试需要很长时间才能运行,所以我正在寻找加快速度的方法。我正在考虑安装SSD,但我知道这也有缺点。当然,我可以用我的代码做一些事情,但我正在寻找结构修复。即使运行单个测试也很慢,因为每次都需要重建/南迁移数据库。所以这是我的想法...
既然我知道测试数据库总是很小,为什么我不能将系统配置为始终将整个测试数据库保存在 RAM 中?永远不要触摸磁盘。如何在 Django 中配置它?我宁愿继续使用MySQL因为那是我在生产中使用的,但是如果SQLite3 或其他东西使这变得容易,我会那样做。
SQLite 或 MySQL 是否可以选择完全在内存中运行?应该可以配置 RAM 磁盘,然后配置测试数据库以将其数据存储在那里,但我不知道如何告诉 Django / MySQL 为某个数据库使用不同的数据目录,特别是因为它一直被擦除并重新创建每次运行。 (我在 Mac FWIW 上。)
Answers
如果在运行测试时将数据库引擎设置为 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
更多推荐
所有评论(0)