feat: добавлены инструменты анализа покрытия тестами
- Создан скрипт scripts/coverage.sh для автоматизированного анализа - Добавлена документация COVERAGE.md с детальным анализом - Текущее покрытие: 9.6% (низкое, нуждается в улучшении) Инструменты: - go test ./... -cover - быстрый анализ - go tool cover -func=coverage.out - детальная статистика - ./scripts/coverage.sh --html - HTML отчет - ./scripts/coverage.sh --threshold=80 - с порогом покрытия Рекомендации по улучшению: 1. Handlers (0% покрытия) - приоритет 1 2. Service Layer (0% покрытия) - приоритет 1 3. Middleware (0% покрытия) - приоритет 2 4. Repository (24.5% покрытия) - приоритет 2 5. Config & Database (0% покрытия) - приоритет 3 Цель: довести покрытие до 70%+
This commit is contained in:
151
core-service/COVERAGE.md
Normal file
151
core-service/COVERAGE.md
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
# 📊 Анализ покрытия тестами
|
||||||
|
|
||||||
|
## 🎯 Обзор
|
||||||
|
|
||||||
|
Текущее покрытие тестами: **9.6%**
|
||||||
|
|
||||||
|
### 📈 Статистика по пакетам
|
||||||
|
|
||||||
|
| Пакет | Покрытие | Статус |
|
||||||
|
|-------|----------|--------|
|
||||||
|
| `internal/auth` | 88.2% | ✅ Хорошо |
|
||||||
|
| `internal/repository` | 24.5% | ⚠️ Низкое |
|
||||||
|
| `internal/api/handlers` | 0.0% | ❌ Нет тестов |
|
||||||
|
| `internal/service` | 0.0% | ❌ Нет тестов |
|
||||||
|
| `internal/api/middleware` | 0.0% | ❌ Нет тестов |
|
||||||
|
| `internal/config` | 0.0% | ❌ Нет тестов |
|
||||||
|
| `internal/database` | 0.0% | ❌ Нет тестов |
|
||||||
|
| `internal/logger` | 0.0% | ❌ Нет тестов |
|
||||||
|
|
||||||
|
## 🛠️ Инструменты анализа
|
||||||
|
|
||||||
|
### 1. Быстрый анализ покрытия
|
||||||
|
```bash
|
||||||
|
# Общая статистика
|
||||||
|
go test ./... -cover
|
||||||
|
|
||||||
|
# Детальная статистика по функциям
|
||||||
|
go test ./... -coverprofile=coverage.out
|
||||||
|
go tool cover -func=coverage.out
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. HTML отчет
|
||||||
|
```bash
|
||||||
|
# Генерация HTML отчета
|
||||||
|
go test ./... -coverprofile=coverage.out
|
||||||
|
go tool cover -html=coverage.out -o coverage.html
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Автоматизированный анализ
|
||||||
|
```bash
|
||||||
|
# Использование скрипта анализа
|
||||||
|
./scripts/coverage.sh
|
||||||
|
|
||||||
|
# С HTML отчетом
|
||||||
|
./scripts/coverage.sh --html
|
||||||
|
|
||||||
|
# С кастомным порогом
|
||||||
|
./scripts/coverage.sh --threshold=80 --html
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📋 Рекомендации по улучшению
|
||||||
|
|
||||||
|
### 🔥 Приоритет 1 (Критично)
|
||||||
|
1. **Handlers (0% покрытия)**
|
||||||
|
- Добавить unit тесты для всех HTTP handlers
|
||||||
|
- Тестировать валидацию входных данных
|
||||||
|
- Тестировать обработку ошибок
|
||||||
|
|
||||||
|
2. **Service Layer (0% покрытия)**
|
||||||
|
- Добавить unit тесты для бизнес-логики
|
||||||
|
- Тестировать взаимодействие с репозиториями
|
||||||
|
- Тестировать обработку ошибок
|
||||||
|
|
||||||
|
### ⚠️ Приоритет 2 (Важно)
|
||||||
|
3. **Middleware (0% покрытия)**
|
||||||
|
- Тестировать аутентификацию
|
||||||
|
- Тестировать извлечение claims из JWT
|
||||||
|
|
||||||
|
4. **Repository Layer (24.5% покрытия)**
|
||||||
|
- Улучшить покрытие CRUD операций
|
||||||
|
- Добавить тесты для edge cases
|
||||||
|
|
||||||
|
### 📝 Приоритет 3 (Желательно)
|
||||||
|
5. **Config & Database (0% покрытия)**
|
||||||
|
- Тестировать загрузку конфигурации
|
||||||
|
- Тестировать подключение к БД
|
||||||
|
|
||||||
|
## 🎯 Цели покрытия
|
||||||
|
|
||||||
|
| Уровень | Целевое покрытие | Текущее покрытие |
|
||||||
|
|---------|------------------|------------------|
|
||||||
|
| Unit тесты | 80% | 9.6% |
|
||||||
|
| Integration тесты | 60% | 0% |
|
||||||
|
| Общее покрытие | 70% | 9.6% |
|
||||||
|
|
||||||
|
## 📊 Метрики качества
|
||||||
|
|
||||||
|
### Функции с высоким покрытием (>80%)
|
||||||
|
- ✅ `auth.NewJWTService` - 100%
|
||||||
|
- ✅ `auth.GenerateToken` - 100%
|
||||||
|
- ✅ `auth.HashPassword` - 100%
|
||||||
|
- ✅ `auth.CheckPassword` - 100%
|
||||||
|
|
||||||
|
### Функции с низким покрытием (<50%)
|
||||||
|
- ❌ Все handlers - 0%
|
||||||
|
- ❌ Все service методы - 0%
|
||||||
|
- ❌ Все middleware - 0%
|
||||||
|
- ❌ Config и Database - 0%
|
||||||
|
|
||||||
|
## 🔧 Интеграция с CI/CD
|
||||||
|
|
||||||
|
### Pre-commit хук
|
||||||
|
Pre-commit хук автоматически запускает тесты и показывает статистику:
|
||||||
|
```
|
||||||
|
Auth unit тесты: 4/4 ✅
|
||||||
|
Repository unit тесты: 10/10 ✅
|
||||||
|
Integration тесты: 5/5 ✅
|
||||||
|
|
||||||
|
🎯 Общий результат: 19/19 тестов прошли успешно
|
||||||
|
```
|
||||||
|
|
||||||
|
### Рекомендации для CI/CD
|
||||||
|
1. Добавить проверку покрытия в pipeline
|
||||||
|
2. Установить минимальный порог покрытия (например, 70%)
|
||||||
|
3. Генерировать HTML отчеты для каждого PR
|
||||||
|
4. Отклонять PR с низким покрытием
|
||||||
|
|
||||||
|
## 📈 План улучшения
|
||||||
|
|
||||||
|
### Этап 1: Handlers (1-2 недели)
|
||||||
|
- [ ] Unit тесты для `AuthHandler`
|
||||||
|
- [ ] Unit тесты для `ItemHandler`
|
||||||
|
- [ ] Unit тесты для `LocationHandler`
|
||||||
|
- [ ] Unit тесты для `OperationsHandler`
|
||||||
|
|
||||||
|
### Этап 2: Service Layer (1-2 недели)
|
||||||
|
- [ ] Unit тесты для `AuthService`
|
||||||
|
- [ ] Unit тесты для `ItemService`
|
||||||
|
- [ ] Unit тесты для `LocationService`
|
||||||
|
- [ ] Unit тесты для `OperationsService`
|
||||||
|
|
||||||
|
### Этап 3: Middleware (3-5 дней)
|
||||||
|
- [ ] Unit тесты для `AuthMiddleware`
|
||||||
|
- [ ] Тесты извлечения claims
|
||||||
|
|
||||||
|
### Этап 4: Repository (1 неделя)
|
||||||
|
- [ ] Улучшение покрытия CRUD операций
|
||||||
|
- [ ] Тесты edge cases
|
||||||
|
|
||||||
|
### Этап 5: Config & Database (3-5 дней)
|
||||||
|
- [ ] Тесты загрузки конфигурации
|
||||||
|
- [ ] Тесты подключения к БД
|
||||||
|
|
||||||
|
## 🎯 Ожидаемый результат
|
||||||
|
|
||||||
|
После выполнения плана:
|
||||||
|
- **Общее покрытие**: 9.6% → 70%+
|
||||||
|
- **Unit тесты**: 0% → 80%+
|
||||||
|
- **Integration тесты**: 0% → 60%+
|
||||||
|
- **Качество кода**: Значительно улучшится
|
||||||
|
- **Стабильность**: Снизится количество багов
|
||||||
2998
core-service/coverage.html
Normal file
2998
core-service/coverage.html
Normal file
File diff suppressed because it is too large
Load Diff
103
core-service/scripts/coverage.sh
Executable file
103
core-service/scripts/coverage.sh
Executable file
@@ -0,0 +1,103 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Скрипт для анализа покрытия тестами
|
||||||
|
# Использование: ./scripts/coverage.sh [--html] [--threshold=80]
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Параметры по умолчанию
|
||||||
|
GENERATE_HTML=false
|
||||||
|
COVERAGE_THRESHOLD=80
|
||||||
|
|
||||||
|
# Парсим аргументы
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
--html)
|
||||||
|
GENERATE_HTML=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--threshold=*)
|
||||||
|
COVERAGE_THRESHOLD="${1#*=}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Неизвестный параметр: $1"
|
||||||
|
echo "Использование: $0 [--html] [--threshold=80]"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "🧪 Анализ покрытия тестами..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Запускаем тесты с покрытием
|
||||||
|
go test ./... -coverprofile=coverage.out
|
||||||
|
|
||||||
|
# Получаем общую статистику покрытия
|
||||||
|
TOTAL_COVERAGE=$(go tool cover -func=coverage.out | tail -1 | awk '{print $3}' | sed 's/%//')
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📊 Общая статистика покрытия:"
|
||||||
|
echo "┌─────────────────────────────────────────────────────────────┐"
|
||||||
|
echo "│ Пакет │ Покрытие │ Статус │"
|
||||||
|
echo "├─────────────────────────────────────────────────────────────┤"
|
||||||
|
|
||||||
|
# Анализируем покрытие по пакетам
|
||||||
|
go test ./... -cover | while read -r line; do
|
||||||
|
if [[ $line =~ coverage:\ ([0-9.]+)% ]]; then
|
||||||
|
PACKAGE=$(echo "$line" | awk '{print $1}')
|
||||||
|
COVERAGE=$(echo "$line" | grep -o '[0-9.]*%' | head -1)
|
||||||
|
COVERAGE_NUM=$(echo "$COVERAGE" | sed 's/%//')
|
||||||
|
|
||||||
|
if (( $(echo "$COVERAGE_NUM >= $COVERAGE_THRESHOLD" | bc -l) )); then
|
||||||
|
STATUS="✅ Хорошо"
|
||||||
|
elif (( $(echo "$COVERAGE_NUM > 0" | bc -l) )); then
|
||||||
|
STATUS="⚠️ Низкое"
|
||||||
|
else
|
||||||
|
STATUS="❌ Нет тестов"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "│ %-25s │ %8s │ %-20s │\n" "$PACKAGE" "$COVERAGE" "$STATUS"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "└─────────────────────────────────────────────────────────────┘"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Проверяем общее покрытие
|
||||||
|
if (( $(echo "$TOTAL_COVERAGE >= $COVERAGE_THRESHOLD" | bc -l) )); then
|
||||||
|
echo "🎉 Общее покрытие: ${TOTAL_COVERAGE}% (>= ${COVERAGE_THRESHOLD}%)"
|
||||||
|
COVERAGE_STATUS=0
|
||||||
|
else
|
||||||
|
echo "⚠️ Общее покрытие: ${TOTAL_COVERAGE}% (< ${COVERAGE_THRESHOLD}%)"
|
||||||
|
echo "💡 Рекомендуется увеличить покрытие тестами"
|
||||||
|
COVERAGE_STATUS=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Генерируем HTML отчет если запрошено
|
||||||
|
if [ "$GENERATE_HTML" = true ]; then
|
||||||
|
echo ""
|
||||||
|
echo "📄 Генерация HTML отчета..."
|
||||||
|
go tool cover -html=coverage.out -o coverage.html
|
||||||
|
echo "✅ HTML отчет сохранен в coverage.html"
|
||||||
|
echo "🌐 Откройте coverage.html в браузере для детального просмотра"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Показываем функции с низким покрытием
|
||||||
|
echo ""
|
||||||
|
echo "🔍 Функции с низким покрытием (< 50%):"
|
||||||
|
go tool cover -func=coverage.out | grep -E "0\.0%|^[0-9]+\.[0-9]+%" | head -10
|
||||||
|
|
||||||
|
# Очищаем временные файлы
|
||||||
|
rm -f coverage.out
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "📈 Рекомендации по улучшению покрытия:"
|
||||||
|
echo "1. Добавьте unit тесты для handlers (сейчас 0% покрытия)"
|
||||||
|
echo "2. Добавьте unit тесты для service layer (сейчас 0% покрытия)"
|
||||||
|
echo "3. Добавьте unit тесты для middleware (сейчас 0% покрытия)"
|
||||||
|
echo "4. Добавьте unit тесты для config и database (сейчас 0% покрытия)"
|
||||||
|
echo "5. Улучшите покрытие repository layer (сейчас 24.5%)"
|
||||||
|
|
||||||
|
exit $COVERAGE_STATUS
|
||||||
Reference in New Issue
Block a user