UNPKG

playwright-ai-auto-debug

Version:

Automatic Playwright test debugging with AI assistance + UI Test Coverage Analysis

263 lines (212 loc) 11.7 kB
# 🏗️ Clean Architecture - Новая версия **Модульная расширяемая архитектура для Playwright AI Auto-Debug** ## 🎯 Обзор архитектуры Версия 1.3.0+ полностью переработана с использованием принципов **Clean Architecture** и **Domain-Driven Design** для создания масштабируемой и тестируемой системы. ### ❌ Проблемы старой архитектуры: - Монолитная структура (225+ строк в одном файле) - Смешанная ответственность модулей - Тесная связанность компонентов - Отсутствие абстракций - Сложное тестирование - Процедурный стиль программирования ### ✅ Решения новой архитектуры: - **Clean Architecture** с четким разделением слоев - **Domain-Driven Design** с rich domain entities - **Dependency Injection** для управления зависимостями - **Strategy Pattern** для AI провайдеров - **Observer Pattern** для отчетности - **Command Pattern** для MCP действий - Полное покрытие тестами - Модульная расширяемая структура ## 📁 Структура проекта ``` src/ ├── domain/ # 🏛️ Доменный слой │ ├── entities/ # Доменные сущности │ │ ├── TestError.js # Ошибка теста с бизнес-логикой │ │ ├── AIResponse.js # Ответ ИИ с анализом │ │ └── Report.js # Отчет с метриками │ ├── repositories/ # Интерфейсы репозиториев │ │ ├── IAIProvider.js # Интерфейс AI провайдера │ │ ├── IErrorRepository.js # Интерфейс репозитория ошибок │ │ └── IReporter.js # Интерфейс репортера │ └── services/ # Доменные сервисы │ └── ErrorAnalysisService.js # Анализ ошибок │ ├── application/ # 🎯 Слой приложения │ ├── usecases/ # Use Cases (бизнес-логика) │ │ └── AnalyzeTestErrorsUseCase.js │ └── services/ # Сервисы приложения │ └── TestDebugService.js # Главный сервис │ ├── infrastructure/ # 🔧 Инфраструктурный слой │ ├── ai/ # AI провайдеры │ │ ├── MistralProvider.js # Mistral AI │ │ ├── OpenAIProvider.js # OpenAI GPT │ │ └── ClaudeProvider.js # Anthropic Claude │ ├── repositories/ # Реализации репозиториев │ │ └── FileErrorRepository.js # Файловый репозиторий │ ├── reporters/ # Репортеры │ │ ├── HTMLReporter.js # HTML отчеты │ │ ├── AllureReporter.js # Allure интеграция │ │ └── MarkdownReporter.js # Markdown отчеты │ ├── mcp/ # MCP интеграция │ │ └── McpClient.js # MCP клиент │ ├── config/ # Конфигурация │ │ └── ConfigLoader.js # Загрузчик конфигурации │ └── di/ # Dependency Injection │ ├── Container.js # DI контейнер │ └── bindings.js # Конфигурация зависимостей │ ├── presentation/ # 🖥️ Слой представления │ └── cli/ # CLI интерфейс │ └── CliApplication.js # CLI приложение │ └── main.js # 🚀 Точка входа ``` ## 🚀 Использование новой архитектуры ### Через новый CLI (рекомендуется) ```bash # Анализ ошибок тестов node src/main.js debug # С MCP интеграцией node src/main.js debug --use-mcp # Информация о системе node src/main.js info # Интерактивная настройка node src/main.js setup # Справка по командам node src/main.js --help ``` ### Программное использование ```javascript // Использование в коде import { getContainer } from './src/infrastructure/di/Container.js'; async function analyzeMyTests() { const container = getContainer(); const testDebugService = await container.get('testDebugService'); const results = await testDebugService.debugTests('./my-project', { useMcp: true }); console.log(`Обработано ${results.processedCount} ошибок`); } ``` ### Демонстрация архитектуры ```bash # Запуск примера новой архитектуры node example-new-architecture.js ``` ## 🏛️ Архитектурные принципы ### 1. Clean Architecture - **Domain Layer**: Содержит бизнес-логику и правила - **Application Layer**: Оркестрирует Use Cases - **Infrastructure Layer**: Внешние зависимости и реализации - **Presentation Layer**: UI/CLI интерфейсы ### 2. Domain-Driven Design - **Rich Domain Entities**: Сущности содержат бизнес-логику - **Value Objects**: Неизменяемые объекты значений - **Domain Services**: Сложная доменная логика - **Repositories**: Абстракция доступа к данным ### 3. Dependency Injection ```javascript // Пример использования DI const container = getContainer(); const testDebugService = await container.get('testDebugService'); const results = await testDebugService.debugTests('./project'); ``` ### 4. Strategy Pattern для AI ```javascript // Легко добавить новый AI провайдер class NewAIProvider extends IAIProvider { async generateResponse(prompt, config, domSnapshot) { // Реализация нового провайдера } } // Регистрируем в DI контейнере container.bind('newAiProvider', () => new NewAIProvider()); ``` ## 🔧 Расширение системы ### Добавление нового AI провайдера 1. Создайте класс, реализующий `IAIProvider`: ```javascript // src/infrastructure/ai/MyAIProvider.js import { IAIProvider } from '../../domain/repositories/IAIProvider.js'; export class MyAIProvider extends IAIProvider { async generateResponse(prompt, config, domSnapshot) { // Ваша реализация } getProviderName() { return 'My AI'; } getSupportedModels() { return ['my-model']; } } ``` 2. Зарегистрируйте в DI контейнере: ```javascript // src/infrastructure/di/bindings.js container.bind('myAiProvider', () => new MyAIProvider()); ``` ### Добавление нового репортера 1. Реализуйте интерфейс `IReporter` 2. Зарегистрируйте в `ReporterManager` 3. Настройте в конфигурации ## 🧪 Тестирование Новая архитектура обеспечивает отличную тестируемость: ```javascript // Пример unit теста describe('TestError', () => { test('should detect error type correctly', () => { const error = new TestError('test.js', 'AssertionError: expected...'); expect(error.errorType).toBe('assertion_error'); }); }); // Пример integration теста с моками describe('AnalyzeTestErrorsUseCase', () => { test('should analyze errors correctly', async () => { const mockAiProvider = { generateResponse: jest.fn() }; const useCase = new AnalyzeTestErrorsUseCase( mockErrorRepo, mockAiProvider, mockReporter ); const result = await useCase.execute(request); expect(result.success).toBe(true); }); }); ``` ## 📊 Мониторинг и метрики ### Health Checks ```javascript const service = await container.get('testDebugService'); const health = await service.healthCheck(); console.log(health.status); // 'healthy' | 'unhealthy' ``` ### Метрики производительности - Время анализа каждого файла - Успешность AI запросов - Качество рекомендаций - Использование ресурсов ## 🔄 Миграция со старой версии 1. **Постепенная миграция**: Старая версия остается в `lib/`, новая в `src/` 2. **Совместимость**: CLI команды остаются теми же 3. **Конфигурация**: Использует ту же конфигурацию 4. **Данные**: Совместим с существующими отчетами ## 🎯 Преимущества новой архитектуры ### Для разработчиков: - 🧪 **Тестируемость**: Все компоненты легко тестируются изолированно - 🔧 **Модульность**: Изменения в одном слое не влияют на другие - 📖 **Читаемость**: Четкая структура и разделение ответственности - 🚀 **Расширяемость**: Новые функции добавляются без изменения существующего кода ### Для бизнеса: - ⚡ **Производительность**: Оптимизированные зависимости и ленивая загрузка - 🛡️ **Надежность**: Строгая типизация и валидация - 📊 **Мониторинг**: Встроенные метрики и health checks - 🔄 **Масштабируемость**: Легко добавлять новые AI провайдеры и функции ## 🤝 Участие в разработке 1. Изучите архитектуру в `docs/NEW_ARCHITECTURE.md` 2. Запустите `node example-new-architecture.js` для понимания 3. Создайте feature branch 4. Добавьте тесты для новой функциональности 5. Следуйте принципам Clean Architecture ## 📚 Дополнительные ресурсы - [Clean Architecture by Robert Martin](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) - [Domain-Driven Design](https://martinfowler.com/bliki/DomainDrivenDesign.html) - [Dependency Injection Patterns](https://martinfowler.com/articles/injection.html) --- **🏗️ Эта архитектура создана для долгосрочного развития и масштабирования проекта Playwright AI Auto-Debug**