105 lines
4.2 KiB
Bash
Executable File
105 lines
4.2 KiB
Bash
Executable File
#!/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 "================================================================================"
|