【问题标题】:How do I get django 1.5 tests to use mysql?如何让 django 1.5 测试使用 mysql?
【发布时间】:2013-11-07 04:28:55
【问题描述】:

我的数据库设置是

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'foo',
...

当我运行“django-admin.py test ...”时,一个名为 test_foo 的 MySQL 数据库被创建并随后被销毁,但在测试期间它没有被填充。

如果我在测试中打开一个 shell,我可以使用 Django 模型访问创建的对象,但创建的 MySQL 数据库不包含它们。

我希望测试使用 MySQL,以防 MySQL 出现特定问题,但我看不到任何明显的方法。

我假设数据库当前是在内存中创建的,但我看不出如何轻松计算出正在使用的数据库。我假设它不是 MySQL,因为我无法使用 MySQL 管理工具看到它。

如果我可以指导测试使用他们已经创建的 MySQL 数据库(test_foo)并再次返回到当前数据库(内存中的 sqlite?),这样如果怀疑 MySQL 特定问题我可以重现它,那就太好了使用测试。

有谁知道我可以如何控制这种行为(希望没有专门针对我自己的测试运行器)?

【问题讨论】:

    标签: mysql django testing


    【解决方案1】:

    您可以按照Django 的两个勺子 中的多个设置文件章节,拆分您的设置文件,每个文件使用不同的数据库引擎。然后使用设置选项:

    django-admin.py test --settings=project.settings_test
    django-admin.py test --settings=project.settings_test_mysql
    

    设置文件的处理方式请参考this repo

    --更新--

    这就是测试settings_test 的样子:

    from .settings import *
    
    DEBUG = False
    TEMPLATE_DEBUG = DEBUG
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME':   ':memory:',
            'USER': '',
            'PASSWORD': '',
            'HOST': '',
            'PORT': '',
        }
    }
    
    SOUTH_TESTS_MIGRATE = False
    

    和mysql类似,只是使用mysql db设置来代替。

    【讨论】:

    • 感谢您的回复,但拆分设置文件并没有帮助,除非我可以将某些内容放入设置文件以强制测试套件使用它创建的 mysql 数据库......如果我能做到,我不需要特殊的测试设置文件。
    • @PaulWhipp 抱歉,我可能误解了这个问题,您的意思是您根本无法更改设置?
    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2011-08-28
    • 2012-11-09
    • 2023-03-03
    • 2013-03-07
    • 2018-10-23
    相关资源
    最近更新 更多