【问题标题】:How to test against specific database如何针对特定数据库进行测试
【发布时间】:2017-02-23 15:25:04
【问题描述】:

我工作的公司有一个测试服务器,其中包含所有测试数据。我正在尝试添加一些非常需要的单元测试,这些单元测试引用了测试服务器上的 Django 数据库。我遇到的问题是正在创建测试数据库,而不是指向我提供的数据库。如果在系统参数中进行测试,我曾尝试设置数据库,如下所示:

if 'test' in sys.argv:
    DATABASES = {
        'default': {  # VM Testing
            'ENGINE': 'sql_server.pyodbc',
            'NAME': 'x',
            'USER': 'x',
            'PASSWORD': "x",
            'HOST': 'x.x.x.x',  #
            'PORT': '',
            'OPTIONS': {
                'driver': 'FreeTDS',
                'dsn': 'mssql_staging_1',
                'extra_params': 'TDS_VERSION=8.0',
                'use_legacy_datetime': False
            },
        },
    }

    DEBUG = False
    TEMPLATE_DEBUG = False

虽然它进入了 this if 语句,但在运行 python manage.py test 时仍然会创建测试数据库。有什么建议吗? FWIW 到目前为止,我所有的测试都在使用 DRF 及其 APITestCase 类。谢谢!

编辑:

我试过跑步 python manage.py 测试 -k 但是 Django 仍然使用默认的测试数据库。我投入了一组跟踪检查,没有找到任何对象。 终端输出是:

Using existing test database for alias 'default'...

这是我更新的更新设置:

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'x',
        'USER': 'x',
        'PASSWORD': "x",
        'HOST': 'x.x.x.x', 
        'PORT': '',
        'OPTIONS': {
            'driver': 'FreeTDS',
            'dsn': 'mssql_staging_1',
            'extra_params': 'TDS_VERSION=8.0',
            'use_legacy_datetime': False
        }
    },
    'replica': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'x',
        'USER': 'x',
        'PASSWORD': "x",
        'HOST': 'x.x.x.xreplica', 
        'PORT': '',
        'OPTIONS': {
            'driver': 'FreeTDS',
            'dsn': 'mssql_staging_1',
            'extra_params': 'TDS_VERSION=8.0',
            'use_legacy_datetime': False
        },
        'TEST': {
            'MIRROR': 'default',
        }
    }
}

【问题讨论】:

标签: django django-rest-framework


【解决方案1】:

通过执行以下操作,我终于能够让我的测试运行器正常工作:

我将测试条件从我的暂存设置文件移到了测试设置文件(称为 testing.py)

数据库设置:

if 'test' in sys.argv:
    # WILL NOT WORK WHEN IF IS MISSING
    DATABASES = {
        'default': {  # VM Testing
            'ENGINE': 'sql_server.pyodbc',
            'NAME': 'x',
            'USER': 'x',
            'PASSWORD': "x",
            'HOST': 'x.x.x.x',  
            'PORT': '',
            'OPTIONS': {
                'driver': 'FreeTDS',
                'dsn': 'mssql_staging_1',
                'extra_params': 'TDS_VERSION=8.0',
                'use_legacy_datetime': False
            },
            'TEST': {
                'MIRROR': 'default',
            }

        },
    }

并使用以下命令运行我的测试:

python manage.py test --settings=Project.settings.testing -k

【讨论】:

  • -k 标志代表什么?
  • @andilabs,--keepdb 的快捷方式,通常测试破坏数据库。为避免这种情况,可以使用-k/--keepdb
猜你喜欢
  • 2012-02-19
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
相关资源
最近更新 更多