我正在尝试将json夹具加载到Python2.6/Django 1.4单元测试中。我可以使用Django的TestCase在测试级别完成它,但是加载它需要8-10秒(2M的json,不会变得更小)。因此,运行十几个测试非常慢,我只想加载一次测试数据库。在Python2.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()也不起作用。安装函数肯定是被调用的,但似乎不知道安装是否正确。
这样Django的TestCase就会读取附图,unittest2 2的TestCase将在类/模块级别执行任务。是否有任何方法组合此操作,并在类/模块级别读取夹具?我尝试了多重继承,但无法让它加载数据。
更新:基于@robjohncox的建议的代码,在模块级别:
from django.core import management
management.call_command('loaddata', 'test_data.json', verbosity=1, noinput=True)似乎确实创建了一个数据库。但是Django似乎为每个测试创建了另一个数据库(它是空的)。不知道如何告诉TestCase使用第一个db (我尝试了Django和unittest2 TestCase)。
发布于 2014-01-18 08:04:56
发布于 2021-06-14 17:21:41
正如Django文档建议的那样,您可以在工具名中使用DB的名称,将数据加载到db中:
所以把你的建议和我的建议结合起来:
在您的settings.py中,您有以下数据库:
DATABASES = {'default': ..., 'legacy_db': ...}然后,您可以像这样将夹具加载到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
https://stackoverflow.com/questions/21193331
复制相似问题