繁体   English   中英

将django测试数据库保存在夹具中?

[英]Saving django test database in a fixture?

我有一个包含大量数据的生产数据库。 我想使用一些数据来运行单元测试,但是在测试过程开始时,为了构建数据库,所有这些都会导致相当长的时间。我想避免这种情况。

我使用manage.py testserver命令创建了一个测试数据库,然后删除了我不希望通过管理界面包含的所有数据。 如何创建保留在默认测试数据库中的数据夹具?

你可以使用dumpdata生成一个json fixture,如下所示:

./manage.py dumpdata > fixture.json

如果你想从你的测试中保存一个灯具,只需序列化你的qs:

# ... import your Models
from django.core.serializers import serialize


qs1 = Model1.objects.filter(...)
qs2 = Model2.objects.filter(...)
...

fixture = serialize('json', list(qs1) + list(qs2) + list(...))
with open('fixture.json', 'w') as f:
    f.write(fixture)

现在,将测试数据保存到夹具中更容易。

运行django单元test通过将test_放在默认数据库的名称之前自动创建test数据库。 我们可以通过在settings.py上创建一个新数据库来让django知道这个数据库。 例如

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'CONN_MAX_AGE': 3600,
        'NAME': 'mydatabase',
        'USER': 'user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {'charset': 'utf8mb4'}
    },
    'test': {
        'ENGINE': 'django.db.backends.mysql',
        'CONN_MAX_AGE': 3600,
        'NAME': 'test_mydatabase',
        'USER': 'user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {'charset': 'utf8mb4'}
    }
}

然后在第一行运行unittest设置断点,根据需要编辑测试数据库,然后运行以下命令:

./manage.py dumpdata app_name -o filename.json --database test

这会将test数据库中的所有数据转储到filename 请注意,您应该在unittest运行时编辑测试数据库(因此断点)。 如果没有,即使您保留测试数据库,所有数据也将在单元测试完成后被删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM