2009-03-05 7 views
7

私のdjangoアプリケーションの単体テストを開発しているので、manage.pyテストを何度も何度も実行しています。私はMySQLのバックエンドを使用しており、プロジェクトでは多くのモデルを持っているので、すべてのテストデータベースを作成するためのランプアップ時間は約30秒です。djangoユニットテスト(manage.pyを介して)をより速く実行するには

データベーステーブルを作成し、 "manage.py test"コマンドの実行中にすべてのレコードをクリアするだけで、各ユニットのテストを高速化するにはどうすればよいですか?

答えて

7

注テストスイート全体を毎回実行する必要はありません。 manage.py test appname(または複数のアプリを一度にmanage.py test app1 app2 ...と入力)を実行すると、1つのアプリに対してテストスイートを実行できます。

いつものワークフローは、私が働いているときのアプリケーションのテストを実行し、次の変更をコミットする前にフルスイートを実行することです。

+0

はまだ、それはまだINSTALLED_APPSの各モジュール用のデータベースを作成し、それは時間の多くを取るものです。 – Bryce

4

私はそれを試していないが、それの最近のチェックがテストはその後、ロールバックされたトランザクション内で実行することを可能にすることによって助けることになっていた。

Documentationdeveloper commentary

1

私は自分のMySQLデータベース用のRAMディスクを使用していますが、速くそれを説明していないだけで、テスト時間を劇的に削減することができる特定のアプリケーション内の特定のテストをテストします。データベースのRAMディスクの作成を自動化しますそこにいくつかのスクリプトがありますが、私は私の同僚の1がアップ調理mysql-ramdisk.pyを使用して、このバージョンは、Mac OS X用のLinux here用のバージョンもあります。 django devの全部を設定するのに約30秒かかり、私のテストはデフォルトのテストデータベースの作成を含めて5秒未満で実行されることがあります。 ;)

0

このスレッドに投稿された:How do I run a unit test against the production database?、私はプロダクションDB(私のローカルのdevマシン、 "manage.py shell"経由)、または通常のdjango "manage"に対して実行できるテストスイートを作成します。 pyテスト "テストスイート。クイック・サニティ・チェックを行い、開発中に時間検証を行うことは私にとっては本当に時間を節約してくれました。いずれの場合も、私は同じdb(MySQL)に対して実行しており、私のテストでdjango ORMを取得します。

関連する問題