Система Тестирования Saga¶
Полное руководство по тестированию DeFi-платформы Saga: от smoke тестов до Quality Gates
📖 Оглавление¶
- Обзор системы
- Команды тестирования
- Архитектура тестирования
- Quality Gates
- CI/CD интеграция
- Best Practices
- Troubleshooting
Обзор системы¶
Saga использует многоуровневую систему тестирования, основанную на принципе "Zero Tolerance for Errors":
Архитектурные принципы¶
- Пирамида тестирования: Integration (основа) → Unit (утилиты) → E2E (критические пути)
- Реальные тесты: Минимум моков, максимум реальных API вызовов
- Test-First Development: Тесты пишутся ДО реализации функциональности
- Silent is Golden: Тесты работают без лишнего шума в консоли
Уровни проверок¶
Quality Gates ← Полная блокировка при падениях
↑
Core тесты ← Обязательно для важных изменений
↑
Smoke тесты ← Обязательно для каждого коммита
↑
Unit тесты ← Покрытие сервисного слоя
Команды тестирования¶
Обязательные команды¶
| Команда | Время | Когда использовать |
|---|---|---|
make test-smoke (=make smoke) |
~8 сек | ПЕРЕД КАЖДЫМ КОММИТОМ |
make test-core (=make core) |
~1-2 мин | ПЕРЕД ВАЖНЫМИ ИЗМЕНЕНИЯМИ |
make quality-gates |
~5-8 мин | ПЕРЕД MERGE В MASTER |
Быстрые тесты¶
# Критические smoke тесты (8 секунд)
make test-smoke # alias
# или
make smoke # основная цель
# Unit тесты только backend (30 секунд)
make test-unit
# Тесты Makefile (2 секунды)
make test-makefile
Comprehensive тесты¶
# Core тесты: smoke + unit + frontend integration
make test-core # alias
# или
make core # основная цель
# E2E тесты - параллельные быстрые группы
make test-e2e-parallel-quick
# E2E тесты - параллельные тяжелые группы
make test-e2e-parallel-heavy
# Интеграционные тесты - все основные группы
make test-integration-groups
# Интеграционные тесты - быстрые без race detector
make test-integration-fast
# Интеграционные тесты с race detector
make test-integration-race
Полное тестирование¶
# Все доступные тесты (перед релизом)
make test-all
# Продвинутые методики тестирования
make test-advanced
💎 Продвинутые тесты¶
# Property-based тесты (математические инварианты)
make test-property
# Contract тесты (API совместимость)
make test-contracts
# Regression тесты (защита от повторения багов)
make test-regression
# Performance benchmarks
make test-performance
# Visual regression тесты
make test-visual
# Chaos engineering
make test-chaos
# Security scanning
make test-security
# Load testing
make test-load
Архитектура тестирования¶
Frontend тестирование¶
Технологический стек:
- Jest - unit и integration тесты
- React Testing Library - компонентное тестирование
- Playwright - E2E тестирование
Структура:
frontend/user-app/src/__tests__/
├── components/ # Компонентные тесты
├── integration/ # Integration тесты (приоритет)
├── real-components/ # Тесты с реальными API
├── property-based/ # Property-based тесты
├── performance/ # Performance benchmarks
├── security/ # Security сканирование
└── regression/ # Regression тесты
Backend тестирование¶
Технологический стек:
- Go testing - unit тесты
- testify - assertions и mock framework
- HTTPtest - HTTP тестирование
Структура:
backend/
├── tests/integration/ # Integration тесты (приоритет)
├── tests/e2e/ # E2E тесты
├── admin_api/*_test.go # Unit тесты admin API
├── auth/*_test.go # Unit тесты аутентификации
├── blockchain/*_test.go # Unit тесты блокчейн логики
└── storage/*_test.go # Unit тесты хранилища
E2E тестирование¶
Playwright E2E:
frontend/e2e/tests/
├── smoke/ # Smoke тесты (foundation)
├── e2e/
│ ├── user/ # Пользовательские сценарии
│ └── admin/ # Административные сценарии
├── testnet/ # Web3 testnet интеграция
└── visual/ # Visual regression
Поддомены локально (admin.saga.local / app.saga.local):
- По умолчанию тесты используют http://localhost:8080.
- Для проверки поддоменов выставляйте PLAYWRIGHT_BASE_URL:
- PLAYWRIGHT_BASE_URL=https://app.saga.local npm run test:e2e
- PLAYWRIGHT_BASE_URL=https://admin.saga.local npm run test:e2e
- Либо используйте путь /admin для админки при базовом URL http://localhost:8080.
Quality Gates¶
🚪 Что такое Quality Gates¶
Quality Gates - это автоматическая система блокировки кода при обнаружении проблем качества.
Принцип работы:
- Запускаются критические тесты
- При падении ЛЮБОГО теста → БЛОКИРОВКА
- Merge/Deploy возможен только при 100% прохождении
Команды Quality Gates¶
# Полные Quality Gates (5-8 минут)
make quality-gates
# Quality Gates для CI/CD (silent режим)
make quality-gates-ci
# Быстрые Quality Gates (только smoke)
make quality-gates-fast
Этапы проверки¶
- Critical Path Check - проверка покрытия критических путей
- Flaky Test Detection - обнаружение нестабильных тестов
- Smoke Tests - проверка базовой функциональности (90 сек timeout)
- Core Tests - проверка основных компонентов (180 сек timeout)
Git Hooks интеграция¶
Что настраивается:
- Pre-commit: Быстрые качественные проверки (~30-60 сек)
- Pre-push: Полные проверки для master, smoke для features
- Commit-msg: Валидация формата сообщений коммитов
CI/CD интеграция¶
🔇 Silent режимы для CI¶
# CI-версии команд (без цветного вывода, с JSON отчетами)
make test-smoke-ci # Smoke тесты для CI
make test-unit-ci # Unit тесты для CI
make test-core-ci # Core тесты для CI
make test-all-ci # Все тесты для CI
JSON отчеты¶
Локация отчетов: logs/reports/
logs/reports/
├── smoke-summary.json # Smoke тесты результат
├── unit-summary.json # Unit тесты результат
├── core-summary.json # Core тесты результат
└── quality-gates/
└── summary.json # Quality Gates результат
Пример JSON отчета:
{
"exit_code": 0,
"smoke": 0,
"unit": 0,
"core": 0,
"details": "smoke:0 unit:0 core:0",
"timestamp": "2025-07-03T11:37:05+03:00"
}
🚦 Exit codes¶
- 0 - Все тесты прошли ✅
- 1 - Найдены предупреждения ⚠️
- 2+ - Критические ошибки ❌
Best Practices¶
Написание тестов¶
ПРАВИЛЬНО¶
// Comprehensive тест с реальными API
test('User investment flow - полная интеграция', async () => {
const user = await createRealUser()
const investment = await createInvestment(user, '1000.0')
const result = await processInvestment(investment.id)
expect(result.status).toBe('active')
expect(result.amount).toBe('1000.0')
})
НЕПРАВИЛЬНО¶
// Shallow тест без реальной проверки
test('Component renders', () => {
const component = render(<Investment />)
expect(component).toBeTruthy() // Бесполезно!
})
Test-First Development¶
- Сначала пишем ПАДАЮЩИЙ тест
- Проверяем что тест падает с правильной ошибкой
- Пишем минимальный код для прохождения
- Рефакторим при прохождении тестов
Структура тестов¶
describe('InvestmentService', () => {
describe('createInvestment', () => {
it('should create investment with valid data', async () => {
// Arrange - подготовка данных
const userData = createTestUser()
// Act - выполнение действия
const result = await investmentService.create(userData)
// Assert - проверка результата
expect(result.status).toBe('pending')
})
})
})
🚫 Что НЕ тестировать¶
- Библиотечные функции -
expect(2+2).toBe(4) - Trivial геттеры/сеттеры
- Mock-heavy тесты - где все dependencies замокированы
- Duplicate функциональность - одно и то же в разных тестах
Troubleshooting¶
Частые проблемы¶
Frontend тесты падают с module errors¶
# Проверить, что пути к shared modules правильные
ls -la frontend/shared/lib/
# Обновить типы
make generate-types
# Очистить кеш Jest
cd frontend/user-app && npm test -- --clearCache
Backend тесты падают с DB errors¶
E2E тесты timeout¶
# Проверить что система запущена
make status
# Перезапустить систему
make restart
# Запустить параллельные E2E тесты (быстрые)
make test-e2e-parallel-quick
Debugging команды¶
# Проверка состояния системы
make status
# Перезапуск системы
make restart
# Проверка логов
tail -f logs/reports/core-frontend-user.log
# Запуск E2E тестов для отладки (используйте make команды)
make test-e2e-parallel-all # Полный E2E suite
Мониторинг качества¶
# Автоматический мониторинг качества
make test-quality-monitor
# Обнаружение нестабильных тестов
make test-flaky-detection
# Полный отчет по качеству
make test-quality-report
🚫 Что делать при падающих тестах¶
- НЕ УДАЛЯТЬ падающие тесты
- НЕ УПРОЩАТЬ до бессмысленности
- ИСПРАВИТЬ первопричину в коде
- Если не получается быстро - ОТКЛЮЧИТЬ временно через
test.skip() - ОБЯЗАТЕЛЬНО исправить перед коммитом
Метрики и мониторинг¶
Целевые показатели¶
- Smoke тесты: < 10 секунд
- Core тесты: < 2 минут
- Quality Gates: < 8 минут
- Unit test coverage: > 70% для service слоя
- E2E test coverage: 100% критических путей
Текущие результаты¶
После выполнения фаз очистки (июль 2025):
✅ Достигнуто:
- Smoke тесты: 8 секунд (цель: 10 сек) ✅
- Backend unit coverage:
- storage/service: 0.9%
- auth/service: 10.7%
- blockchain/service: 7.8%
- Zero console errors в production коде ✅
- Zero ESLint warnings в критических компонентах ✅
- Quality Gates полностью функциональны ✅
🔄 В процессе:
- Frontend integration тесты: некоторые падают из-за logger paths
- Core тесты: нужно исправить синтаксические ошибки
Дополнительная документация¶
- Makefile команды - все доступные команды
- CLAUDE.md - принципы разработки
- Test Planning - планирование тестирования
Задачи и улучшения: - Wallet Compatibility Test System (2025-10-13) - Автоматизированная система тестирования совместимости с MetaMask и другими кошельками
📋 Метаданные¶
Версия: 2.4.82
Обновлено: 2025-10-21
Статус: Published