Модульное тестирование с использованием принудительной аутентификации Django Rest Framework - PullRequest
0 голосов
/ 07 марта 2019

Я создаю сервисы 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

Буду благодарен вашемупомощь.

1 Ответ

0 голосов
/ 07 марта 2019

Полагаю, вам нужно изменить Response.status_code на response.status_code.

Как оказалось, Response.status_code (как и в rest_framework.response.Response) равен 200: D

...