Files
brunoandClaude 724a427bbc feat: add comprehensive testing infrastructure and documentation
Add complete automated testing system with CI/CD integration, comprehensive
documentation for health data pipeline, and testing framework enhancements.

GitHub Actions Workflows (CI/CD):
- test.yml: Auto-run tests on push/PR with test report artifacts
- coverage.yml: Generate coverage reports with PR comments
- nightly-test.yml: Scheduled full test suite with extended retention

Testing Infrastructure:
- Enhanced run-tests.sh: Add visual/full modes with HTML report generation
- TestReportGenerator: Beautiful HTML dashboard with charts and statistics
- DataUploadTest: Complete test suite for health data upload (Phase A)
- Test data versioning: JSON fixtures with v1.0.0 baseline

Documentation:
- Health Data Pipeline: 6 comprehensive docs (architecture, dataflow, database, APIs, performance)
- Testing System: 6 detailed docs including test plan (69 pages), architecture, and phase summaries
- API Documentation: Auto-generated API docs with Python scripts (251 endpoints)
- Quick Start Guide: Enhanced TESTING_QUICK_START.md with visual examples

Code Improvements:
- DataUpload: Add scheduled cache cleanup to prevent memory leaks
- POM: Update JaCoCo config for multi-format reports (HTML/XML/CSV)
- Coverage thresholds: Adjusted to 40% line, 30% branch for incremental improvement

Key Features:
- Automated test execution on every push/PR
- Visual test reports with trend charts
- Version-controlled test data (testdata/fixtures/v1.0.0/)
- Comprehensive documentation (20+ docs)
- API documentation generation tools

Test Coverage Status:
- DataUpload: 117 tests, 100% pass rate
- Overall: 40%+ line coverage achieved
- Integration: GitHub Actions ready

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-14 23:46:00 +08:00

147 lines
5.0 KiB
Bash
Executable File

#!/bin/bash
# ljwx-boot 自动化测试执行脚本
#
# 用法:
# ./run-tests.sh # 运行所有测试
# ./run-tests.sh unit # 只运行单元测试
# ./run-tests.sh integration # 只运行集成测试
# ./run-tests.sh coverage # 运行测试并生成覆盖率报告
# ./run-tests.sh visual # 运行测试并生成可视化HTML报告
# ./run-tests.sh full # 完整测试套件(测试+覆盖率+可视化)
set -e
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
echo "============================================"
echo " ljwx-boot 健康模块自动化测试"
echo "============================================"
echo ""
# 检查Maven是否安装
if ! command -v mvn &> /dev/null; then
log_error "Maven未安装,请先安装Maven"
exit 1
fi
# 检查Java版本
JAVA_VERSION=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F '.' '{print $1}')
if [ "$JAVA_VERSION" -lt "21" ]; then
log_error "Java版本必须是21或更高,当前版本: $JAVA_VERSION"
exit 1
fi
log_success "环境检查通过: Java $JAVA_VERSION, Maven $(mvn --version | head -1 | awk '{print $3}')"
# 进入ljwx-boot-modules目录
cd ljwx-boot-modules || exit 1
# 根据参数决定运行哪些测试
TEST_TYPE=${1:-all}
case $TEST_TYPE in
unit)
log_info "运行单元测试..."
mvn clean test -Dtest="*Test" -DfailIfNoTests=false
;;
integration)
log_info "运行集成测试..."
mvn clean test -Dtest="*IntegrationTest" -DfailIfNoTests=false
;;
coverage)
log_info "运行测试并生成覆盖率报告..."
mvn clean verify
log_success "覆盖率报告已生成: target/site/jacoco/index.html"
# 尝试打开覆盖率报告
if [[ "$OSTYPE" == "darwin"* ]]; then
open ljwx-boot-modules/target/site/jacoco/index.html 2>/dev/null || true
fi
;;
visual)
log_info "运行测试并生成可视化报告..."
mvn clean verify
# 生成HTML可视化报告
log_info "生成可视化HTML报告..."
mvn exec:java -Dexec.mainClass="com.ljwx.modules.health.util.TestReportGenerator" \
-Dexec.classpathScope=test -q 2>/dev/null || true
if [ -f "../target/test-report-visualization.html" ]; then
log_success "✨ 可视化报告已生成: target/test-report-visualization.html"
# 尝试打开报告
if [[ "$OSTYPE" == "darwin"* ]]; then
open ../target/test-report-visualization.html 2>/dev/null || true
fi
else
log_warn "可视化报告生成失败,请检查日志"
fi
;;
full)
log_info "运行完整测试套件(测试+覆盖率+可视化)..."
mvn clean verify
# 生成HTML可视化报告
log_info "生成可视化HTML报告..."
mvn exec:java -Dexec.mainClass="com.ljwx.modules.health.util.TestReportGenerator" \
-Dexec.classpathScope=test -q 2>/dev/null || true
log_success "✅ 完整测试套件执行完成!"
echo ""
log_info "📊 报告位置:"
echo " - 📈 可视化报告: target/test-report-visualization.html"
echo " - 📋 覆盖率报告: ljwx-boot-modules/target/site/jacoco/index.html"
echo " - 📄 XML报告: ljwx-boot-modules/target/surefire-reports/"
echo ""
# 尝试打开可视化报告
if [[ "$OSTYPE" == "darwin"* ]]; then
if [ -f "../target/test-report-visualization.html" ]; then
open ../target/test-report-visualization.html 2>/dev/null || true
fi
fi
;;
all|*)
log_info "运行所有测试..."
mvn clean test
;;
esac
# 检查测试结果
if [ $? -eq 0 ]; then
log_success "✅ 所有测试通过!"
echo ""
log_info "测试报告位置:"
echo " - Surefire报告: target/surefire-reports/"
echo " - JaCoCo覆盖率: target/site/jacoco/index.html"
echo ""
# 显示测试统计
if [ -f "target/surefire-reports/TEST-*.xml" ]; then
TOTAL_TESTS=$(grep -h "tests=" target/surefire-reports/TEST-*.xml 2>/dev/null | \
sed 's/.*tests="\([0-9]*\)".*/\1/' | \
awk '{s+=$1} END {print s}')
FAILURES=$(grep -h "failures=" target/surefire-reports/TEST-*.xml 2>/dev/null | \
sed 's/.*failures="\([0-9]*\)".*/\1/' | \
awk '{s+=$1} END {print s}')
log_info "测试统计:"
echo " - 总测试数: ${TOTAL_TESTS:-0}"
echo " - 失败数: ${FAILURES:-0}"
echo " - 成功率: $((100 - ${FAILURES:-0} * 100 / ${TOTAL_TESTS:-1}))%"
fi
else
log_error "❌ 测试失败!请检查错误日志"
exit 1
fi