簡體   English   中英

Django py.test在真實數據庫上運行?

[英]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數據庫測試。

這里記錄使用現有的外部數據庫,盡管我同意Ederson:使用夾具更好的做法是讓測試在包括生產在內的所有環境中運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM