2010-11-12 165 views
3

我正在研究一個django項目,其中所有的單元測試用例都完美運行。django單元測試多個數據庫

當我介紹第二個數據庫時,所有從TestCase繼承的測試用例都被破壞了。在這個階段,我還沒有爲第二個數據庫構建任何測試用例,但我的路由器工作正常。

當我跑我得到錯誤的測試,

「KeyError異常:‘SUPPORTS_TRANSACTIONS’」

這在我看來,試圖檢查所有的,我已經得到安裝支持的數據庫事務,但第二個數據庫從不創建。

關於如何讓測試腳本構建第二個數據庫的任何想法。

回答

3

是的,我有一個類似的問題......我的修補程序是設置'SUPPORTS_TRANSACTIONS':對於設置文件中的每個數據庫連接均爲True。不知道這是否是解決問題的正確方法,但它對我有用。

+0

這對我沒有幫助。 – pranjal 2011-03-10 12:13:26

+0

適合我。編輯我的設置/ local.py,並添加「'SUPPORTS_TRANSACTIONS':True,」我的DATABASES字典中的單個'默認'條目。 – 2011-07-04 19:46:55

0

'SUPPORTS_TRANSACTIONS':真的對我也有效。 但是我有一種奇怪的多數據庫設置使用數據庫路由器。 @ user298404:你的多個數據庫設置如何?

ps。抱歉;沒有足夠的點評論...

0

這裏是一個多分貝的設置,我目前在生產:

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 ='默認'

我希望這有助於!

2

我意識到這是一個相當古老的線程,但我遇到了它與同樣的問題,我的決心是加入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的文檔中找到這個,所以沒有鏈接。

+0

Django文檔:https://docs.djangoproject.com/en/2.0/topics/testing/tools/#multi-database-support – pymen 2017-12-22 09:35:21