1. ホーム
  2. python

[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?

2022-07-08 11:20:05

質問

私の Django ユニットテストの実行には長い時間がかかるので、それを高速化する方法を探しています。私は SSD をインストールすることを検討していますが、それにも欠点があることは知っています。もちろん、私のコードでできることもあるのですが、構造的な修正を探しています。データベースを毎回再構築/南移行する必要があるため、1つのテストを実行するのでさえ遅いのです。そこで、これが私のアイデアです...

テスト データベースが常に非常に小さいことがわかっているので、テスト データベース全体を常に RAM に保持するようにシステムを構成することはできないでしょうか。ディスクにはまったく触れないでください。Django でこれをどのように設定すればよいのでしょうか? 私は MySQL を使い続けたいのですが、もし SQLite  3 などで簡単にできるのであれば、そちらにします。

SQLite または MySQL には、完全にメモリ内で実行するオプションがありますか?RAMディスクを構成し、テストデータベースがそこにデータを保存するように構成することは可能なはずですが、特に実行のたびに消去され、再作成され続けるので、特定のデータベースに対して異なるデータディレクトリを使用するようにDjango / MySQLに指示する方法がよく分かりません。(ちなみに私は Mac を使っています)。

どのように解決するのですか?

テスト実行時にデータベースエンジンをsqlite3にした場合。 Django はインメモリデータベースを使用します。 .

私はこのようなコードを settings.py で、テストを実行するときにエンジンを sqlite に設定します。

if 'test' in sys.argv:
    DATABASE_ENGINE = 'sqlite3'

あるいは Django 1.2 で。

if 'test' in sys.argv:
    DATABASES['default'] = {'ENGINE': 'sqlite3'}

そして最後に Django 1.3 と 1.4 で。

if 'test' in sys.argv:
    DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}

(バックエンドへのフルパスは Django 1.3 では厳密には必要ありませんが、設定を前方互換にします)。

South migration で問題が発生した場合に備えて、以下の行を追加することもできます。

    SOUTH_TESTS_MIGRATE = False