使用模板Sqlite数据库加速Django单元测试

时间:2014-07-05 01:21:27

标签: python django sqlite django-unittest

如何让Django在运行单元测试时将sqlite3 db文件加载到内存中,而不是生成新数据库并从头开始初始化模式?

我有一些大型JSON灯具需要一段时间才能为每次测试加载Django。我想象的一个解决方法是生成一个"模板" sqlite3数据库,将所有架构和夹具加载到其中,然后简单地将其用于每个单元测试,绕过所有夹具加载。显然,每当我更改模式或灯具时,我都必须更新此模板,但这是一个可接受的权衡,如果这意味着每个单元测试需要几秒钟而不是几分钟才能运行。

我完成了第一步,生成了模板数据库,通过: *在' TEST_NAME'中指定数据库文件名数据库设置字段 *运行一个什么都不做的特定单元测试,所以Django只生成模式和加载装置 * monkeypatched django.test.running.DiscoverRunner.teardown_databases什么都不做,所以我可以检索db文件并将其保存为我的数据库模板

但现在我仍然坚持如何让Django使用这个文件。如果我将文件保留为我的TEST_NAME参数,Django将简单地删除它并重新生成它......但是还要继续将其写入文件系统,使其比内存中的Sqlite3数据库快10倍。

1 个答案:

答案 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.
        }