py.testは、テストデータベースを設定します。実際のデータベースでDjango py.testを実行しますか?
私はsettings.pyファイルに実際のデータベースセットを使用したいと思います。
(私は既にテストデータを持っているテストマシンだから)
可能でしょうか?
py.testは、テストデータベースを設定します。実際のデータベースでDjango py.testを実行しますか?
私はsettings.pyファイルに実際のデータベースセットを使用したいと思います。
(私は既にテストデータを持っているテストマシンだから)
可能でしょうか?
ええセットアップ の設定を上書きすることができ、テストのために実際のデータベースを設定し、データベースの備品をロード..しかし、私が思うに、あなたがあなたのを修正することなく、あなたのテストを実行するために、良いpraticeではなくそれは `s "本当の" app env。
あなたはpytest-djangoを試してください。
このライブラリでは、再利用することができます、あなたのデータベーステストを削除します。
私はEderson Badecaと思うのですが、test_dbとしてproject_dbを使用しないでください。代わりに、私は現在のproject_dbのコピーをデータベースセットアップで作成し、その代わりにテストを実行することを提案します。 djangoテストでは、カスタムテストランナーを作成する必要があります。しかし、py.testには、db setup/teardownロジックをすべて行うdb
というフィクスチャがあります。だから、あなたが望むことをするカスタムdb fixtureを作成する必要があります。ここにデフォルトのdbフィクスチャのソースがあります。 https://github.com/pytest-dev/pytest-django/blob/master/pytest_django/db_reuse.py
P.S.まだproject_dbでtestを実行したい場合。
は私だけのカスタムランナー怒鳴るとDjangoのデフォルトのテストでこれをやった
# coding: utf-8
from __future__ import unicode_literals, absolute_import
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.core.management import call_command
from django.db import connection
from django.test.runner import DiscoverRunner, setup_databases
from django.test.testcases import connections_support_transactions
# configure(default_settings=settings,
settings.DEBUG = True
settings.TEMPLATE_DEBUG = True
class KeepDatabaseTestRunner(DiscoverRunner):
"""
Skips creating test database and uses default database for tests.
"""
def setup_databases(self, **kwargs):
"""Setups databases to run and migrate on settings.DATABASES['default']['TEST']['NAME']"""
old_name = settings.DATABASES['default']['NAME']
try:
test_name = settings.DATABASES['default']['TEST']['NAME']
except KeyError:
raise ImproperlyConfigured("TEST NAME is not defined in settings.DATABASES['default']")
connection.settings_dict["NAME"] = test_name
connection.settings_dict['SUPPORTS_TRANSACTIONS'] = connections_support_transactions()
call_command('syncdb')
call_command('migrate')
return [connection, old_name, False], []
def teardown_databases(self, old_config, **kwargs):
"""Will not do anything"""
pass
アップデートを(Djangoのバージョン1.6、他のバージョンでテストしていません)は
[OK]を、ここにありますどのようにそれを行うことができたかの基本的な考え。まず、デフォルト値db fixitureを完全にovreloadする必要があります。あなたが探しているコード行はhttps://github.com/pytest-dev/pytest-django/blob/master/pytest_django/fixtures.py#L39です。これは、py.testが、_get_test_db_nameを割り当てるtest_dbの名前であるところです。したがって、基本的にカスタム_get_test_db_name
を作成する必要があり、その中にproject_dbのパスを指定する必要があります。その後、テストを実行するときに--reuse-dbを使用する必要があります。
P.S. test_dbをproject_dbのダンプで埋めることもできます。その後、--reuse-db
を使って実行テストを行い、py.testはtest_dbにある最新のproject_dbバージョンに対してテストを実行します。
ええ、助けてくれてありがとう、私は同様のコードを見て、py.testでも可能だろうと推測しましたが、例を見つけたり、自分自身を動作させることはできません。py.testコードは難しい読む。 – eugene
@eugene read update、それはあなたの問題に役立つかもしれません –