回答问题

我的 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
Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐