我正在努力实现的目标。
我正在 Django 项目中测试 rest API。 我想用相关的测试函数创建测试类(每个下面的测试函数都依赖于前一个) - 第一次失败意味着全部失败。 在第一个测试函数中,我创建了一个带有“post”请求的对象。 在下一个测试用例中,我想使用“get”请求检查该对象是否确实存在。

这个怎么运作
看起来 Django-pytest 在每次测试后都会从所有记录中清除数据库。
它在 pytest 文档中提到: https ://pytest-django.readthedocs.io/en/latest/helpers.html#pytest-mark-django-db-request-database-access
有什么办法可以改变这种情况吗?

我的代码:
我的conftest.py

import pytest


@pytest.fixture(scope='session')
def django_db_setup():
    from django.conf import settings
    settings.DATABASES['default'] = {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'db_name.sqlite3',
    }


@pytest.fixture
def object_data():
    return {"some keys": "some values"}


@pytest.fixture
def object_name():
    return "some name"

我的tests.py

import pytest

from rest_framework.test import APIClient
from rest_framework import status


@pytest.mark.django_db
class TestAPI:
    def setup(self):
        self.client = APIClient()

    def test_create_object(self, object_data, object_name):
        post_response = self.client.post("/api/object/", data=object_data, format="json")
        assert status.is_success(post_response.status_code)
        # make sure that report was created
        get_response = self.client.get(f"/api/object/{object_name}/")
        assert status.is_success(get_response.status_code)
        # object exists here (test passes)

    def test_get_object(self, object_name):
        get_response = self.client.get(f"/api/object/{object_name}/")
        assert status.is_success(get_response.status_code)
        # object does not exists here (test failes)

#1楼 票数:3

是的,pytest-django 会在每次测试运行后清除您的数据库。

为了解决这个问题,在你的根目录添加一个名为pytest.ini的 pytest 配置文件并添加如下

[pytest]
addopts = --reuse-db

正如这个配置文件所暗示的那样,它重用当前的数据库而不创建新的数据库。

因此,如果您需要为测试创建数据库,则必须通过pytest --create-db在命令上指定它

#2楼 票数:1

您可能不想在测试用例之间保留数据。 您应该努力让测试用例以任意顺序运行。 如果您希望在测试用例之间共享数据,请在夹具中对其进行初始化并在测试用例之间重用它,或者将您的测试用例合并为一个以确保该测试用例中的所有内容按顺序运行。

  ask by Maciek translate from so

未解决问题?本站智能推荐:

2回复

Django测试客户端与django-pytest

我正在使用django-pytest来测试Django Rest Framework API。 我有一个看起来像这样的测试模块: 当我运行测试时,我得到: 如果我检查用调试器返回的数据,我看到它是在前一个测试中创建的工作站,即使数据库似乎是空的: 我不知道pytest是否在测试之间
2回复

如何使用PyTest正确测试DjangoAPIListView?

我有一个 API ListView 端点,当我用 Postman 拍摄它时它可以正常工作,但在测试中返回空的查询集和状态 404: 测试结果: 我使用 pytest 固定装置来创建我的对象: conftest.py@pytest.fixturedef event(system, new_confl
1回复

使用pytest比较从REST框架返回的两个字典

我正在尝试使用 pytest 测试我的 django 应用程序。 我正在尝试发送这样的对象: { "x" :1 "y" :2 .... } 我的视图所做的是返回一个字典列表,所以在我的场景中是一个包含这个已发送字典的列表。 当我打电话时,我想检查我发送的数据是否等于我的数据。 我的问题是这两个字典
3回复

pytest与REST框架交互时,PATCH和PUT无法按预期工作

我正在使用 django REST 框架构建 API。 为了测试这个 API,我使用 pytest 和测试客户端,如下所示: 或 在使用 REST 框架的通用 GET、POST 和 DELETE 类(如DestroyAPIView 、 RetrieveUpdateAPIView或仅使用 get 和
2回复

带有特定IP的DjangoREST客户端测试

Django REST文档从META读取地址。 因此,我必须创建Whitelist模型来为其存储ip地址/子网。 没什么大不了,我已经在数据库中拥有所有302子网。 问题: 我想从其他IP地址而不是127.0.0.1测试白名单 我如何在pytest做到这pytest ?
2回复

如何使用PUT在Djangorest框架中测试文件上传?

我想为Django REST Framework应用程序的视图编写单元测试。 测试应该使用PUT上传文件,本质上相当于 http -a malkarouri PUT http:// localhost:8000 / data-packages / upload / ka @ tmp /
1回复

pytest-django:测试后无法删除数据库

我有一个Django应用程序,正在尝试使用pytest和pytest-django对其进行测试。 但是,很多时候,当测试完成运行时,我会收到以下错误消息:数据库删除失败: DETAIL: There is 1 other session using the database. 基本上,我可
1回复

如何使用每个模块的测试数据初始化数据库?Pytest-django

对于项目中的每个应用程序,您都需要编写测试。 同样对于每个应用程序,您首先需要上传您的测试数据,在通过所有模块测试后,必须删除这些数据。 我找到了几个解决方案,但在我看来没有一个是最佳的首先:在每个应用程序的文件conftest.py中,我覆盖了方法django_db_setup ,但在这种情况下,