如何让Django在运行单元测试时将sqlite3 db文件加载到内存中,而不是生成新数据库并从头开始初始化模式?
我有一些大型JSON灯具需要一段时间才能为每次测试加载Django。我想象的一个解决方法是生成一个"模板" sqlite3数据库,将所有架构和夹具加载到其中,然后简单地将其用于每个单元测试,绕过所有夹具加载。显然,每当我更改模式或灯具时,我都必须更新此模板,但这是一个可接受的权衡,如果这意味着每个单元测试需要几秒钟而不是几分钟才能运行。
我完成了第一步,生成了模板数据库,通过: *在' TEST_NAME'中指定数据库文件名数据库设置字段 *运行一个什么都不做的特定单元测试,所以Django只生成模式和加载装置 * monkeypatched django.test.running.DiscoverRunner.teardown_databases什么都不做,所以我可以检索db文件并将其保存为我的数据库模板
但现在我仍然坚持如何让Django使用这个文件。如果我将文件保留为我的TEST_NAME参数,Django将简单地删除它并重新生成它......但是还要继续将其写入文件系统,使其比内存中的Sqlite3数据库快10倍。
答案 0 :(得分:0)
在settings.py
文件的末尾添加:
if 'test' in sys.argv:
# If you also want to speed up password hashing in test cases.
PASSWORD_HASHERS = (
'django.contrib.auth.hashers.MD5PasswordHasher',
)
# Use SQLite3 for the database engine during testing.
DATABASES['default'] = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '', # Add the name of your SQLite3 database file here.
}