【问题标题】:Running tests against existing database using pytest-django使用 pytest-django 对现有数据库运行测试
【发布时间】:2018-06-14 06:30:07
【问题描述】:

有人知道如何使用 pytest-django 对现有(例如生产)数据库运行 Django 测试吗?
我知道一般来说,这不是单元测试应该做的,但就我而言,我正在 Heroku 上运行测试。默认情况下,Django 会创建一个新的测试数据库,但是这在 Heroku 上是不可能的。

我找到了一个可以在没有 pytest-django (python manage.py test) 的情况下工作的解决方案:https://gist.github.com/gregsadetsky/5018173
但据我了解,pytest-django 没有使用 Django 设置中定义的测试运行器。

如果有人对如何在 Heroku 上使用 pytest-django 运行 Django 测试有另一种方法(例如,通过自动创建测试数据库的方法),我也会对该解决方案感到满意。

【问题讨论】:

    标签: python django postgresql heroku pytest


    【解决方案1】:

    按照the documentation 了解如何链接到现有数据库:

    使用现有的外部数据库进行测试

    此示例展示了如何连接到现有数据库并将其用于您的测试。
    这个例子很简单,你只需要禁用所有 pytest-django 和 Django 的测试数据库创建并指向现有数据库。这是通过简单地实现一个无操作的 django_db_setup 夹具来实现的。

    把这个放到conftest.py:

    import pytest
    
    
    @pytest.fixture(scope='session')
    def django_db_setup():
        settings.DATABASES['default'] = {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': 'db.example.com',
            'NAME': 'external_db',
        }
    

    【讨论】:

    • 太棒了!我不知道我怎么会错过它。感觉就像我看了 100 遍文档。
    • 这可能发生 :) @lmr2391
    • 对于那些因为 pytest.ini 设置而无法完成这项工作的人,请遵循github.com/pytest-dev/pytest-django/issues/643
    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多