[英]Django Testcase, possible to load fixture at the class/module level?
我正在嘗試將 json 夾具加載到 Python 2.6/Django 1.4 單元測試中。 我可以在測試級別使用 Django 的 TestCase 完成它,但是加載需要 8-10 秒(2M 的 json,不會變得更小)。 因此,運行十幾個測試真的很慢,我只想加載一次測試數據庫。 它看起來像它可能在Python 2.6是可能的,通過添加unittest2
,但我還沒有得到它工作。
# Works, but takes eight seconds per test.
class BaseStuff(django.test.testcases.TestCase):
fixtures = ['test_data']
def setUp(self):
# stuff
def test_one(self):
# stuff
# Doesn't work - but runs *really* fast.
class BaseStuff(unittest2.TestCase):
@classmethod
def setUpClass(cls): # Added in unittest2
fixtures = ['test_data']
print "in setupClass()" # Does print, so function is called.
嘗試setupModule()也不起作用。 肯定會調用 setup 函數,但似乎不知道夾具。
所以Django 的TestCase 會讀取fixture,而unittest2 的TestCase 會在類/模塊級別做事。 有沒有辦法結合這個操作,並在類/模塊級別讀取設備? 我嘗試了多重繼承,但無法加載數據。
更新:基於@robjohncox 的建議,此代碼在模塊級別:
from django.core import management
management.call_command('loaddata', 'test_data.json', verbosity=1, noinput=True)
似乎確實創建了一個數據庫。 但是隨后 Django 似乎為每個測試創建了另一個數據庫(這是空的)。 不知道如何告訴 TestCase 使用第一個 db(我嘗試了 Django 和 unittest2 TestCase)。
正如Django doc所建議的,您可以在夾具名稱中使用數據庫的名稱,將數據加載到數據庫中:
所以結合你的建議和我的:
在您的 settings.py 中,您有以下數據庫:
DATABASES = {'default': ..., 'legacy_db': ...}
然后你可以像這樣將夾具加載到數據庫中:
from django.core import management
management.call_command('loaddata', 'test_data.legacy_db.json', verbosity=1, noinput=True)
參考: https : //docs.djangoproject.com/en/dev/ref/django-admin/#database-specific-fixtures
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.