12

私はかなり複雑な Django プロジェクトを持っているため、データの読み込みにフィクスチャを使用することが困難/不可能になっています。

私がやりたいことは、テストランナーによってすべてのテーブルが作成された後、実際のテストの実行が開始される前に、実稼働データベース サーバーからデータベース ダンプをロードすることです。

MyTestCase.setUp() でさまざまな「魔法」を試しましたが、うまくいきませんでした。

どんな提案でも大歓迎です。ありがとう。

4

3 に答える 3

8

Djangoは、syncdbを実行するとき、リセットするとき、またはテストランナーを開始するときに、SQLファイルのロードをサポートします。これはあなたが説明したことを正確に実行します。

http://docs.djangoproject.com/en/dev/howto/initial-data/#pproving-initial-sql-data

appディレクトリに「sql」ディレクトリを作成し、そのディレクトリに「mymodel.sql」という名前のファイルを配置する必要があります(「MyModel」は対応するモデル名です)。

myproject/
   |--myapp/
       |--sql/
           |--mymodel.sql

このSQLは、データベースのダンプツールを使用して作成できます。

  • SQLite [1]:echo'.dump' | sqlite3 yourdbname.sqlite> myapp / sql / mymodel.sql
  • MySQL [2]:mysqldump yourdbname> myapp / sql / mymodel.sql
  • PostgreSQL [3]:pg_dump yourdbname> myapp / sql / mymodel.sql

ダンプした後、ファイルを編集して、適切なINSERTステートメントまたはその他の複雑なもの以外のすべてを削除する必要があります。特に、重複するcreateステートメントをロードするときのエラーを回避するために、トランザクション処理、インデックス作成、およびテーブル作成SQLを削除する必要があります。

私はこの方法を使用して、非常に大きなフィクスチャをロードします。jsonの処理には時間がかかりすぎますが、SQLの直接インポートは非​​常に簡単です。

このメソッドは、テストランナーのデータの読み込みに加えて、synchdbの呼び出し、リセットなどのSQLを読み込むことに注意してください。そのため、テストケースごとに異なるデータを取得することはできません。 d実稼働サーバーにファイルをロードし直したくない場合は、リセットする前にファイルを削除する必要があります。

[1] http://www.sqlite.org/sqlite.html

[2] http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html

[3] http://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP

于 2010-04-07T01:39:22.290 に答える
1

カスタム テスト ランナーの定義を検討する必要がある場合があります。ここにいくつかの情報があります: https://docs.djangoproject.com/en/dev/topics/testing/advanced/#other-testing-frameworks

基本的に、デフォルトのテストランナーを django.test.simple.run_tests からコピーして、ニーズに合わせて変更するだけでよいと思います。

私は以前にこれを行ったことがありませんが、私の理解では、これをカスタマイズする方法です。

于 2009-12-31T00:37:39.800 に答える
-1

備品は最良の選択肢です。./manage.py dumpdata を使用して、現在のデータベースからフィクスチャを作成しようとしましたか? 複雑なモデルで失敗したことはありませんが、可能だと思います。

mysql を使用していると仮定すると、 mysqldumpを使用してこれをスクリプト化できるはずです。

于 2009-12-30T14:14:04.757 に答える