#!/bin/bash # Скрипт для запуска тестов AnonBot set -e echo "🧪 Запуск тестов AnonBot" echo "=========================" # Проверяем, что мы в правильной директории if [ ! -f "pytest.ini" ]; then echo "❌ Ошибка: pytest.ini не найден. Запустите скрипт из корневой директории проекта." exit 1 fi # Устанавливаем тестовые зависимости echo "📦 Установка тестовых зависимостей..." pip install -r tests/requirements.txt # Создаем тестовую БД в памяти export DATABASE_PATH=":memory:" export TELEGRAM_BOT_TOKEN="test_token" export ADMINS="123456789,987654321" export LOG_LEVEL="DEBUG" echo "🔧 Настройка тестового окружения..." # Функция для запуска тестов с покрытием run_tests_with_coverage() { local test_path="$1" local test_name="$2" echo "📊 Запуск $test_name с покрытием..." pytest "$test_path" \ --cov=. \ --cov-report=html \ --cov-report=term-missing \ --cov-fail-under=80 \ -v } # Функция для запуска тестов без покрытия run_tests() { local test_path="$1" local test_name="$2" echo "🚀 Запуск $test_name..." pytest "$test_path" -v } # Функция для запуска тестов по маркерам run_tests_by_marker() { local marker="$1" local test_name="$2" echo "🏷️ Запуск $test_name (маркер: $marker)..." pytest -m "$marker" -v } # Основное меню case "${1:-all}" in "all") echo "🎯 Запуск всех тестов..." run_tests_with_coverage "tests/" "всех тестов" ;; "unit") echo "🔬 Запуск unit тестов..." run_tests_with_coverage "tests/unit/" "unit тестов" ;; "integration") echo "🔗 Запуск интеграционных тестов..." run_tests "tests/integration/" "интеграционных тестов" ;; "models") echo "📊 Запуск тестов моделей..." run_tests "tests/unit/models/" "тестов моделей" ;; "validation") echo "✅ Запуск тестов валидации..." run_tests "tests/unit/services/validation/" "тестов валидации" ;; "auth") echo "🔐 Запуск тестов авторизации..." run_tests "tests/unit/services/auth/" "тестов авторизации" ;; "crud") echo "💾 Запуск тестов CRUD..." run_tests "tests/unit/database/" "тестов CRUD" ;; "services") echo "⚙️ Запуск тестов сервисов..." run_tests "tests/unit/services/" "тестов сервисов" ;; "handlers") echo "🎮 Запуск тестов обработчиков..." run_tests "tests/unit/handlers/" "тестов обработчиков" ;; "middleware") echo "🔧 Запуск тестов middleware..." run_tests "tests/unit/middlewares/" "тестов middleware" ;; "config") echo "⚙️ Запуск тестов конфигурации..." run_tests "tests/unit/config/" "тестов конфигурации" ;; "coverage") echo "📊 Генерация отчета о покрытии..." pytest --cov=. --cov-report=html --cov-report=term-missing -v echo "📁 Отчет сохранен в htmlcov/index.html" ;; "fast") echo "⚡ Быстрый запуск тестов..." pytest -x -v --tb=short ;; "debug") echo "🐛 Запуск тестов в режиме отладки..." pytest -v -s --pdb --tb=long ;; "help") echo "📖 Доступные команды:" echo " all - Запуск всех тестов с покрытием" echo " unit - Запуск unit тестов с покрытием" echo " integration - Запуск интеграционных тестов" echo " models - Запуск тестов моделей" echo " validation - Запуск тестов валидации" echo " auth - Запуск тестов авторизации" echo " crud - Запуск тестов CRUD" echo " services - Запуск тестов сервисов" echo " handlers - Запуск тестов обработчиков" echo " middleware - Запуск тестов middleware" echo " config - Запуск тестов конфигурации" echo " coverage - Генерация отчета о покрытии" echo " fast - Быстрый запуск тестов" echo " debug - Запуск в режиме отладки" echo " help - Показать эту справку" echo "" echo "Примеры использования:" echo " ./tests/run_tests.sh all" echo " ./tests/run_tests.sh unit" echo " ./tests/run_tests.sh models" echo " ./tests/run_tests.sh coverage" ;; *) echo "❌ Неизвестная команда: $1" echo "Используйте './tests/run_tests.sh help' для справки" exit 1 ;; esac echo "" echo "✅ Тесты завершены!"