mizzsugar’s blog

日々感じていることや学んだことを書きます。エンジニアリング以外にも書くかもしれません。

DjangoでPytestやるTips

仕事でDjangoやる時に、参画したての人が最初から知っておいた方が良さそうな事柄がまとまってきたので残しておきます。

pytest-djangoの機能

--no-migrations

これは、テスト用のテーブルを構築するためのオプションです。このオプションをつけると 定義されているモデルを元にテーブルが作成されます。 Djangoではテストを実行する際に、データベースを作り直します。その際、マイグレーションファイルをもとにテーブルを構成します。 マイグレーションファイルの数が多いと、1つ1つ適用するためテストが実行されるまでに時間がかかります。 このオプションをつけると、モデル定義から読み取って一気にテーブルを用意するので、オプションなしに比べてテーブルの作成が早くなります

--reuse-db

Djangoでは通常テストを実行するたびにデータベースを作り直すところ このオプションをつけると、前回のテストで作成したデータベースを再利用します。 テーブルを作成する時間分、テストの実行時間が早くなります。 ただし、テスト実行前後でモデルの定義を変えているとテストが落ちるので その時はデータベースを作り直さないといけません。

pytestの機能でDjangoで開発する時に知っていると便利なやつ

filterwarnings

pytest.iniに書く設定です。Django4系でurls.pyに書くurl()がなくなります。テストを実行すると、url()を使っている数だけwarningが表示されます。 url()path()に変えればwarningは解消されますが、たくさんのurl()をすぐには変えることができない場合、filterwarningsRemovedInDjango40Warning を無視する設定を書けば warningが表示されなくなります。この設定を書けば、他の4系のdeprecatedエラーも表示されなくなります。

pytest.ini

[pytest]
filterwarnings =
    ignore::django.utils.deprecation.RemovedInDjango40Warning

参考

Database access — pytest-django documentation

Warnings Capture — pytest documentation