Files
wenzi/.testing-autonomous/monitor.sh
Your Name 91a0b77f7a test(cache): 修复CacheConfigTest边界值测试
- 修改 shouldVerifyCacheManager_withMaximumIntegerTtl 为 shouldVerifyCacheManager_withMaximumAllowedTtl
- 使用正确的最大TTL值(10080分钟,7天)而不是 Integer.MAX_VALUE
- 新增 shouldThrowException_whenTtlExceedsMaximum 测试验证边界检查
- 所有1266个测试用例通过
- 覆盖率: 指令81.89%, 行88.48%, 分支51.55%

docs: 添加项目状态报告
- 生成 PROJECT_STATUS_REPORT.md 详细记录项目当前状态
- 包含质量指标、已完成功能、待办事项和技术债务
2026-03-02 13:31:54 +08:00

182 lines
6.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
# 🔍 Testing-Autonomous 实时监控脚本
# 用法: ./monitor.sh [project_path]
PROJECT_PATH=${1:-.}
LOG_FILE="$PROJECT_PATH/.testing-autonomous/progress.log"
COVERAGE_FILE="$PROJECT_PATH/target/site/jacoco/index.html"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}🔍 Testing-Autonomous 实时监控${NC}"
echo "=================================="
echo "项目路径: $PROJECT_PATH"
echo "=================================="
echo ""
# 检查配置文件
if [ -f "$PROJECT_PATH/.testing-autonomous/config.yml" ]; then
echo -e "${GREEN}✅ 配置文件存在${NC}"
TARGET_COVERAGE=$(grep "instruction:" "$PROJECT_PATH/.testing-autonomous/config.yml" | head -1 | awk '{print $2}' | tr -d '%')
echo "🎯 目标覆盖率: ${TARGET_COVERAGE}%"
else
echo -e "${YELLOW}⚠️ 配置文件不存在,使用默认配置${NC}"
TARGET_COVERAGE=85
fi
echo ""
# 实时监控函数
monitor_progress() {
local last_coverage=0
local round=0
while true; do
clear
echo -e "${BLUE}🔍 Testing-Autonomous 实时监控${NC}"
echo "=================================="
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "=================================="
echo ""
# 显示进度日志最近20行
if [ -f "$LOG_FILE" ]; then
echo -e "${BLUE}📊 最新进展:${NC}"
tail -20 "$LOG_FILE" 2>/dev/null | while read line; do
if [[ $line == *"ERROR"* ]] || [[ $line == *"失败"* ]]; then
echo -e "${RED}$line${NC}"
elif [[ $line == *"SUCCESS"* ]] || [[ $line == *"成功"* ]]; then
echo -e "${GREEN}$line${NC}"
elif [[ $line == *"WARNING"* ]] || [[ $line == *"警告"* ]]; then
echo -e "${YELLOW}$line${NC}"
else
echo "$line"
fi
done
echo ""
fi
# 解析当前覆盖率
if [ -f "$COVERAGE_FILE" ]; then
# 从JaCoCo报告中提取覆盖率
COVERAGE=$(grep -o 'ctr2>[0-9]*%' "$COVERAGE_FILE" | head -1 | grep -o '[0-9]*')
if [ ! -z "$COVERAGE" ]; then
echo -e "${BLUE}📈 覆盖率状态:${NC}"
echo "当前: ${COVERAGE}%"
echo "目标: ${TARGET_COVERAGE}%"
# 计算进度条
PROGRESS=$((COVERAGE * 50 / 100)) # 50字符宽度的进度条
BAR=$(printf '%*s' "$PROGRESS" | tr ' ' '█')
REMAINING=$((50 - PROGRESS))
EMPTY=$(printf '%*s' "$REMAINING" | tr ' ' '░')
if [ $COVERAGE -ge $TARGET_COVERAGE ]; then
echo -e "${GREEN}进度: [${BAR}${EMPTY}] ${COVERAGE}% ✅ 已达标${NC}"
else
echo -e "${YELLOW}进度: [${BAR}${EMPTY}] ${COVERAGE}% 🔄 继续优化${NC}"
fi
echo ""
# 显示差距
GAP=$((TARGET_COVERAGE - COVERAGE))
if [ $GAP -gt 0 ]; then
echo -e "${YELLOW}还需提升: ${GAP}%${NC}"
fi
fi
fi
# 检查测试执行状态
if [ -f "$PROJECT_PATH/target/surefire-reports" ]; then
TEST_COUNT=$(find "$PROJECT_PATH/target/surefire-reports" -name "*.txt" | wc -l)
echo -e "${BLUE}🧪 测试统计:${NC}"
echo "测试文件: $TEST_COUNT"
# 统计失败/错误
FAILURES=$(grep -l "FAILURE\|ERROR" "$PROJECT_PATH/target/surefire-reports"/*.txt 2>/dev/null | wc -l)
if [ $FAILURES -gt 0 ]; then
echo -e "${RED}❌ 失败: $FAILURES${NC}"
else
echo -e "${GREEN}✅ 全部通过${NC}"
fi
echo ""
fi
# 检查是否有卡住迹象
if [ -f "$LOG_FILE" ]; then
LAST_UPDATE=$(stat -c %Y "$LOG_FILE" 2>/dev/null || stat -f %m "$LOG_FILE" 2>/dev/null)
CURRENT_TIME=$(date +%s)
TIME_DIFF=$((CURRENT_TIME - LAST_UPDATE))
if [ $TIME_DIFF -gt 300 ]; then # 5分钟无更新
echo -e "${RED}⚠️ 警告: 已超过5分钟无进展可能卡住${NC}"
echo -e "${YELLOW} 自动恢复机制应该已经启动...${NC}"
fi
fi
echo ""
echo -e "${BLUE}==================================${NC}"
echo "按 Ctrl+C 退出监控"
echo -e "${BLUE}==================================${NC}"
# 每5秒刷新一次
sleep 5
done
}
# 快速统计模式
quick_stats() {
echo -e "${BLUE}📊 快速统计${NC}"
echo "=================================="
# 测试数量
if [ -d "$PROJECT_PATH/src/test/java" ]; then
TEST_FILES=$(find "$PROJECT_PATH/src/test/java" -name "*Test.java" | wc -l)
echo -e "测试文件: ${GREEN}$TEST_FILES${NC}"
fi
# 覆盖率
if [ -f "$COVERAGE_FILE" ]; then
COVERAGE=$(grep -o 'ctr2>[0-9]*%' "$COVERAGE_FILE" | head -1 | grep -o '[0-9]*')
if [ ! -z "$COVERAGE" ]; then
if [ $COVERAGE -ge $TARGET_COVERAGE ]; then
echo -e "覆盖率: ${GREEN}${COVERAGE}% ✅${NC}"
else
echo -e "覆盖率: ${YELLOW}${COVERAGE}% 🔄${NC} (目标: ${TARGET_COVERAGE}%)"
fi
fi
fi
# 配置文件状态
if [ -f "$PROJECT_PATH/.testing-autonomous/config.yml" ]; then
echo -e "配置: ${GREEN}✅ 已配置${NC}"
else
echo -e "配置: ${RED}❌ 未配置${NC}"
fi
echo "=================================="
}
# 主逻辑
case "${2:-monitor}" in
monitor)
monitor_progress
;;
stats)
quick_stats
;;
*)
echo "用法: $0 [project_path] [monitor|stats]"
echo ""
echo "示例:"
echo " $0 . monitor # 实时监控当前项目"
echo " $0 . stats # 快速统计"
echo " $0 /path/to/project monitor # 监控指定项目"
exit 1
;;
esac