Как писать автоматизированные тесты для авторизованных API-эндпоинтов?

«Как писать автоматизированные тесты для авторизованных API-эндпоинтов?» — вопрос из категории Автоматизация тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование авторизованных эндпоинтов требует предварительного получения и передачи токена (или иных учетных данных) в каждом запросе.

Общая схема:

  1. Получение токена (аутентификация).
  2. Использование токена в заголовках последующих запросов.
  3. Проверка доступа для разных ролей пользователей.

Пример автоматизированного теста на Python (pytest + requests):

import pytest
import requests

BASE_URL = "https://api.example.com"

@pytest.fixture
def auth_token():
    """Фикстура для получения токена перед тестом."""
    login_url = f"{BASE_URL}/auth/login"
    credentials = {"username": "test_user", "password": "test_pass_123"}

    response = requests.post(login_url, json=credentials)
    assert response.status_code == 200, "Authentication failed"

    token_data = response.json()
    return token_data["access_token"]  # Возвращаем токен для использования в тестах

def test_get_user_profile(auth_token):
    """Тест доступа к защищенному эндпоинту с профилем пользователя."""
    profile_url = f"{BASE_URL}/user/profile"

    # Формируем заголовок с токеном
    headers = {
        "Authorization": f"Bearer {auth_token}",
        "Content-Type": "application/json"
    }

    response = requests.get(profile_url, headers=headers)

    # Основные проверки успешного доступа
    assert response.status_code == 200
    profile = response.json()
    assert profile["username"] == "test_user"
    assert "email" in profile

def test_access_denied_without_token():
    """Негативный тест: запрос без токена должен быть отклонен."""
    profile_url = f"{BASE_URL}/user/profile"
    response = requests.get(profile_url)  # Отправляем запрос без заголовка Authorization
    assert response.status_code == 401  # Unauthorized

Дополнительные тестовые сценарии:

  • Проверка с истекшим токеном (должен вернуть 401 или 403).
  • Проверка прав доступа (Authorization, а не Authentication): запрос к ресурсу, доступному только админу, с токеном обычного пользователя (должен вернуть 403 Forbidden).
  • Использование неверного формата токена в заголовке.