# Integration Tests Интеграционные тесты для проверки взаимодействия Brief Bench FastAPI с реальным DB API. ## Предварительные требования ### 1. Запустите DB API DB API должен быть запущен и доступен перед выполнением интеграционных тестов. ```bash # Пример запуска DB API (из репозитория DB API) cd ../db-api-project uvicorn app.main:app --host localhost --port 8081 ``` ### 2. Настройте переменные окружения Создайте файл `.env.integration` в корне проекта: ```bash # DB API URL for integration tests TEST_DB_API_URL=http://localhost:8081/api/v1 # Test user login (8-digit) TEST_LOGIN=99999999 ``` Или установите переменные окружения напрямую: ```bash export TEST_DB_API_URL=http://localhost:8081/api/v1 export TEST_LOGIN=99999999 ``` ### 3. Создайте тестового пользователя в DB API Убедитесь, что пользователь с логином `99999999` существует в DB API или что DB API поддерживает автоматическое создание пользователей. ## Запуск тестов ### Все интеграционные тесты ```bash # Из корня проекта pytest tests/integration/ -v ``` ### Только unit тесты (без интеграционных) ```bash pytest tests/unit/ -v ``` ### Конкретный модуль ```bash # Тесты аутентификации 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 ```bash 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: ```yaml # .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 ``` ## Полезные команды ```bash # Запустить с детальным выводом 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 ``` ## Рекомендации 1. **Всегда запускайте интеграционные тесты перед деплоем** 2. **Используйте отдельную тестовую базу данных** для DB API 3. **Не запускайте интеграционные тесты на проде** - только на dev/staging 4. **Проверяйте логи DB API** при отладке проблем 5. **Очищайте тестовые данные** после каждого запуска