brief-rags-bench/tests/integration/README.md

228 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. **Очищайте тестовые данные** после каждого запуска