2

Django プロジェクトのテスト データをデータベースに事前入力しようとしています。Djangoの「外部」にあるスクリプトでこれを行う簡単な方法はありますか?

次のコードを使用して 5 人のテスト ユーザーを作成する、この非常に単純なタスクを実行するとします。

N = 10
i = 0
while i < N:
    c = 'user' + str(i) + '@gmail.com'
    u = lancer.models.CustomUser.objects.create_user(email=c, password="12345")
    i = i + 1

質問は、

  1. このテスト スクリプト ファイルはどこに置くのですか?
  2. アプリ内でこれを書いているかのように、すべてのDjango環境とリソースにアクセスできるように、ファイルの先頭に何をインポート/コマンドを配置する必要がありますか?

設定ファイルをインポートして設定し、アプリのモデルをインポートする必要があると思います...しかし、私の試みはすべて何らかの形で失敗したので、助けていただければ幸いです=)

ありがとう!

別の答えを提供する

以下の回答は優れた回答です。いじって、別の方法を見つけました。テストデータスクリプトの先頭に以下を追加しました。

from django.core.management import setup_environ
from project_lancer import settings
setup_environ(settings)
import lancer.models

上記のコードが機能するようになりました。

4

2 に答える 2

4

これらの目的でフィクスチャを使用することをお勧めします。

https://docs.djangoproject.com/en/dev/howto/initial-data/

この初期コードを引き続き使用する場合は、以下をお読みください。

を使用する場合は、移行を作成して、次のコードをそこに配置できます。

python manage.py schemamigration --empty my_data_migration

class Migration(SchemaMigration):
    no_dry_run = False

    def forwards(self, orm):
        # more pythonic, you can also use bulk_insert here 
        for i in xrange(10):
            email = "user{}@gmail.com".format(i)
            u = orm.CustomUser.objects.create_user(email=email, password='12345)

TestCase の setUp メソッドに配置できます。

class MyTestCase(TestCase):
    def setUp(self):
        # more pythonic, you can also use bulk_insert here 
        for i in xrange(10):
            email = "user{}@gmail.com".format(i)
            u = lancer.models.CustomUser.objects.create_user(email=email,
                                                             password='12345')
    def test_foo(self):
        pass

また、setUp メソッドをオーバーライドする BaseTestCase を定義してから、BaseTestCase から継承する TestCase クラスを作成することもできます。

class BaseTestCase(TestCase):
    def setUp(self):
        'your initial logic here'


class MyFirstTestCase(BaseTestCase):
    pase

class MySecondTestCase(BaseTestCase):
    pase

しかし、フィクスチャが最良の方法だと思います:

class BaseTestCase(TestCase):
    fixtures = ['users_for_test.json']

class MyFirstTestCase(BaseTestCase):
    pase

class MySecondTestCase(BaseTestCase):
    fixtures = ['special_users_for_only_this_test_case.json']

更新しました:

python manage.py shell
from django.contrib.auth.hashers import make_password
make_password('12312312')
'pbkdf2_sha256$10000$9KQ15rVsxZ0t$xMEKUicxtRjfxHobZ7I9Lh56B6Pkw7K8cO0ow2qCKdc='
于 2013-06-24T02:50:22.417 に答える
3

this または thisのようなものを使用して、テスト目的でモデルを自動入力することもできます。

于 2013-06-24T04:34:50.067 に答える