Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django py.test是否在真实数据库上运行?_Python_Django_Pytest - Fatal编程技术网

Python Django py.test是否在真实数据库上运行?

Python Django py.test是否在真实数据库上运行?,python,django,pytest,Python,Django,Pytest,py.test设置一个测试数据库 我想使用settings.py文件中的真实数据库集。 (因为我在测试机上,已经有了测试数据) 可能吗?是的,您可以覆盖设置上的设置 为测试设置真实数据库并加载数据库。。但我认为,这不是一个好的做法,因为你想在不修改“真正”应用程序环境的情况下运行测试 你应该试试pytest django 有了这个库,您可以重用、创建和删除数据库测试。我认为是的,您不应该将项目数据库用作测试数据库。相反,我建议在数据库设置中创建当前项目的副本,并对其运行测试。在django测试中

py.test设置一个测试数据库

我想使用settings.py文件中的真实数据库集。
(因为我在测试机上,已经有了测试数据)


可能吗?

是的,您可以覆盖设置上的设置 为测试设置真实数据库并加载数据库。。但我认为,这不是一个好的做法,因为你想在不修改“真正”应用程序环境的情况下运行测试

你应该试试pytest django

有了这个库,您可以重用、创建和删除数据库测试。

我认为是的,您不应该将项目数据库用作测试数据库。相反,我建议在数据库设置中创建当前项目的副本,并对其运行测试。在django测试中,您需要创建自定义的测试运行程序来完成此操作。但是在py.test中有一个名为
db
的夹具,它执行所有db设置/拆卸逻辑。因此,您需要创建自定义的db fixture,以满足您的需要。这里是默认db fixture的来源

如果您仍然想在project_db上运行测试,请注意

我只在django默认测试中使用自定义runner bellow(django版本1.6,还没有在其他版本中测试)完成了这项工作

更新

好的,这是你如何做到这一点的基本想法。首先,您必须完全重新加载默认值。您要查找的代码行是。这是py.test执行其test\u db名称分配的地方。因此,基本上您需要创建自定义的
\u get\u test\u db\u name
,并在其中提供项目\u db的路径。此外,在运行测试时还必须使用


另外,您还可以使用项目数据库的转储文件填充测试数据库,然后使用
--重用数据库运行测试,py.test将针对测试数据库中的最新项目数据库版本运行测试

使用现有的外部数据库是有文档记录的,尽管我同意Ederson的观点:最好使用一个夹具,这样您的测试可以在所有环境中运行,包括生产环境

是的,谢谢你的帮助,我看到过类似的代码,我猜py.test也可以,但是我自己找不到一个例子,也无法让它工作。。py.test代码很难阅读。
# 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