brief-rags-bench/tests/integration/README.md

7.8 KiB
Raw Blame History

Integration Tests

Интеграционные тесты для проверки взаимодействия Brief Bench FastAPI с реальным DB API.

Предварительные требования

1. Запустите DB API

DB API должен быть запущен и доступен перед выполнением интеграционных тестов.

# Пример запуска DB API (из репозитория DB API)
cd ../db-api-project
uvicorn app.main:app --host localhost --port 8081

2. Настройте переменные окружения

Создайте файл .env.integration в корне проекта:

# DB API URL for integration tests
TEST_DB_API_URL=http://localhost:8081/api/v1

# Test user login (8-digit)
TEST_LOGIN=99999999

Или установите переменные окружения напрямую:

export TEST_DB_API_URL=http://localhost:8081/api/v1
export TEST_LOGIN=99999999

3. Создайте тестового пользователя в DB API

Убедитесь, что пользователь с логином 99999999 существует в DB API или что DB API поддерживает автоматическое создание пользователей.

Запуск тестов

Все интеграционные тесты

# Из корня проекта
pytest tests/integration/ -v

Только unit тесты (без интеграционных)

pytest tests/unit/ -v

Конкретный модуль

# Тесты аутентификации
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

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:

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

Полезные команды

# Запустить с детальным выводом
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. Очищайте тестовые данные после каждого запуска