[英]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.