4

json フィクスチャを Python 2.6/Django 1.4 単体テストにロードしようとしています。DjangoのTestCaseを使用してテストレベルで実行できますが、ロードに8〜10秒かかります(2Mのjson、それほど小さくなりません)。したがって、多数のテストを実行するのは非常に遅く、テスト データベースを 1 回だけロードしたいと考えています。を追加すると、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 はフィクスチャを読み取り、unittest2 の TestCase はクラス/モジュール レベルで処理を行います。この操作を組み合わせて、クラス/モジュール レベルでフィクスチャを読み取る方法はありますか? 多重継承を試みましたが、データをロードできませんでした。

更新: @ robjohncox の提案に基づいて、このコードはモジュール レベルで:

from django.core import management
management.call_command('loaddata', 'test_data.json', verbosity=1, noinput=True)

データベースを作成しているようです。しかし、Django はテストごとに別のデータベースを作成しているように見えます (これは空です)。最初のデータベースを使用するように TestCase に指示する方法がわかりません (Django と unittest2 TestCase の両方を試しました)。

4

2 に答える 2

0

Django doc が示唆するように、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

于 2021-06-14T17:21:41.857 に答える