Django 测试 RequestFactory 与客户端

我试图决定是否应该使用 Django 的 ClientRequestFactory来测试我的观点。

我正在使用 DjangoRESTFramework 创建我的服务器,到目前为止,它真的很简单:

class SimpleModelList(generics.ListCreateAPIView):
"""
Retrieve list of all route_areas or create a new one.
"""
queryset = SimpleModel.objects.all()
serializer_class = SimpleModelSerializer
filter_backends = (IsOwnerFilterBackend,)


def perform_create(self, serializer):
serializer.save(owner=self.request.user)

使用 Django 的 ClientRequestFactory进行测试的区别是什么? 哪种方法更适合测试 REST 服务器(如果除了更喜欢某种方法之外还有任何区别的话) ?

我是否应该同时创建这两个测试,以便为我的系统提供更好的覆盖率?

19186 次浏览

RequestFactoryClient有一些非常不同的用例。把它放在一个句子中: RequestFactory返回一个 request,而 Client返回一个 response

RequestFactory就是它所说的——它是一个创建 request对象的工厂。

Client用于伪造完整的请求-响应周期。它将创建一个 request对象,然后通过一个 WSGI 处理程序传递该对象。此处理程序解析 URL、调用适当的中间件并运行视图。然后返回响应对象。它还有一个额外的好处,那就是它收集了大量关于 response对象的额外数据,这些数据对于测试非常有用。

RequestFactory实际上并不涉及任何代码,但是 request对象可以用来测试需要有效 request的代码部分。Client运行您的视图,因此为了测试您的视图,您需要使用 Client并检查响应。一定要检查 Client上的 文件

当使用 Django REST 框架请求工厂将有助于测试权限。

例如:

Class TestPermission(TestCase):
  

def test_admin_permisiion(self):
admin_user = User.objects.create(email='admin@gmail.com',password='admin997',is_staff=True)
factory = RequestFactory()
request = factory.get('/')
request.user = admin_user
permission = IsAdminUser()
has_permission = permission.has_permission(request, None)
self.assertTrue(has_permission)

我们听到的是,我们通过设置 is _ staff = True 创建了一个管理用户,然后我们创建了一个请求并将管理员分配为该请求的用户。请求工厂帮助我们这样做。然后我们根据请求检查来自 DRF 的 IsAdminUser ()权限。测试会通过的。

当您需要测试由 Api 返回的响应时,将使用客户端。