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