2011-06-06 15 views
14

私はテストデータベースのセットアップの動作をカスタマイズするのに苦労しています。私は、次のことを実現したいと思います:既存のデータベースを使用するDjangoテスト

  • テストスイートは、テストスイートがあるので、MySQLのダンプ
  • からデータをロードする代わりに、データベースを消去または再作成するべきではない既存のデータベース
  • を使用する必要がありますDBはダンプから移入され、何の備品は、データベースが

を破壊すべきではない仕上げのテストの際

  • をロードすべきではない私は、バイパス創造にtestsuiterunnerを得ることに苦労しています。

  • +0

    SQLダンプからデータをロードする場合、どのように既存のデータベースを使用していますか?私は、ダンプをロードし、フィクスチャを作成し、従来のテスト方法を使用することをお勧めします。 – shanyu

    +2

    多くのデータがあり、ダンプからの読み込みは什器 – pyeleven

    +0

    からの読み込みよりも速いので、既存のデータベースを使用することではありません。完全なデータを使用してテストを行う必要があることを100%確信していますか?サンプルで十分なテストができますか? – shanyu

    答えて

    0

    カスタムテストランナーを用意する必要があります。

    デフォルトのdjango.test.runner.DiscoverRunnerでオーバーライドしたいビットは、DiscoverRunner.setup_databasesDiscoverRunner.teardown_databasesのメソッドです。これらの2つの方法は、テストデータベースの作成と破棄に関係し、一度だけ実行されます。既定で既存のテストデータベースを使用するテスト固有のプロジェクト設定を提供し、これらを上書きして、ダンプデータがロードされ、テストデータベースが破棄されないようにする必要があります。

    ダンプのサイズと内容によっては、ダンプをデータベースのSQLコマンドラインインターフェイスにパイプするサブプロセスを作成するだけでよい場合があります。そうしないと、カーソルとexecute queries directlyを取得できます。

    あなたが完全にフィクスチャの負荷を取り除くために探している場合は、NOOPするオーバーライドTestCase._fixutre_setupTestCase._fixutre_teardown方法とDjangoのデフォルトdjango.test.testcases.TestCaseを拡張するカスタムベースのテストケースを提供することができます。

    注意:このランナーは、アプリケーションのソース以外のテストを容易にすることができません。ランナーをカスタマイズして、既存のデータベースへの接続用の特定のエイリアスを作成し、ダンプをロードし、TestCase._database_namesを上書きしてそのエイリアスを指すカスタムテストケースを提供することが可能です。

    3

    このTEST_RUNNERは、2016年にはDjango 1.3

    from django.test.simple import DjangoTestSuiteRunner as TestRunner 
    
    class DjangoTestSuiteRunner(TestRunner): 
        def setup_databases(self, **kwargs): 
         pass 
    
        def teardown_databases(self, old_config, **kwargs): 
         pass 
    
    2

    早送りで動作し、テストの間のデータベースを保持する能力がジャンゴに内蔵されています。これは--keep flagからmanage.pyの形式で入手できます

    Django 1.8の新機能テスト実行の間にテストデータベースを保持します。この は、作成および破棄の両方の操作をスキップするという利点があります。 これは、特に大きなテストスイート のテストを実行する時間を大幅に短縮できます。テストデータベースが存在しない場合は、最初の実行時に作成された になり、その後の実行ごとに保存されます。 テストスイートを実行する前に、未適用の移行もテストデータベース に適用されます。

    これは、あなたの質問で言及したすべての基準をほぼ満たしています。実際、それはさらに一歩進んでいます。それぞれの実行の前にダンプをインポートする必要はありません。

    関連する問題