Руководство по API тестированию
Обзор API
Проект использует FastAPI для создания REST API и WebSocket для real-time коммуникации.
API Слои
API Endpoints
1. Chat API (/api/chat)
POST /api/chat - Отправка сообщения
curl -X POST http://localhost:3000/api/chat \
-H "Content-Type: application/json" \
-d '{
"message": "Какой фильм посмотреть?",
"history": []
}'
Response (200):
Тест-кейсы: - TC-API-CHAT-001: Валидное сообщение - TC-API-CHAT-002: Пустое сообщение - TC-API-CHAT-003: Слишком длинное сообщение - TC-API-CHAT-004: Продолжение диалога с историей
2. Media API (/api/media)
GET /api/media/files - Список медиафайлов
Response (200):
POST /api/media/by-title - Поиск по названию
curl -X POST http://localhost:3000/api/media/by-title \
-H "Content-Type: application/json" \
-d '{"title": "Титаник", "type": "movie"}'
Response (200):
Тест-кейсы: - TC-API-MEDIA-001: Поиск существующего файла - TC-API-MEDIA-002: Поиск несуществующего файла - TC-API-MEDIA-003: Поиск по частичному названию - TC-API-MEDIA-004: Фильтрация по типу
3. Torrent API (/api/torrents)
GET /api/torrents - Список торрентов
Response (200):
[
{
"hash": "abc123",
"name": "Test Torrent",
"state": "Downloading",
"progress": 45.0,
"size": 1073741824
}
]
POST /api/torrents/download - Скачивание торрента
curl -X POST http://localhost:3000/api/torrents/download \
-H "Content-Type: application/json" \
-d '{
"url": "magnet:?xt=urn:btih:test",
"title": "Test",
"source": "1337x"
}'
Тест-кейсы: - TC-API-TORR-001: Скачивание magnet ссылки - TC-API-TORR-002: Скачивание .torrent файла - TC-API-TORR-003: Невалидная ссылка - TC-API-TORR-004: qBittorrent недоступен
4. Auth API (/api/auth)
POST /api/auth/login - Вход
curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "password123"
}'
Response (200):
{
"access_token": "jwt_token_here",
"token_type": "bearer",
"user": {
"email": "user@example.com",
"role": "user"
}
}
GET /api/auth/me - Текущий пользователь
Тест-кейсы: - TC-API-AUTH-001: Успешный вход - TC-API-AUTH-002: Неверный пароль - TC-API-AUTH-003: Невалидный токен - TC-API-AUTH-004: Получение профиля
5. Control API (/api/control)
WebSocket /api/control/ws - Real-time управление
Тест-кейсы: - TC-API-CTRL-001: Подключение к WebSocket - TC-API-CTRL-002: Отправка команды play - TC-API-CTRL-003: Отправка команды pause - TC-API-CTRL-004: Получение статуса
6. TTS API (/api/tts)
Тест-кейсы: - TC-API-TTS-001: Синтез речи edge-tts - TC-API-TTS-002: Синтез речи gtts - TC-API-TTS-003: Синтез речи silero
Инструменты для API тестирования
1. curl (командная строка)
# Тест эндпоинта
curl -X GET http://localhost:3000/api/media/files
# С заголовками
curl -X GET http://localhost:3000/api/media/files \
-H "Authorization: Bearer token"
# POST запрос
curl -X POST http://localhost:3000/api/chat \
-H "Content-Type: application/json" \
-d '{"message": "Hello"}'
2. httpie
# Установка
pip install httpie
# GET запрос
http GET http://localhost:3000/api/media/files
# POST запрос
http POST http://localhost:3000/api/chat \
message="Hello" \
history:='[]'
3. Postman
Импортируйте коллекцию из tests/postman_collection.json
4. Python requests
import requests
# GET запрос
response = requests.get('http://localhost:3000/api/media/files')
print(response.json())
# POST запрос
response = requests.post(
'http://localhost:3000/api/chat',
json={'message': 'Hello', 'history': []}
)
print(response.json())
Автоматизированное API тестирование
pytest + httpx
# tests/test_integration_api.py
def test_get_media_files():
response = client.get('/api/media/files')
assert response.status_code == 200
assert isinstance(response.json(), list)
Запуск API тестов
# Все API тесты
pytest tests/test_integration_api.py
# Конкретный API тест
pytest tests/test_integration_api.py::TestMediaAPI::test_get_media_files
# С детальным выводом
pytest tests/test_integration_api.py -v
Ошибки API
| Код | Описание | Решение |
|---|---|---|
| 400 | Bad Request | Проверьте входные данные |
| 401 | Unauthorized | Проверьте JWT токен |
| 403 | Forbidden | Проверьте права пользователя |
| 404 | Not Found | Проверьте путь |
| 500 | Internal Server Error | Проверьте логи сервера |
| 503 | Service Unavailable | Проверьте qBittorrent |