feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
This commit is contained in:
Executable
+236
@@ -0,0 +1,236 @@
|
||||
#!/bin/bash
|
||||
|
||||
TDD迭代控制器 - 自动化测试驱动开发迭代机制
|
||||
|
||||
功能:
|
||||
- 执行测试命令
|
||||
- 分析测试结果
|
||||
- 自动重试失败测试
|
||||
- 智能退出机制
|
||||
- 生成迭代报告
|
||||
|
||||
使用方法:
|
||||
./tdd-iteration-controller.sh <test-command> [max-iterations]
|
||||
|
||||
示例:
|
||||
./tdd-iteration-controller.sh "mvn test" 5
|
||||
./tdd-iteration-controller.sh "npx playwright test" 3
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
LOG_DIR="$PROJECT_ROOT/test-automation/logs"
|
||||
REPORT_DIR="$PROJECT_ROOT/test-automation/test-reports"
|
||||
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
|
||||
CURRENT_REPORT_DIR="$REPORT_DIR/tdd-iteration-$TIMESTAMP"
|
||||
|
||||
mkdir -p "$LOG_DIR"
|
||||
mkdir -p "$CURRENT_REPORT_DIR"
|
||||
|
||||
TEST_COMMAND=${1:-"mvn test"}
|
||||
MAX_ITERATIONS=${2:-5}
|
||||
ITERATION_COUNT=0
|
||||
FAILED_TESTS=()
|
||||
PASSED_TESTS=()
|
||||
ITERATION_LOG="$CURRENT_REPORT_DIR/iteration.log"
|
||||
|
||||
log() {
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$ITERATION_LOG"
|
||||
}
|
||||
|
||||
log_iteration_start() {
|
||||
log "========================================="
|
||||
log "迭代 $ITERATION_COUNT/$MAX_ITERATIONS 开始"
|
||||
log "========================================="
|
||||
log "测试命令: $TEST_COMMAND"
|
||||
log "开始时间: $(date '+%Y-%m-%d %H:%M:%S')"
|
||||
}
|
||||
|
||||
log_iteration_result() {
|
||||
local exit_code=$1
|
||||
local duration=$2
|
||||
|
||||
log "迭代结果: $exit_code"
|
||||
log "耗时: ${duration}秒"
|
||||
|
||||
if [ $exit_code -eq 0 ]; then
|
||||
log "✅ 所有测试通过"
|
||||
PASSED_TESTS+=($ITERATION_COUNT)
|
||||
return 0
|
||||
else
|
||||
log "❌ 测试失败"
|
||||
FAILED_TESTS+=($ITERATION_COUNT)
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
analyze_failures() {
|
||||
log "========================================="
|
||||
log "失败分析"
|
||||
log "========================================="
|
||||
|
||||
local test_results_dir="$PROJECT_ROOT/everything-is-suitable-api/everything-is-suitable-app/target/surefire-reports"
|
||||
|
||||
if [ -d "$test_results_dir" ]; then
|
||||
log "分析测试报告目录: $test_results_dir"
|
||||
|
||||
find "$test_results_dir" -name "*.xml" -type f | while read -r xml_file; do
|
||||
if grep -q "failures=\"[1-9]" "$xml_file"; then
|
||||
local test_name=$(basename "$xml_file" .xml)
|
||||
log "失败测试: $test_name"
|
||||
|
||||
local failure_count=$(grep -o 'failures="[0-9]*"' "$xml_file" | grep -o '[0-9]*')
|
||||
log "失败数量: $failure_count"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
local allure_results_dir="$PROJECT_ROOT/everything-is-suitable-api/everything-is-suitable-app/target/allure-results"
|
||||
|
||||
if [ -d "$allure_results_dir" ]; then
|
||||
log "分析Allure报告目录: $allure_results_dir"
|
||||
|
||||
local failed_count=$(find "$allure_results_dir" -name "*-result.json" -type f | wc -l | tr -d ' ')
|
||||
log "Allure结果文件数: $failed_count"
|
||||
fi
|
||||
}
|
||||
|
||||
generate_iteration_report() {
|
||||
local report_file="$CURRENT_REPORT_DIR/iteration-summary.md"
|
||||
|
||||
cat > "$report_file" << EOF
|
||||
# TDD迭代报告
|
||||
|
||||
**生成时间**: $(date '+%Y-%m-%d %H:%M:%S')
|
||||
**总迭代次数**: $MAX_ITERATIONS
|
||||
**实际迭代次数**: $ITERATION_COUNT
|
||||
|
||||
## 迭代结果
|
||||
|
||||
| 迭代 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
EOF
|
||||
|
||||
for i in $(seq 1 $ITERATION_COUNT); do
|
||||
if [[ " ${PASSED_TESTS[@]} " =~ " $i " ]]; then
|
||||
echo "| $i | ✅ 通过 | 所有测试通过 |" >> "$report_file"
|
||||
else
|
||||
echo "| $i | ❌ 失败 | 部分测试失败 |" >> "$report_file"
|
||||
fi
|
||||
done
|
||||
|
||||
cat >> "$report_file" << EOF
|
||||
|
||||
## 统计信息
|
||||
|
||||
- **通过迭代**: ${#PASSED_TESTS[@]}/$ITERATION_COUNT
|
||||
- **失败迭代**: ${#FAILED_TESTS[@]}/$ITERATION_COUNT
|
||||
- **成功率**: $(echo "scale=1; ${#PASSED_TESTS[@]} * 100 / $ITERATION_COUNT" | bc)%
|
||||
|
||||
## 测试命令
|
||||
|
||||
\`\`\`bash
|
||||
$TEST_COMMAND
|
||||
\`\`\`
|
||||
|
||||
## 建议
|
||||
|
||||
EOF
|
||||
|
||||
if [ $ITERATION_COUNT -eq $MAX_ITERATIONS ] && [ ${#PASSED_TESTS[@]} -gt 0 ]; then
|
||||
cat >> "$report_file" << EOF
|
||||
✅ **测试通过!** 可以继续开发或部署。
|
||||
EOF
|
||||
elif [ $ITERATION_COUNT -eq $MAX_ITERATIONS ]; then
|
||||
cat >> "$report_file" << EOF
|
||||
❌ **达到最大迭代次数**,建议:
|
||||
1. 检查测试失败原因
|
||||
2. 修复失败的测试用例
|
||||
3. 重新运行TDD迭代
|
||||
4. 考虑调整测试策略
|
||||
EOF
|
||||
fi
|
||||
|
||||
log "迭代报告已生成: $report_file"
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
log "========================================="
|
||||
log "清理环境"
|
||||
log "========================================="
|
||||
|
||||
if [ -f "$SCRIPT_DIR/stop-services.sh" ]; then
|
||||
bash "$SCRIPT_DIR/stop-services.sh"
|
||||
fi
|
||||
|
||||
log "环境清理完成"
|
||||
}
|
||||
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
main() {
|
||||
log "========================================="
|
||||
log "TDD迭代控制器启动"
|
||||
log "========================================="
|
||||
log "最大迭代次数: $MAX_ITERATIONS"
|
||||
log "测试命令: $TEST_COMMAND"
|
||||
log "报告目录: $CURRENT_REPORT_DIR"
|
||||
log "========================================="
|
||||
|
||||
while [ $ITERATION_COUNT -lt $MAX_ITERATIONS ]; do
|
||||
ITERATION_COUNT=$((ITERATION_COUNT + 1))
|
||||
|
||||
log_iteration_start
|
||||
|
||||
local start_time=$(date +%s)
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
if eval "$TEST_COMMAND" > "$CURRENT_REPORT_DIR/iteration-$ITERATION_COUNT.log" 2>&1; then
|
||||
local end_time=$(date +%s)
|
||||
local duration=$((end_time - start_time))
|
||||
log_iteration_result 0 $duration
|
||||
generate_iteration_report
|
||||
|
||||
log "========================================="
|
||||
log "✅ 迭代 $ITERATION_COUNT 成功完成"
|
||||
log "========================================="
|
||||
|
||||
exit 0
|
||||
else
|
||||
local end_time=$(date +%s)
|
||||
local duration=$((end_time - start_time))
|
||||
log_iteration_result 1 $duration
|
||||
analyze_failures
|
||||
|
||||
if [ $ITERATION_COUNT -lt $MAX_ITERATIONS ]; then
|
||||
log "========================================="
|
||||
log "⚠️ 准备下一次迭代"
|
||||
log "========================================="
|
||||
log "等待5秒后重试..."
|
||||
sleep 5
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
generate_iteration_report
|
||||
|
||||
log "========================================="
|
||||
log "⚠️ 达到最大迭代次数 ($MAX_ITERATIONS)"
|
||||
log "========================================="
|
||||
log "最终状态:"
|
||||
log " - 通过迭代: ${#PASSED_TESTS[@]}"
|
||||
log " - 失败迭代: ${#FAILED_TESTS[@]}"
|
||||
log " - 成功率: $(echo "scale=1; ${#PASSED_TESTS[@]} * 100 / $MAX_ITERATIONS" | bc)%"
|
||||
|
||||
if [ ${#PASSED_TESTS[@]} -gt 0 ]; then
|
||||
log "✅ 至少有一次迭代成功,可以继续"
|
||||
exit 0
|
||||
else
|
||||
log "❌ 所有迭代均失败,需要手动干预"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user