Ответ
Тестирование API — это тип тестирования программного обеспечения, который фокусируется на проверке программных интерфейсов приложений (Application Programming Interfaces) на корректность, надёжность, производительность и безопасность.
Основные виды тестирования API:
| Вид тестирования | Цель | Пример проверки |
|---|---|---|
| Функциональное | Проверить, что API работает согласно спецификации. | Эндпоинт POST /users создаёт пользователя и возвращает 201 Created. |
| Валидация данных | Проверить структуру и содержание запросов/ответов. | Ответ содержит все обязательные поля в правильном формате (JSON Schema). |
| Интеграционное | Проверить взаимодействие API с другими сервисами (БД, кэш, сторонние API). | После POST /orders запись появляется в базе данных и отправляется уведомление. |
| Нагрузочное (Load) | Оценить производительность под ожидаемой нагрузкой. | Эндпоинт GET /products обрабатывает 100 RPS с latency < 200 мс. |
| Тестирование безопасности | Выявить уязвимости. | Проверка авторизации (токены, API-ключи), инъекций, чувствительных данных в логах. |
| Тестирование на отказоустойчивость | Проверить поведение при сбоях зависимостей. | Как API ведёт себя при недоступности базы данных (graceful degradation). |
Пример комплексного теста на Python (с использованием requests и pytest):
import requests
import pytest
BASE_URL = "https://api.example.com"
# 1. Функциональный тест
def test_create_user():
payload = {"name": "John", "email": "john@example.com"}
response = requests.post(f"{BASE_URL}/users", json=payload)
assert response.status_code == 201
assert response.headers["Content-Type"] == "application/json"
user_data = response.json()
assert user_data["id"] is not None
assert user_data["name"] == payload["name"]
# Валидация по схеме (используя библиотеку jsonschema)
# 2. Тест валидации (негативный сценарий)
def test_create_user_invalid_email():
payload = {"name": "John", "email": "invalid-email"}
response = requests.post(f"{BASE_URL}/users", json=payload)
assert response.status_code == 400
error_data = response.json()
assert "email" in error_data.get("errors", {})
# 3. Тест безопасности (проверка авторизации)
def test_access_without_token():
response = requests.get(f"{BASE_URL}/admin/users")
assert response.status_code == 401 # Unauthorized
Инструменты: Postman, Insomnia (для ручного тестирования и создания коллекций), requests + pytest/unittest (для автоматизации), JMeter/Gatling (для нагрузочного тестирования).