Ответ
Тестирование REST API фокусируется на проверке корректности, надежности и безопасности конечных точек.
Основные виды проверок и инструменты:
| Категория тестов | Что проверяет | Пример инструмента |
|---|---|---|
| Функциональные | Статус-коды, структура JSON, бизнес-логика | Postman, REST Assured, pytest + requests |
| Негативные/Валидация | Обработка неверных данных, граничные значения | Те же + параметризация в pytest |
| Авторизация/Аутентификация | Работа с токенами (JWT, OAuth), права доступа | Postman (коллекции с переменными) |
| Нагрузочные | Производительность и стабильность под нагрузкой | k6, JMeter |
Пример автотеста на Python (pytest + requests):
import requests
import pytest
BASE_URL = "https://api.example.com"
@pytest.mark.parametrize("user_id, expected_code", [(1, 200), (999, 404), ("invalid", 400)])
def test_get_user_status_code(user_id, expected_code):
"""Параметризованный тест на различные статус-коды."""
response = requests.get(f"{BASE_URL}/users/{user_id}")
assert response.status_code == expected_code
def test_create_user_idempotency():
"""Проверка идемпотентности POST-запроса."""
headers = {"Idempotency-Key": "test-key-123"}
payload = {"name": "John"}
first = requests.post(f"{BASE_URL}/users", json=payload, headers=headers)
second = requests.post(f"{BASE_URL}/users", json=payload, headers=headers)
# Идемпотентный запрос должен вернуть тот же ID или конфликт
assert first.status_code == second.status_code
if first.status_code == 201:
assert first.json()["id"] == second.json()["id"]
Дополнительные практики: Сверка с контрактом OpenAPI/Swagger, анализ логов и трафика через прокси (Charles/Fiddler).