我正在研究一个django项目,其中所有的单元测试用例都完美运行。django单元测试多个数据库
当我介绍第二个数据库时,所有从TestCase继承的测试用例都被破坏了。在这个阶段,我还没有为第二个数据库构建任何测试用例,但我的路由器工作正常。
当我跑我得到错误的测试,
“KeyError异常:‘SUPPORTS_TRANSACTIONS’”
这在我看来,试图检查所有的,我已经得到安装支持的数据库事务,但第二个数据库从不创建。
关于如何让测试脚本构建第二个数据库的任何想法。
我正在研究一个django项目,其中所有的单元测试用例都完美运行。django单元测试多个数据库
当我介绍第二个数据库时,所有从TestCase继承的测试用例都被破坏了。在这个阶段,我还没有为第二个数据库构建任何测试用例,但我的路由器工作正常。
当我跑我得到错误的测试,
“KeyError异常:‘SUPPORTS_TRANSACTIONS’”
这在我看来,试图检查所有的,我已经得到安装支持的数据库事务,但第二个数据库从不创建。
关于如何让测试脚本构建第二个数据库的任何想法。
是的,我有一个类似的问题......我的修补程序是设置'SUPPORTS_TRANSACTIONS':对于设置文件中的每个数据库连接均为True。不知道这是否是解决问题的正确方法,但它对我有用。
'SUPPORTS_TRANSACTIONS':真的对我也有效。 但是我有一种奇怪的多数据库设置使用数据库路由器。 @ user298404:你的多个数据库设置如何?
ps。抱歉;没有足够的点评论...
这里是一个多分贝的设置,我目前在生产:
DATABASES = {
# 'default' is used as the WRITE (master) connection
DB_PRIMARY_MASTER: {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'main',
'USER': 'main_write',
'PASSWORD': 'XXXX',
'HOST': 'db-master',
'PORT': '3306',
'SUPPORTS_TRANSACTIONS': True,
},
# Slave connections are READONLY
DB_PRIMARY_SLAVE: {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'main',
'USER': 'main_read',
'PASSWORD': 'XXXX',
'HOST': 'db-slave',
'PORT': '3306',
'TEST_MIRROR': DB_PRIMARY_MASTER,
'SUPPORTS_TRANSACTIONS': True,
},
# 'mail_default' is used as the WRITE (master) connection for the mail database
DB_MAIL_MASTER: {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dbmail',
'USER': 'dbmail_write',
'PASSWORD': 'XXXX',
'HOST': 'db-mail-master',
'PORT': '3306',
'SUPPORTS_TRANSACTIONS': True,
},
# Slave connections are READONLY
DB_MAIL_SLAVE: {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dbmail',
'USER': 'dbmail_read',
'PASSWORD': 'XXXX',
'HOST': 'db-mail-slave',
'PORT': '3306',
'TEST_MIRROR': DB_MAIL_MASTER,
'SUPPORTS_TRANSACTIONS': True,
},
}
DB_PRIMARY_MASTER,DB_PRIMARY_SLAVE,DB_MAIL_MASTER和DB_MAIL_SLAVE都是字符串常量,以便他们可以使用在我的数据库路由器。
提示:DB_PRIMARY_MASTER ='默认'
我希望这有助于!
我意识到这是一个相当古老的线程,但我遇到了它与同样的问题,我的决心是加入multi_db = True
标志,我的测试用例,如:
class TestThingWithMultipleDatabases(TestCase):
multi_db = True
def test_thing(self):
pass
来源https://github.com/django/django/blob/master/django/test/testcases.py#L861
这会导致Django的调用上的所有数据库flush
(或回滚,如果他们支持事务处理)
我也正在使用DB路由器
恐怕我无法在Django的文档中找到这个,所以没有链接。
Django文档:https://docs.djangoproject.com/en/2.0/topics/testing/tools/#multi-database-support – pymen 2017-12-22 09:35:21
这对我没有帮助。 – pranjal 2011-03-10 12:13:26
适合我。编辑我的设置/ local.py,并添加“'SUPPORTS_TRANSACTIONS':True,”我的DATABASES字典中的单个'默认'条目。 – 2011-07-04 19:46:55