[英]Django py.test run on real database?
py.test建立一個測試數據庫。
我想使用settings.py文件中的真實數據庫集。
(因為我已經在測試機器上有測試數據了)
這有沒有可能?
我認為Ederson Badeca是對的,你不應該使用project_db作為test_db。 相反,我建議在數據庫設置上創建當前project_db的副本,然后針對它運行測試。 在django測試中,您需要創建自定義測試運行器才能這樣做。 但是在py.test中有一個名為db
fixture,它執行所有db setup / teardown邏輯。 因此,您需要創建可以執行所需操作的自定義數據庫夾具。 這是默認數據庫夾具的來源https://github.com/pytest-dev/pytest-django/blob/master/pytest_django/db_reuse.py
PS如果您仍想在project_db上運行測試。
我只在django默認測試中使用自定義運行程序bellow(django版本1.6,未在其他版本中測試)完成此操作
# 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
更新
好的,這是你如何做到這一點的基本想法。 首先,您必須完全重載默認的db fixiture 。 您正在尋找的代碼行是https://github.com/pytest-dev/pytest-django/blob/master/pytest_django/fixtures.py#L39 。 這是py.test它的test_db名稱分配_get_test_db_name的地方 。 所以基本上你需要創建自定義_get_test_db_name
,在其中你應該提供你的project_db的路徑。 此后,您還必須在運行測試時使用--reuse-db 。
PS你也可以使用project_db的轉儲填充test_db,之后運行測試使用--reuse-db
和py.test將針對test_db中最近的project_db版本運行測試。
是的你可以覆蓋setUp上的設置為測試設置真實的數據庫並加載你的數據庫夾具..但我認為,這不是一個好的實踐,因為你想運行你的測試而不修改你的“真正的”應用程序環境。
你應該試試pytest-django。
使用此lib,您可以重用,創建drop database數據庫測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.