如何在 django pytest 中使用现有数据库?

问题描述 投票:0回答:1

我有 API 的默认架构和数据搜索的现有架构。这是数据库设置:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "OPTIONS": {"options": "-c search_path=public"},
        "NAME": config("DB_NAME", default=""),
        "USER": config("DB_USER_NAME", default=""),
        "PASSWORD": config("DB_PASSWORD", default=""),
        "HOST": config("DB_HOST", default="db"),
        "PORT": config("DB_PORT", default=""),
    },
    "data": {
        "ENGINE": "django.db.backends.postgresql",
        "OPTIONS": {"options": "-c search_path=data"},
        "NAME": config("DB_NAME", default=""),
        "USER": config("DB_USER_NAME", default=""),
        "PASSWORD": config("DB_PASSWORD", default=""),
        "HOST": config("DB_HOST", default="db"),
        "PORT": config("DB_PORT", default=""),
    },
}

对于“数据”,我使用了命令

python manage.py inspectdb --database=data > apps/data/models.py 

得到了这样的 models.py:

class Product(models.Model):
    id = models.AutoField(primary_key=True)
    ...

    class Meta:
        managed = False
        db_table = "Product"

我尝试创建一些 pytest:

@pytest.mark.django_db(databases=["default", "data"], transaction=True)
class TestSomeTestAPIView:
    view_name = "some-view-name"

    def test_some_test_name(self, auth_client):
        print(Product.objects.using("data").all())

出现错误

"Product" table does not exists

所以我需要使用现有的数据库模式“数据”而不创建迁移,并像往常一样使用默认模式。

我已经尝试过https://pytest-django.readthedocs.io/en/latest/database.html但它在我的情况下不起作用。关于如何运行 pytest 有什么想法吗?

django orm pytest web-api-testing pytest-django
1个回答
0
投票

直接在测试中使用“生产”数据库是一个坏主意。

这就是为什么 Django 会坚持为你创建单独的测试数据库。要填充测试数据库,请将产品数据转储到固定装置中,然后在测试中加载该固定装置:

如果您坚持直接使用现有数据库,有一节介绍如何使用 pytest:https://pytest-django.readthedocs.io/en/latest/database.html#using-an-existing-external -测试数据库

© www.soinside.com 2019 - 2024. All rights reserved.