我的 Django 单元测试需要很长时间才能运行,因此我正在寻找加快速度的方法。我正在考虑安装一个SSD http://en.wikipedia.org/wiki/Solid-state_drive,但我知道这也有其缺点。当然,我可以用我的代码做一些事情,但我正在寻找结构修复。即使运行单个测试也很慢,因为每次都需要重建数据库/南迁移。所以这是我的想法......
既然我知道测试数据库总是很小,为什么我不能将系统配置为始终将整个测试数据库保留在 RAM 中?切勿触摸磁盘。我如何在 Django 中配置它?我宁愿继续使用MySQL http://en.wikipedia.org/wiki/MySQL因为这就是我在生产中使用的,但是如果SQLite http://en.wikipedia.org/wiki/SQLite3或者其他什么东西可以让这变得容易,我会这样做。
SQLite 或 MySQL 是否可以选择完全在内存中运行?应该可以配置 RAM 磁盘,然后配置测试数据库以将其数据存储在那里,但我不确定如何告诉 Django / MySQL 对某个数据库使用不同的数据目录,特别是因为它不断被删除并重新创建每次运行。 (我使用的是 Mac FWIW。)
如果您在运行测试时将数据库引擎设置为 sqlite3,Django 将使用内存数据库 https://docs.djangoproject.com/en/dev/ref/settings/#s-std:setting-TEST_NAME.
我在我的中使用这样的代码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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)