私はテストデータベースのセットアップの動作をカスタマイズするのに苦労しています。私は、次のことを実現したいと思います:既存のデータベースを使用するDjangoテスト
- テストスイートは、テストスイートがあるので、MySQLのダンプ
- からデータをロードする代わりに、データベースを消去または再作成するべきではない既存のデータベース
- を使用する必要がありますDBはダンプから移入され、何の備品は、データベースが
を破壊すべきではない仕上げのテストの際
私はテストデータベースのセットアップの動作をカスタマイズするのに苦労しています。私は、次のことを実現したいと思います:既存のデータベースを使用するDjangoテスト
を破壊すべきではない仕上げのテストの際
カスタムテストランナーを用意する必要があります。
デフォルトのdjango.test.runner.DiscoverRunner
でオーバーライドしたいビットは、DiscoverRunner.setup_databases
とDiscoverRunner.teardown_databases
のメソッドです。これらの2つの方法は、テストデータベースの作成と破棄に関係し、一度だけ実行されます。既定で既存のテストデータベースを使用するテスト固有のプロジェクト設定を提供し、これらを上書きして、ダンプデータがロードされ、テストデータベースが破棄されないようにする必要があります。
ダンプのサイズと内容によっては、ダンプをデータベースのSQLコマンドラインインターフェイスにパイプするサブプロセスを作成するだけでよい場合があります。そうしないと、カーソルとexecute queries directlyを取得できます。
あなたが完全にフィクスチャの負荷を取り除くために探している場合は、NOOPするオーバーライドTestCase._fixutre_setup
とTestCase._fixutre_teardown
方法とDjangoのデフォルトdjango.test.testcases.TestCase
を拡張するカスタムベースのテストケースを提供することができます。
注意:このランナーは、アプリケーションのソース以外のテストを容易にすることができません。ランナーをカスタマイズして、既存のデータベースへの接続用の特定のエイリアスを作成し、ダンプをロードし、TestCase._database_names
を上書きしてそのエイリアスを指すカスタムテストケースを提供することが可能です。
この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
早送りで動作し、テストの間のデータベースを保持する能力がジャンゴに内蔵されています。これは--keep flagからmanage.pyの形式で入手できます
Django 1.8の新機能テスト実行の間にテストデータベースを保持します。この は、作成および破棄の両方の操作をスキップするという利点があります。 これは、特に大きなテストスイート のテストを実行する時間を大幅に短縮できます。テストデータベースが存在しない場合は、最初の実行時に作成された になり、その後の実行ごとに保存されます。 テストスイートを実行する前に、未適用の移行もテストデータベース に適用されます。
これは、あなたの質問で言及したすべての基準をほぼ満たしています。実際、それはさらに一歩進んでいます。それぞれの実行の前にダンプをインポートする必要はありません。
SQLダンプからデータをロードする場合、どのように既存のデータベースを使用していますか?私は、ダンプをロードし、フィクスチャを作成し、従来のテスト方法を使用することをお勧めします。 – shanyu
多くのデータがあり、ダンプからの読み込みは什器 – pyeleven
からの読み込みよりも速いので、既存のデータベースを使用することではありません。完全なデータを使用してテストを行う必要があることを100%確信していますか?サンプルで十分なテストができますか? – shanyu