brief-rags-bench/tests
itqop da2a67bc91 fixes 2025-12-25 10:16:33 +03:00
..
e2e chore: edit mds 2025-12-18 11:52:02 +03:00
integration chore: edit mds 2025-12-18 11:52:02 +03:00
unit fixes 2025-12-25 10:16:33 +03:00
README.md chore: edit mds 2025-12-18 11:52:02 +03:00
__init__.py v3 2025-12-18 02:24:00 +03:00
conftest.py fix datetime 2025-12-25 09:52:08 +03:00

README.md

Brief Bench Tests

Полная система тестирования для Brief Bench FastAPI.

Структура тестов

tests/
├── 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                       # Этот файл

Быстрый старт

1. Только Unit тесты (без внешних зависимостей)

# Windows
run_unit_tests.bat

# Linux/Mac
pytest tests/unit/ -v --cov=app --cov-report=term-missing

Результат: 119 тестов, 99% coverage

2. Integration тесты (требуется DB API)

# Windows
run_integration_tests.bat

# Linux/Mac
pytest tests/integration/ -v -m integration

⚙️ Требуется: DB API на http://localhost:8081

3. Все тесты

# Windows
run_all_tests.bat

# Linux/Mac
pytest tests/ -v

Установка

pip install -r requirements.txt
pip install -r requirements-dev.txt

Команды pytest

Базовые команды

# Все тесты
pytest

# Unit тесты
pytest tests/unit/

# Integration тесты
pytest tests/integration/

# С coverage
pytest --cov=app --cov-report=html

# Конкретный файл
pytest tests/unit/test_auth.py

# Конкретный тест
pytest tests/unit/test_auth.py::TestAuthEndpoints::test_login_success

# Verbose вывод
pytest -v

# Остановиться на первой ошибке
pytest -x

# Показать print statements
pytest -s

Покрытие тестами

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__" блок

Что тестируется

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:

# .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)