- Создан скрипт 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%+
104 lines
4.2 KiB
Bash
Executable File
104 lines
4.2 KiB
Bash
Executable File
#!/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
|