我正在研究一個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