Ответ
Тестирование синхронных REST API фокусируется на проверке корректности запросов и немедленных ответов. Тесты строятся вокруг контракта API (например, OpenAPI/Swagger спецификация).
Уровни и виды тестов:
-
Позитивные тесты (Happy Path): Проверка успешных сценариев с валидными данными.
GET /api/v1/users/123 HTTP/1.1 Host: example.com Authorization: Bearer <token>Ожидаемый ответ:
{ "id": 123, "name": "Alice", "email": "alice@example.com", "status": "active" } -
Негативные тесты: Проверка обработки ошибок.
- Невалидные данные:
POSTс некорректным JSON (400 Bad Request). - Отсутствующий ресурс:
GET /users/999999(404 Not Found). - Ошибки авторизации: Запрос без токена (
401 Unauthorized). - Запрещенные действия:
DELETEдля ресурса без прав (403 Forbidden). - Серверные ошибки: Имитация сбоя бэкенда (
500 Internal Server Error).
- Невалидные данные:
-
Валидация контракта:
- Структура ответа: Соответствие JSON Schema.
- Типы данных: Проверка, что
id— число, аemail— строка в формате email. - Обязательные поля: Наличие всех required полей в ответе.
-
Проверка HTTP-специфики:
- Статус-коды: Корректность кода ответа.
- Заголовки: Наличие и правильность
Content-Type,Cache-Control,ETag. - Методы: Проверка поддержки
GET,POST,PUT,PATCH,DELETE.
-
Тестирование граничных условий и бизнес-логики:
- Лимиты: Пагинация (
?page=1&limit=50). - Фильтрация и сортировка:
?status=active&sort=-created_at. - Валидация полей: Минимальная/максимальная длина строк, диапазоны чисел.
- Лимиты: Пагинация (
Инструменты для автоматизации:
- Postman/Newman: Для создания коллекций и запуска в CI.
- REST-assured (Java): Позволяет писать выразительные тесты на Groovy.
-
pytest + requests (Python): Гибкое решение для сложных сценариев.
import pytest import requests from jsonschema import validate BASE_URL = "https://api.example.com" USER_SCHEMA = { ... } # JSON Schema def test_get_user_positive(): response = requests.get(f"{BASE_URL}/users/1") assert response.status_code == 200 user_data = response.json() validate(instance=user_data, schema=USER_SCHEMA) # Валидация схемы assert user_data["id"] == 1 assert "name" in user_data
Интеграция: Такие тесты должны быть частью CI/CD пайплайна для раннего обнаружения регрессий.