2025-12-18 00:24:00 +01:00
|
|
|
|
# Brief Bench Tests
|
|
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
Полная система тестирования для Brief Bench FastAPI.
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
## Структура тестов
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
tests/
|
2025-12-18 08:00:04 +01:00
|
|
|
|
├── unit/ # Unit тесты (моки, изоляция)
|
|
|
|
|
|
│ ├── conftest.py # Фикстуры для unit тестов
|
|
|
|
|
|
│ ├── test_analysis.py # Тесты analysis endpoints
|
|
|
|
|
|
│ ├── test_auth.py # Тесты аутентификации
|
|
|
|
|
|
│ ├── test_base_interface.py # Тесты TgBackendInterface
|
|
|
|
|
|
│ ├── test_db_api_client.py # Тесты DB API клиента
|
|
|
|
|
|
│ ├── test_dependencies.py # Тесты dependencies
|
|
|
|
|
|
│ ├── test_main.py # Тесты main endpoints
|
|
|
|
|
|
│ ├── test_models.py # Тесты Pydantic моделей
|
|
|
|
|
|
│ ├── test_query.py # Тесты query endpoints
|
|
|
|
|
|
│ ├── test_security.py # Тесты JWT security
|
|
|
|
|
|
│ └── test_settings.py # Тесты settings endpoints
|
|
|
|
|
|
│
|
|
|
|
|
|
├── integration/ # Integration тесты (реальный DB API)
|
|
|
|
|
|
│ ├── conftest.py # Фикстуры для integration тестов
|
|
|
|
|
|
│ ├── README.md # Документация integration тестов
|
|
|
|
|
|
│ ├── .env.integration.example # Пример конфигурации
|
|
|
|
|
|
│ ├── test_auth_integration.py
|
|
|
|
|
|
│ ├── test_settings_integration.py
|
|
|
|
|
|
│ ├── test_analysis_integration.py
|
|
|
|
|
|
│ └── test_query_integration.py
|
|
|
|
|
|
│
|
|
|
|
|
|
└── README.md # Этот файл
|
2025-12-18 00:24:00 +01:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
## Быстрый старт
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
### 1. Только Unit тесты (без внешних зависимостей)
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-12-18 08:00:04 +01:00
|
|
|
|
# Windows
|
|
|
|
|
|
run_unit_tests.bat
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
# Linux/Mac
|
|
|
|
|
|
pytest tests/unit/ -v --cov=app --cov-report=term-missing
|
2025-12-18 00:24:00 +01:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
✅ **Результат:** 119 тестов, 99% coverage
|
|
|
|
|
|
|
|
|
|
|
|
### 2. Integration тесты (требуется DB API)
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-12-18 08:00:04 +01:00
|
|
|
|
# Windows
|
|
|
|
|
|
run_integration_tests.bat
|
|
|
|
|
|
|
|
|
|
|
|
# Linux/Mac
|
|
|
|
|
|
pytest tests/integration/ -v -m integration
|
2025-12-18 00:24:00 +01:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
⚙️ **Требуется:** DB API на http://localhost:8081
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
### 3. Все тесты
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-12-18 08:00:04 +01:00
|
|
|
|
# Windows
|
|
|
|
|
|
run_all_tests.bat
|
|
|
|
|
|
|
|
|
|
|
|
# Linux/Mac
|
|
|
|
|
|
pytest tests/ -v
|
2025-12-18 00:24:00 +01:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
## Установка
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-12-18 08:00:04 +01:00
|
|
|
|
pip install -r requirements.txt
|
|
|
|
|
|
pip install -r requirements-dev.txt
|
2025-12-18 00:24:00 +01:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
## Команды pytest
|
|
|
|
|
|
|
|
|
|
|
|
### Базовые команды
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-12-18 08:00:04 +01:00
|
|
|
|
# Все тесты
|
|
|
|
|
|
pytest
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
# Unit тесты
|
|
|
|
|
|
pytest tests/unit/
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
# Integration тесты
|
|
|
|
|
|
pytest tests/integration/
|
|
|
|
|
|
|
|
|
|
|
|
# С coverage
|
|
|
|
|
|
pytest --cov=app --cov-report=html
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
# Конкретный файл
|
|
|
|
|
|
pytest tests/unit/test_auth.py
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
2025-12-18 08:00:04 +01:00
|
|
|
|
# Конкретный тест
|
|
|
|
|
|
pytest tests/unit/test_auth.py::TestAuthEndpoints::test_login_success
|
|
|
|
|
|
|
|
|
|
|
|
# Verbose вывод
|
|
|
|
|
|
pytest -v
|
|
|
|
|
|
|
|
|
|
|
|
# Остановиться на первой ошибке
|
|
|
|
|
|
pytest -x
|
|
|
|
|
|
|
|
|
|
|
|
# Показать print statements
|
|
|
|
|
|
pytest -s
|
|
|
|
|
|
```
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
2025-12-18 09:52:02 +01:00
|
|
|
|
## Покрытие тестами
|
2025-12-18 08:00:04 +01:00
|
|
|
|
|
|
|
|
|
|
### Unit Tests: **99%** (567 строк, 4 непокрыто)
|
|
|
|
|
|
|
|
|
|
|
|
| Модуль | Coverage | Тесты |
|
|
|
|
|
|
|--------|----------|-------|
|
|
|
|
|
|
| app/api/v1/analysis.py | 100% | 20 |
|
|
|
|
|
|
| app/api/v1/auth.py | 100% | 6 |
|
|
|
|
|
|
| app/api/v1/query.py | 97% | 10 |
|
|
|
|
|
|
| app/api/v1/settings.py | 100% | 14 |
|
|
|
|
|
|
| app/dependencies.py | 100% | 6 |
|
|
|
|
|
|
| app/interfaces/base.py | 100% | 24 |
|
|
|
|
|
|
| app/interfaces/db_api_client.py | 100% | 8 |
|
|
|
|
|
|
| app/services/rag_service.py | 100% | 17 |
|
|
|
|
|
|
| app/services/auth_service.py | 100% | 3 |
|
|
|
|
|
|
| app/utils/security.py | 100% | 5 |
|
|
|
|
|
|
| app/models/*.py | 100% | 14 |
|
|
|
|
|
|
| app/main.py | 92% | 3 |
|
|
|
|
|
|
|
|
|
|
|
|
**Непокрытые строки (4):**
|
|
|
|
|
|
- `query.py:190-191` - Logger в exception handler
|
|
|
|
|
|
- `main.py:56-57` - `if __name__ == "__main__"` блок
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
## Что тестируется
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Authentication (test_auth.py)
|
2025-12-18 09:52:02 +01:00
|
|
|
|
- Успешная авторизация с валидным 8-значным логином
|
|
|
|
|
|
- Отклонение невалидных форматов логина
|
|
|
|
|
|
- Обработка ошибок DB API
|
|
|
|
|
|
- Генерация JWT токенов
|
|
|
|
|
|
- Валидация токенов
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
### 2. Settings (test_settings.py)
|
2025-12-18 09:52:02 +01:00
|
|
|
|
- Получение настроек пользователя
|
|
|
|
|
|
- Обновление настроек
|
|
|
|
|
|
- Обработка несуществующих пользователей
|
|
|
|
|
|
- Валидация формата настроек
|
|
|
|
|
|
- Требование авторизации
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
### 3. Query (test_query.py)
|
2025-12-18 09:52:02 +01:00
|
|
|
|
- Bench mode запросы
|
|
|
|
|
|
- Backend mode запросы
|
|
|
|
|
|
- Валидация окружений (ift/psi/prod)
|
|
|
|
|
|
- Проверка соответствия apiMode
|
|
|
|
|
|
- Обработка ошибок RAG backend
|
|
|
|
|
|
- Построение headers для RAG
|
|
|
|
|
|
- Session reset в Backend mode
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
### 4. Analysis (test_analysis.py)
|
2025-12-18 09:52:02 +01:00
|
|
|
|
- Создание сессий анализа
|
|
|
|
|
|
- Получение списка сессий
|
|
|
|
|
|
- Фильтрация по окружению
|
|
|
|
|
|
- Пагинация
|
|
|
|
|
|
- Получение конкретной сессии
|
|
|
|
|
|
- Удаление сессии
|
|
|
|
|
|
- Требование авторизации
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
### 5. Security (test_security.py)
|
2025-12-18 09:52:02 +01:00
|
|
|
|
- Создание JWT токенов
|
|
|
|
|
|
- Декодирование токенов
|
|
|
|
|
|
- Обработка невалидных токенов
|
|
|
|
|
|
- Обработка истекших токенов
|
|
|
|
|
|
- Кастомное время жизни токенов
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
### 6. Models (test_models.py)
|
2025-12-18 09:52:02 +01:00
|
|
|
|
- Валидация LoginRequest (8 цифр)
|
|
|
|
|
|
- Валидация QuestionRequest
|
|
|
|
|
|
- Валидация BenchQueryRequest
|
|
|
|
|
|
- Валидация BackendQueryRequest
|
|
|
|
|
|
- Валидация EnvironmentSettings
|
|
|
|
|
|
- Дефолтные значения
|
2025-12-18 00:24:00 +01:00
|
|
|
|
|
|
|
|
|
|
## Моки
|
|
|
|
|
|
|
|
|
|
|
|
Все внешние зависимости замоканы:
|
|
|
|
|
|
|
|
|
|
|
|
- **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)
|