Django
test
高速化

Djangoのテストを高速化する

More than 1 year has passed since last update.

DB create → migrate → drop する回数を減らして高速化しよう!という話。

Djangoでアプリケーションを作っていて、Djangoが複数Appを持っている場合テストを実行するときに

$ python manage.py test app1/
$ python manage.py test app2/
$ python manage.py test app3/
$ python manage.py test app4/

のように実行することが多い。
これだと4回テスト用DBを作ったり消したりすることになって、migrationファイルが大量にある場合にはこれだけで5分とかかかったりする。

Django 1.8から test コマンドのオプションに --keepdb というものがあって、このオプションを付けるとDBがない場合には新しく作って、既に存在する場合にはそのDBを使用してテストしてくれる。
テスト後にDBを消す必要がある場合には

$ python manage.py test --keepdb app1/
$ python manage.py test --keepdb app2/
$ python manage.py test --keepdb app3/
$ python manage.py test --keepdb app4/

の後にDBを消す処理を入れる必要がある。
ただ、大抵CI環境など使い捨ての環境でテストを実行することが多いので、そのままDBを放置しておけば良いと思う。