#!/bin/bash # # 并发性能测试套件 - 运行多组测试对比不同并发级别的性能 # # 功能: # - 测试不同并发用户数下的系统性能 # - 生成对比报告 # # 使用: # ./scripts/run_benchmark_suite.sh # # 作者: Gavin Chan # 日期: 2025-01-30 echo "================================================================================" echo "YOLO 数字识别 - 并发性能测试套件" echo "================================================================================" echo "" # 创建结果目录 RESULT_DIR="results/benchmark_suite" mkdir -p "$RESULT_DIR" # 测试配置 IMAGES_PER_USER=20 USER_COUNTS=(1 3 5 10 15 20) echo "📋 测试配置:" echo " - 每用户图片数: $IMAGES_PER_USER" echo " - 测试并发级别: ${USER_COUNTS[@]}" echo "" # 运行测试 for users in "${USER_COUNTS[@]}"; do echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "🚀 测试场景: ${users} 个并发用户" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" output_file="$RESULT_DIR/benchmark_${users}users.txt" python scripts/benchmark_concurrent.py \ --users "$users" \ --images-per-user "$IMAGES_PER_USER" \ --output "$output_file" echo "" sleep 1 # 短暂休息,避免系统过载 done # 生成对比报告 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "📊 生成对比报告..." echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" SUMMARY_FILE="$RESULT_DIR/summary.txt" cat > "$SUMMARY_FILE" << 'EOF' ================================================================================ YOLO 数字识别 - 并发性能对比报告 ================================================================================ EOF echo "测试时间: $(date '+%Y-%m-%d %H:%M:%S')" >> "$SUMMARY_FILE" echo "" >> "$SUMMARY_FILE" echo "各并发级别性能对比:" >> "$SUMMARY_FILE" echo "" >> "$SUMMARY_FILE" printf "%-12s | %-10s | %-12s | %-12s | %-15s\n" \ "并发用户" "总图片" "总耗时(s)" "QPS" "平均响应(s)" >> "$SUMMARY_FILE" echo "-------------+------------+--------------+--------------+----------------" >> "$SUMMARY_FILE" # 从JSON文件中提取数据 for users in "${USER_COUNTS[@]}"; do json_file="$RESULT_DIR/benchmark_${users}users.json" if [ -f "$json_file" ]; then total_images=$(python3 -c "import json; print(json.load(open('$json_file'))['summary']['total_images'])") total_time=$(python3 -c "import json; print(f\"{json.load(open('$json_file'))['summary']['total_time']:.2f}\")") qps=$(python3 -c "import json; print(f\"{json.load(open('$json_file'))['summary']['qps']:.2f}\")") # 计算平均响应时间 avg_time=$(python3 -c "import json; d=json.load(open('$json_file')); times=[r['time'] for u in d['users'] for r in u['results']]; print(f\"{sum(times)/len(times):.3f}\")") printf "%-12d | %-10d | %-12s | %-12s | %-15s\n" \ "$users" "$total_images" "$total_time" "$qps" "$avg_time" >> "$SUMMARY_FILE" fi done echo "" >> "$SUMMARY_FILE" echo "================================================================================" >> "$SUMMARY_FILE" # 显示对比报告 cat "$SUMMARY_FILE" echo "" echo "✅ 测试完成!" echo "" echo "📁 详细报告位置:" echo " - 对比摘要: $SUMMARY_FILE" echo " - 各测试详情: $RESULT_DIR/benchmark_*users.txt" echo " - JSON数据: $RESULT_DIR/benchmark_*users.json" echo "" echo "================================================================================"