我有一个Django-rest-framework视图集/路由器来定义一个API端点。视图集的定义如下:
class DocumentViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
model = Document
路由器定义为
router = DefaultRouter()
router.register(r'documents', viewsets.DocumentViewSet)
使用url模式url(r'^api/', include(router.urls))
我可以在浏览器中/通过curl找到这个端点,只要获得正确的访问令牌并使用它进行授权就可以了。
以下是我尝试过的方法:
class DocumentAPITests(APITestCase):
def test_get_all_documents(self):
user = User.objects.create_user('test', 'test@test.com', 'test')
client = APIClient()
client.credentials(username="test", password="test")
response = client.get("/api/documents/")
self.assertEqual(response.status_code, 200)
client.get()
调用的HTTP 401响应失败。使用django-oauth-toolkit进行oauth2身份验证,在DRF中测试API端点的正确方法是什么?
3条答案
按热度按时间332nm8kg1#
在编写测试时,您应该从测试本身提取任何未测试的内容,通常将任何设置代码放在测试的
setUp
方法中。在使用OAuth的API测试中,这通常包括测试用户、OAuth应用程序和活动访问令牌。对于
django-oauth-toolkit
和其他Django应用程序,我总是推荐使用looking at the tests to see how they do it,这样可以避免进行不必要的API调用,尤其是对于OAuth这样的多部分进程,并且只创建所需的几个模型对象。在这里,您只需要使用生成的令牌进行身份验证,您可以通过注入
Authorization
头来完成,或者使用Django REST Framework提供的force_authenticate
方法。xxb16uws2#
我在OAuth2中使用了相同的库,
这对我很有效
现在一切都会像预期的那样工作。希望这对你有帮助。谢谢
yptwkmov3#