7.9 KiB
Integration Tests
Интеграционные тесты для проверки взаимодействия Brief Bench FastAPI с реальным DB API.
Предварительные требования
1. Запустите DB API
DB API должен быть запущен и доступен перед выполнением интеграционных тестов.
# Пример запуска DB API (из репозитория DB API)
cd ../db-api-project
uvicorn app.main:app --host localhost --port 8081
2. Настройте переменные окружения
Создайте файл .env.integration в корне проекта:
# DB API URL for integration tests
TEST_DB_API_URL=http://localhost:8081/api/v1
# Test user login (8-digit)
TEST_LOGIN=99999999
Или установите переменные окружения напрямую:
export TEST_DB_API_URL=http://localhost:8081/api/v1
export TEST_LOGIN=99999999
3. Создайте тестового пользователя в DB API
Убедитесь, что пользователь с логином 99999999 существует в DB API или что DB API поддерживает автоматическое создание пользователей.
Запуск тестов
Все интеграционные тесты
# Из корня проекта
pytest tests/integration/ -v
Только unit тесты (без интеграционных)
pytest tests/unit/ -v
Конкретный модуль
# Тесты аутентификации
pytest tests/integration/test_auth_integration.py -v
# Тесты настроек
pytest tests/integration/test_settings_integration.py -v
# Тесты сессий анализа
pytest tests/integration/test_analysis_integration.py -v
# Тесты запросов (только DB API, без RAG)
pytest tests/integration/test_query_integration.py -v
С отметкой integration
pytest -m integration -v
Структура тестов
tests/integration/
├── conftest.py # Фикстуры для интеграционных тестов
├── README.md # Этот файл
├── test_auth_integration.py # Тесты аутентификации и JWT
├── test_settings_integration.py # Тесты управления настройками
├── test_analysis_integration.py # Тесты сессий анализа
└── test_query_integration.py # Тесты запросов (DB API часть)
Что тестируется
✅ Auth Integration (test_auth_integration.py)
- Успешная авторизация с реальным DB API
- Генерация и валидация JWT токенов
- Защита endpoint-ов с использованием JWT
- Обработка ошибок аутентификации
✅ Settings Integration (test_settings_integration.py)
- Получение настроек пользователя из DB API
- Обновление настроек для всех окружений (IFT, PSI, PROD)
- Частичное обновление настроек
- Персистентность настроек
- Проверка структуры данных настроек
✅ Analysis Integration (test_analysis_integration.py)
- Создание сессий анализа в DB API
- Получение списка сессий с фильтрацией
- Пагинация сессий
- Получение сессии по ID
- Удаление сессий
- Целостность данных (включая Unicode, вложенные структуры)
✅ Query Integration (test_query_integration.py)
- Получение настроек пользователя для запросов
- Проверка соответствия apiMode (bench/backend)
- Обновление настроек между запросами
- Примечание: RAG backend не вызывается (мокируется)
Что НЕ тестируется
❌ RAG Backend взаимодействие - требует запущенные RAG сервисы (IFT/PSI/PROD) ❌ mTLS сертификаты - требует реальные сертификаты ❌ Производительность - используйте отдельные performance тесты ❌ Нагрузочное тестирование - используйте инструменты типа Locust/K6
Troubleshooting
DB API не отвечает
httpx.ConnectError: [Errno 61] Connection refused
Решение: Убедитесь, что DB API запущен на http://localhost:8081
Тестовый пользователь не найден
404: User not found
Решение: Создайте пользователя с логином 99999999 в DB API или измените TEST_LOGIN в переменных окружения
JWT токен истек
401: Token expired
Решение: JWT токены имеют срок действия 30 дней. Тесты автоматически получают новые токены через фикстуру auth_token
Тесты не очищают данные
Фикстура clean_test_sessions автоматически очищает тестовые сессии после каждого теста. Если видите старые данные, это может быть из-за:
- Прерванных тестов (Ctrl+C)
- Ошибок в DB API
Решение: Удалите тестовые данные вручную через DB API или базу данных
CI/CD Integration
Для запуска в CI/CD pipeline:
# .github/workflows/integration-tests.yml
name: Integration Tests
on: [push, pull_request]
jobs:
integration-tests:
runs-on: ubuntu-latest
services:
db-api:
image: your-db-api-image:latest
ports:
- 8081:8081
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.12'
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install -r requirements-dev.txt
- name: Run integration tests
env:
TEST_DB_API_URL: http://localhost:8081/api/v1
TEST_LOGIN: 99999999
run: pytest tests/integration/ -v
Полезные команды
# Запустить с детальным выводом
pytest tests/integration/ -vv
# Показать print statements
pytest tests/integration/ -v -s
# Остановить на первой ошибке
pytest tests/integration/ -v -x
# Запустить только неуспешные тесты из прошлого запуска
pytest tests/integration/ -v --lf
# Запустить конкретный тест
pytest tests/integration/test_auth_integration.py::TestAuthIntegration::test_login_success -v
# Показать coverage (только для интеграционных тестов)
pytest tests/integration/ --cov=app --cov-report=term-missing
Рекомендации
- Всегда запускайте интеграционные тесты перед деплоем
- Используйте отдельную тестовую базу данных для DB API
- Не запускайте интеграционные тесты на проде - только на dev/staging
- Проверяйте логи DB API при отладке проблем
- Очищайте тестовые данные после каждого запуска