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