この記事には以下の追記がありますので、あわせてお読みください。
modelが大きくなってきたり、migration ファイルが増えると、unit testの最初に流れるmigrationのせいでテストの実行に時間がかかるようになる。そこで高速化を試みた。
作戦としては、
ということを考えた。
migrationのスキップ方法はここに書いてある通り。
というわけで、以下のような設定を追記するとうまくいく。これで実行時間が半分になった。*1
import shutil # あらかじめmigrate済みの空のファイルdb_test.sqlite3.template を配置しておく shutil.copyfile(os.path.join(BASE_DIR, '../db_test.sqlite3.template'), os.path.join(BASE_DIR, '../db_test.sqlite3')) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, '../db_test.sqlite3'), } } class DisableMigrations(object): def __contains__(self, item): return True def __getitem__(self, item): # return 'notmigrations' return False # django 1.11にも対応するにはこちらで MIGRATION_MODULES = DisableMigrations()
modelに変更があったら、コピー元のsqliteファイルもmigrateする必要があるのがイマイチな点。もっと良い方法があれば教えてください。
ここ2年djangoを使っているが初めての記事になってしまった。もう少しアウトプットしたい。。
Two Scoops of Django: Best Practices for Django 1.8
- 作者: Audrey Roy Greenfeld
- 出版社/メーカー: Lightning Source Inc
- 発売日: 2015/05/15
- メディア: ペーパーバック
- この商品を含むブログを見る