Ответ
Тестирование авторизованных эндпоинтов требует предварительного получения и передачи токена (или иных учетных данных) в каждом запросе.
Общая схема:
- Получение токена (аутентификация).
- Использование токена в заголовках последующих запросов.
- Проверка доступа для разных ролей пользователей.
Пример автоматизированного теста на 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). - Использование неверного формата токена в заголовке.