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

228 lines
7.8 KiB
Markdown
Raw Normal View History

2025-12-18 08:00:04 +01:00
# 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 часть)
```
## Что тестируется
2025-12-18 09:52:02 +01:00
### Auth Integration (`test_auth_integration.py`)
2025-12-18 08:00:04 +01:00
- Успешная авторизация с реальным DB API
- Генерация и валидация JWT токенов
- Защита endpoint-ов с использованием JWT
- Обработка ошибок аутентификации
2025-12-18 09:52:02 +01:00
### Settings Integration (`test_settings_integration.py`)
2025-12-18 08:00:04 +01:00
- Получение настроек пользователя из DB API
- Обновление настроек для всех окружений (IFT, PSI, PROD)
- Частичное обновление настроек
- Персистентность настроек
- Проверка структуры данных настроек
2025-12-18 09:52:02 +01:00
### Analysis Integration (`test_analysis_integration.py`)
2025-12-18 08:00:04 +01:00
- Создание сессий анализа в DB API
- Получение списка сессий с фильтрацией
- Пагинация сессий
- Получение сессии по ID
- Удаление сессий
- Целостность данных (включая Unicode, вложенные структуры)
2025-12-18 09:52:02 +01:00
### Query Integration (`test_query_integration.py`)
2025-12-18 08:00:04 +01:00
- Получение настроек пользователя для запросов
- Проверка соответствия apiMode (bench/backend)
- Обновление настроек между запросами
- **Примечание:** RAG backend не вызывается (мокируется)
## Что НЕ тестируется
2025-12-18 09:52:02 +01:00
**RAG Backend взаимодействие** - требует запущенные RAG сервисы (IFT/PSI/PROD)
**mTLS сертификаты** - требует реальные сертификаты
**Производительность** - используйте отдельные performance тесты
**Нагрузочное тестирование** - используйте инструменты типа Locust/K6
2025-12-18 08:00:04 +01:00
## 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. **Очищайте тестовые данные** после каждого запуска