Как была реализована авторизация на последнем проекте, который вы тестировали?

«Как была реализована авторизация на последнем проекте, который вы тестировали?» — вопрос из категории Веб-тестирование, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

На последнем проекте авторизация в REST API была реализована по схеме OAuth 2.0 с использованием JWT (JSON Web Tokens).

С точки зрения тестировщика, моя работа включала:

  1. Тестирование сценариев аутентификации:

    • Успешный логин с корректными данными.
    • Неуспешный логин с неверным паролем/логином (проверка кодов ответа 401, сообщений об ошибках).
    • Попытка доступа к защищенным эндпоинтам без токена (ожидаемый ответ 403 Forbidden или 401 Unauthorized).
  2. Работа с токенами:

    • Access Token: Жил 15 минут. Тестировал истечение срока его действия — после этого запросы к API должны возвращать 401, и клиент должен использовать refresh token для получения нового.
    • Refresh Token: Жил 7 дней. Тестировал сценарий его повторного использования, отзыва и попытки использования после истечения срока.
  3. Автоматизация тестов: Для API-тестов использовал pytest и библиотеку requests в Python. Токен получал один раз в фикстуре и переиспользовал в рамках тестовой сессии.

    import pytest
    import requests
    
    @pytest.fixture(scope="session")
    def auth_token():
        """Фикстура для получения токена один раз на все тесты."""
        login_url = "https://api.project.com/auth/login"
        creds = {"username": "test_user", "password": "test_pass"}
        resp = requests.post(login_url, json=creds)
        resp.raise_for_status()
        return resp.json()["access_token"]
    
    def test_get_user_profile(auth_token):
        headers = {"Authorization": f"Bearer {auth_token}"}
        resp = requests.get("https://api.project.com/user/profile", headers=headers)
        assert resp.status_code == 200
  4. Тестирование безопасности: Проверял уязвимости, такие как попытка подменить алгоритм подписи JWT на none, использование просроченного или украденного токена, а также корректную обработку некорректно сформированных токенов.

  5. UI-тестирование: В автотестах на Playwright/Selenium авторизация также выполнялась через API (получение токена и установка его в localStorage или cookies), что было значительно быстрее, чем прохождение полной формы логина в UI.