Files
Mini-ERP-app/core-service/scripts/coverage.sh
Andrey Epifantsev c8224f072a 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%+
2025-08-27 17:51:59 +04:00

104 lines
4.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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