Опиши процесс тестирования функционала OAuth 2.0 авторизации.

«Опиши процесс тестирования функционала OAuth 2.0 авторизации.» — вопрос из категории Практические задания, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование OAuth 2.0 авторизации включает проверку корректного потока, обработки ошибок и интеграции. Пример для мобильного приложения:

Основные сценарии для проверки:

  1. Успешная авторизация через разных провайдеров (Google, Facebook, кастомный IdP).
  2. Обработка невалидных/просроченных токенов.
  3. Обновление Access Token с помощью Refresh Token.
  4. Сохранение и восстановление сессии после перезапуска приложения.
  5. Выход из системы (logout) с инвалидацией токенов.

Пример тест-кейса на Python (упрощенно):

import pytest

def test_oauth_successful_login_with_google():
    # 1. Имитируем получение auth code от Google (через мок или тестовый аккаунт)
    auth_code = get_auth_code_from_mock_google()

    # 2. Обмениваем code на access token
    token_response = auth_api.exchange_code_for_token(auth_code, provider="google")
    assert token_response.status_code == 200
    access_token = token_response.json()["access_token"]

    # 3. Используем токен для получения данных пользователя
    profile_response = user_api.get_profile(access_token)
    assert profile_response.status_code == 200
    user_data = profile_response.json()

    # 4. Проверяем корректность данных и создание сессии в приложении
    assert user_data["email"] is not None
    assert app_has_valid_session_for_user(user_data["id"]) == True

# Пример теста на обработку ошибки
def test_oauth_fails_with_invalid_token():
    response = user_api.get_profile("invalid_access_token_123")
    assert response.status_code == 401  # Unauthorized
    assert response.json()["error"] == "invalid_token"

Ключевые аспекты тестирования:

  • Безопасность: Токены не должны логироваться в открытом виде.
  • Сетевая устойчивость: Обработка таймаутов и ошибок сети.
  • Edge-кейсы: Отзыв разрешений пользователем, разные часовые пояса в токенах (expires_in).