1

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

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

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

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

4

1 回答 1

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.
        }
于 2014-07-05T07:35:48.113 回答