如果你使用主/副本(某些数据库称为主/从)复制来测试多数据库配置,那么这种创建测试数据库的策略会带来问题。当创建测试数据库时,不会有任何复制,因此,在主服务器上创建的数据在副本上看不到。
为了弥补这一点,Django 允许你定义一个数据库是 测试镜像。考虑以下(简化的)数据库配置示例:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproject',
'HOST': 'dbprimary',
# ... plus some other settings
},
'replica': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'myproject',
'HOST': 'dbreplica',
'TEST': {
'MIRROR': 'default',
},
# ... plus some other settings
}
}
在这个设置中,我们有两个数据库服务器。dbprimary
,用数据库别名 default
描述,dbreplica
用别名 replica
描述。正如你所期望的那样,dbreplica
被数据库管理员配置为 dbprimary
的读副本,因此在正常活动中,对 default
的任何写入都会出现在 replica
上。
如果 Django 创建了两个独立的测试数据库,就会破坏任何期望复制发生的测试。然而,replica
数据库已经被配置为测试镜像(使用 MIRROR
测试设置),表明在测试中,replica
应该被当作 default
的镜像。
在配置测试环境时,replica
的测试版本将不会被创建。相反,与replica
的连接将被重定向为指向 default
。因此,对 default
的写入将出现在 replica
上——但这是因为它们实际上是同一个数据库,而不是因为两个数据库之间有数据复制。
默认情况下,Django 会假设所有的数据库都依赖于 default
数据库,因此总是先创建 default
数据库。但是,我们不保证测试配置中其他数据库的创建顺序。
如果你的数据库配置需要特定的创建顺序,你可以使用 DEPENDENCIES
测试设置指定存在的依赖关系。考虑以下(简化的)数据库配置示例:
DATABASES = {
'default': {
# ... db settings
'TEST': {
'DEPENDENCIES': ['diamonds'],
},
},
'diamonds': {
# ... db settings
'TEST': {
'DEPENDENCIES': [],
},
},
'clubs': {
# ... db settings
'TEST': {
'DEPENDENCIES': ['diamonds'],
},
},
'spades': {
# ... db settings
'TEST': {
'DEPENDENCIES': ['diamonds', 'hearts'],
},
},
'hearts': {
# ... db settings
'TEST': {
'DEPENDENCIES': ['diamonds', 'clubs'],
},
}
}
在这种配置下,将首先创建 diamonds
数据库,因为它是唯一没有依赖性的数据库。接下来将创建 default
和 clubs
数据库(尽管这两个数据库的创建顺序没有保证),然后是 hearts
,最后是 spades
。
如果在 DEPENDENCIES
定义中存在任何循环依赖关系,将引发 ImproperlyConfigured
异常。
本文题目:创新互联Django4.0教程:Django4.0进阶测试主题-测试与多数据库
标题链接:http://www.mswzjz.cn/qtweb/news7/341507.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能