开发者社区> 问答> 正文

如何正确测试Django API列表视图与PyTest?

我有一个API ListView端点,当我用Postman拍摄它时,它工作正常,但在测试中返回空的queryset和状态404:

web_1  | >       assert response.status_code == 200
web_1  | E       assert 404 == 200

我使用pytest fixture来创建我的对象:


@pytest.fixture
def event(system, new_conflict):
    return Event.objects.create(
        system=system,
        event_type='new_conflict',
        details=new_conflict
    )

fixture在其他(非API)测试中运行良好,所以我认为问题可能出在我测试API的方式上。在pycharm调试器中,我可以看到视图被执行了,所以这不是一个url问题。 在postman中,该端点正确地返回一个json,其中包含事件对象和状态200。


from rest_framework.test import APIClient

from event_finder.models import Event
import pytest


@pytest.mark.django_db
def test_list_events_all(event):
    client = APIClient()
    response = client.get(path='/api/events/', format='json')

    assert response.status_code == 200

from rest_framework.generics import ListAPIView

from event_finder.models import Event
from event_finder.serializers import EventSerializer


class ListView(ListAPIView):
    queryset = Event.objects.all()
    serializer_class = EventSerializer

问题来源StackOverflow 地址:/questions/59387250/how-to-properly-test-django-api-listview-with-pytest

展开
收起
kun坤 2019-12-25 21:39:01 631 0
1 条回答
写回答
取消 提交回答
  • 这是一个非常简单的例子。但也许你可以让它像这样工作:

    from rest_framework.test import APITransactionTestCase
    from rest_framework.test import status
    
    class TestThis(APITransactionTestCase):
        def test_this(self):
            data = {"key": "value"}
            response = self.client.post("/api/resource", data=data)
            self.assertEqual(response.status_code, status.HTTP_201_CREATED)
    

    我希望它能有所帮助。

    2019-12-25 21:39:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
移动互联网测试到质量的转变 立即下载
给ITer的技术实战进阶课-阿里CIO学院独家教材(四) 立即下载
F2etest — 多浏览器兼容性测试整体解决方案 立即下载