Я создаю сервисы RESTful API с использованием django rest Framework, и я дошел до того, что мне пришлось создать автоматический тест для моих сервисов RESTful API.
Для API sessionList требуется аутентификация токена, на случай, еслиу пользователя нет токена, который он не сможет получить доступ к коллекции сеансов.
API работал нормально, когда я тестировал его с помощью POSTMAN и реального браузера.
SessionList:
class SessionList(generics.ListCreateAPIView):
authentication_classes = [TokenAuthentication, ]
permission_classes = [IsAuthenticated, ]
throttle_scope = 'session'
throttle_classes = (ScopedRateThrottle,)
name = 'session-list'
filter_class = SessionFilter
serializer_class = SessionSerializer
ordering_fields = (
'distance_in_miles',
'speed'
)
def get_queryset(self):
return Session.objects.filter(owner=self.request.user)
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
Затем я создал автоматический тест с использованием теста DRF
RunningSessionTest:
class RunningSessionTest(APITestCase):
def test_get_sessions(self):
factory = APIRequestFactory()
view = views.SessionList.as_view()
user = User.objects.create_user(
'user01', 'user01@example.com', 'user01P4ssw0rD')
request = factory.get('http://localhost:8000/sessions/')
force_authenticate(request, user=user)
response = view(request)
assert Response.status_code == status.HTTP_200_OK
def test_get_sessions_not_authenticated_user(self):
factory = APIRequestFactory()
view = views.SessionList.as_view()
user = User.objects.create_user(
'user01', 'user01@example.com', 'user01P4ssw0rD')
request = factory.get('http://localhost:8000/sessions/')
response = view(request)
assert Response.status_code == status.HTTP_401_UNAUTHORIZED
Проблема: в обоих случаях, если у пользователя естьтокен или нет значение ответа HTTP_200_OK
Я пытался решить эту проблему, пытаясь использовать различные методы для реализации теста.Я использовал APIRequestFactory, также я использовал APIClient, но я получил тот же результат.Если честно, после прочтения документа много раз я не мог понять разницу между APIClient и APIRequestFactory.
Результат теста:
Traceback (most recent call last):
File "C:\python_work\DjnagoREST\01\restful01\RunKeeper\tests.py", line 67, in test_get_sessions_not_authenticated_user
assert Response.status_code == status.HTTP_401_UNAUTHORIZED
AssertionError
Буду благодарен вашемупомощь.