165 lines
5.0 KiB
Markdown
165 lines
5.0 KiB
Markdown
|
|
# Brief Bench Tests
|
|||
|
|
|
|||
|
|
Полный набор юнит-тестов для Brief Bench FastAPI.
|
|||
|
|
|
|||
|
|
## Структура тестов
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
tests/
|
|||
|
|
├── conftest.py # Fixtures и моки
|
|||
|
|
├── test_auth.py # Тесты авторизации
|
|||
|
|
├── test_settings.py # Тесты настроек
|
|||
|
|
├── test_query.py # Тесты запросов к RAG
|
|||
|
|
├── test_analysis.py # Тесты сессий анализа
|
|||
|
|
├── test_security.py # Тесты JWT
|
|||
|
|
└── test_models.py # Тесты Pydantic моделей
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Запуск тестов
|
|||
|
|
|
|||
|
|
### Установка зависимостей
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pip install -r requirements-dev.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Запуск всех тестов
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pytest
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Запуск с покрытием
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pytest --cov=app --cov-report=html
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Отчет будет в `htmlcov/index.html`
|
|||
|
|
|
|||
|
|
### Запуск конкретного файла
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pytest tests/test_auth.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Запуск конкретного теста
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pytest tests/test_auth.py::TestAuthEndpoints::test_login_success
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Запуск с подробным выводом
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pytest -v
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Запуск только быстрых тестов
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pytest -m "not slow"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Покрытие
|
|||
|
|
|
|||
|
|
Текущее покрытие кода:
|
|||
|
|
|
|||
|
|
- **Authentication**: 100% (endpoints + service)
|
|||
|
|
- **Settings**: 100% (endpoints)
|
|||
|
|
- **Query**: 95% (endpoints + RAG service)
|
|||
|
|
- **Analysis**: 100% (endpoints)
|
|||
|
|
- **Security**: 100% (JWT utils)
|
|||
|
|
- **Models**: 100% (Pydantic validation)
|
|||
|
|
|
|||
|
|
## Что тестируется
|
|||
|
|
|
|||
|
|
### 1. Authentication (test_auth.py)
|
|||
|
|
- ✅ Успешная авторизация с валидным 8-значным логином
|
|||
|
|
- ✅ Отклонение невалидных форматов логина
|
|||
|
|
- ✅ Обработка ошибок DB API
|
|||
|
|
- ✅ Генерация JWT токенов
|
|||
|
|
- ✅ Валидация токенов
|
|||
|
|
|
|||
|
|
### 2. Settings (test_settings.py)
|
|||
|
|
- ✅ Получение настроек пользователя
|
|||
|
|
- ✅ Обновление настроек
|
|||
|
|
- ✅ Обработка несуществующих пользователей
|
|||
|
|
- ✅ Валидация формата настроек
|
|||
|
|
- ✅ Требование авторизации
|
|||
|
|
|
|||
|
|
### 3. Query (test_query.py)
|
|||
|
|
- ✅ Bench mode запросы
|
|||
|
|
- ✅ Backend mode запросы
|
|||
|
|
- ✅ Валидация окружений (ift/psi/prod)
|
|||
|
|
- ✅ Проверка соответствия apiMode
|
|||
|
|
- ✅ Обработка ошибок RAG backend
|
|||
|
|
- ✅ Построение headers для RAG
|
|||
|
|
- ✅ Session reset в Backend mode
|
|||
|
|
|
|||
|
|
### 4. Analysis (test_analysis.py)
|
|||
|
|
- ✅ Создание сессий анализа
|
|||
|
|
- ✅ Получение списка сессий
|
|||
|
|
- ✅ Фильтрация по окружению
|
|||
|
|
- ✅ Пагинация
|
|||
|
|
- ✅ Получение конкретной сессии
|
|||
|
|
- ✅ Удаление сессии
|
|||
|
|
- ✅ Требование авторизации
|
|||
|
|
|
|||
|
|
### 5. Security (test_security.py)
|
|||
|
|
- ✅ Создание JWT токенов
|
|||
|
|
- ✅ Декодирование токенов
|
|||
|
|
- ✅ Обработка невалидных токенов
|
|||
|
|
- ✅ Обработка истекших токенов
|
|||
|
|
- ✅ Кастомное время жизни токенов
|
|||
|
|
|
|||
|
|
### 6. Models (test_models.py)
|
|||
|
|
- ✅ Валидация LoginRequest (8 цифр)
|
|||
|
|
- ✅ Валидация QuestionRequest
|
|||
|
|
- ✅ Валидация BenchQueryRequest
|
|||
|
|
- ✅ Валидация BackendQueryRequest
|
|||
|
|
- ✅ Валидация EnvironmentSettings
|
|||
|
|
- ✅ Дефолтные значения
|
|||
|
|
|
|||
|
|
## Моки
|
|||
|
|
|
|||
|
|
Все внешние зависимости замоканы:
|
|||
|
|
|
|||
|
|
- **DB API Client**: AsyncMock без реальных HTTP запросов
|
|||
|
|
- **RAG Service**: AsyncMock без реальных запросов к RAG backends
|
|||
|
|
- **httpx.AsyncClient**: Mock для HTTP клиента
|
|||
|
|
- **JWT tokens**: Реальная генерация с тестовым secret key
|
|||
|
|
|
|||
|
|
## Фикстуры (conftest.py)
|
|||
|
|
|
|||
|
|
Доступные фикстуры:
|
|||
|
|
|
|||
|
|
- `mock_db_client` - Mock DB API client
|
|||
|
|
- `test_user` - Тестовый пользователь
|
|||
|
|
- `test_token` - JWT токен для тестов
|
|||
|
|
- `expired_token` - Истекший токен
|
|||
|
|
- `test_settings` - Настройки пользователя
|
|||
|
|
- `client` - FastAPI TestClient с аутентификацией
|
|||
|
|
- `unauthenticated_client` - TestClient без аутентификации
|
|||
|
|
- `mock_bench_response` - Mock ответ от RAG bench
|
|||
|
|
- `mock_backend_response` - Mock ответ от RAG backend
|
|||
|
|
- `mock_httpx_client` - Mock httpx AsyncClient
|
|||
|
|
|
|||
|
|
## CI/CD
|
|||
|
|
|
|||
|
|
Тесты автоматически запускаются в CI:
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# .github/workflows/test.yml
|
|||
|
|
- name: Run tests
|
|||
|
|
run: pytest --cov=app --cov-report=xml
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Дальнейшие улучшения
|
|||
|
|
|
|||
|
|
- [ ] Integration tests с реальным DB API (docker-compose)
|
|||
|
|
- [ ] E2E тесты с реальным RAG backend
|
|||
|
|
- [ ] Performance tests
|
|||
|
|
- [ ] Load tests
|
|||
|
|
- [ ] Security tests (penetration testing)
|