Django测试rest-framework:APIRequestFactory vs APIClient

时间:2015-08-21 09:19:11

标签: django rest unit-testing django-rest-framework

刚接触测试我想在Django(Django-rest-framework)中测试我的API。

我正在为我的观点设置测试,这是我的API端点。现在查看文档,我可以使用API​​RequestFactory或APIClient。两者似乎都做同样的事情。

这两者之间有什么区别,为什么/何时应该使用其中一种?

1 个答案:

答案 0 :(得分:26)

如果您查看tools and helpers for testing "standard" views in Django,您会发现一些非常类似的内容,TestClientRequestFactory

  

RequestFactory与测试客户端共享相同的API。然而,   RequestFactory提供了一种方式,而不是像浏览器一样   生成可用作第一个参数的请求实例   任何观点。这意味着您可以像测试视图功能一样   你会测试任何其他功能 - 作为一个黑盒子,完全知道   输入,测试特定输出。

TestClient允许您从浏览网站的用户的角度与您的网站进行互动(...虽然测试Javascript是另一个故事)。在测试您的网站时会有很多事情发生(Sessions,Middlewares,URL-Routing等)。因此,这些通常是更多的集成测试,模仿真实世界与您的网站或API的互动。

RequestFactory允许您以非常孤立的方式测试您的观看次数。您可以构建请求并测试您的视图,而无需设置您的URL或关心中间件等中发生的事情。 所以这更接近于典型的单元测试。

也就是说,两种类型的测试都很有用。为了大致了解您的API是否按预期工作,我可能会开始使用API​​Client,并在涉及更复杂的视图时使用RequestFactories。但正确的组合在很大程度上取决于您的具体应用。