170 lines
4.6 KiB
Bash
Executable File
170 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Git SSH vs HTTPS 速度对比测试脚本
|
|
|
|
set -e
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
print_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
print_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# 测试仓库
|
|
TEST_REPO_SSH="[email protected]:kubernetes/kubernetes.git"
|
|
TEST_REPO_HTTPS="https://github.com/kubernetes/kubernetes.git"
|
|
TEST_DURATION=20 # 测试持续时间(秒)
|
|
|
|
# 创建测试目录
|
|
TEST_DIR=$(mktemp -d)
|
|
cd "$TEST_DIR"
|
|
|
|
echo ""
|
|
print_info "=== Git SSH vs HTTPS 速度对比测试 ==="
|
|
echo ""
|
|
print_info "测试仓库: kubernetes/kubernetes"
|
|
print_info "测试时长: ${TEST_DURATION} 秒"
|
|
print_info "测试目录: $TEST_DIR"
|
|
echo ""
|
|
|
|
# 测试 SSH 方式
|
|
print_info "【测试 1/2】SSH 方式 ([email protected]:)"
|
|
echo ""
|
|
|
|
SSH_LOG="$TEST_DIR/ssh-test.log"
|
|
rm -f "$SSH_LOG"
|
|
|
|
# 启动 SSH 克隆
|
|
git clone --progress "$TEST_REPO_SSH" ssh-test > "$SSH_LOG" 2>&1 &
|
|
SSH_PID=$!
|
|
|
|
# 等待测试时长
|
|
sleep "$TEST_DURATION"
|
|
|
|
# 停止克隆
|
|
kill $SSH_PID 2>/dev/null || true
|
|
wait $SSH_PID 2>/dev/null || true
|
|
|
|
# 分析结果
|
|
if [ -f "$SSH_LOG" ]; then
|
|
SSH_SPEED=$(cat "$SSH_LOG" | grep "接收对象中" | tail -1 | grep -oE '[0-9]+(\.[0-9]+)? [KM]iB/s' | tail -1)
|
|
SSH_SIZE=$(cat "$SSH_LOG" | grep "接收对象中" | tail -1 | grep -oE '[0-9]+(\.[0-9]+)? [KM]iB' | head -1)
|
|
print_success "SSH 测试完成"
|
|
echo " 下载大小: ${SSH_SIZE:-未知}"
|
|
echo " 下载速度: ${SSH_SPEED:-未知}"
|
|
else
|
|
print_error "SSH 测试失败"
|
|
SSH_SPEED="N/A"
|
|
SSH_SIZE="N/A"
|
|
fi
|
|
|
|
echo ""
|
|
sleep 2
|
|
|
|
# 清理
|
|
rm -rf ssh-test
|
|
|
|
# 测试 HTTPS 方式
|
|
print_info "【测试 2/2】HTTPS 方式 (https://github.com/)"
|
|
echo ""
|
|
|
|
HTTPS_LOG="$TEST_DIR/https-test.log"
|
|
rm -f "$HTTPS_LOG"
|
|
|
|
# 启动 HTTPS 克隆
|
|
git clone --progress "$TEST_REPO_HTTPS" https-test > "$HTTPS_LOG" 2>&1 &
|
|
HTTPS_PID=$!
|
|
|
|
# 等待测试时长
|
|
sleep "$TEST_DURATION"
|
|
|
|
# 停止克隆
|
|
kill $HTTPS_PID 2>/dev/null || true
|
|
wait $HTTPS_PID 2>/dev/null || true
|
|
|
|
# 分析结果
|
|
if [ -f "$HTTPS_LOG" ]; then
|
|
HTTPS_SPEED=$(cat "$HTTPS_LOG" | grep "接收对象中" | tail -1 | grep -oE '[0-9]+(\.[0-9]+)? [KM]iB/s' | tail -1)
|
|
HTTPS_SIZE=$(cat "$HTTPS_LOG" | grep "接收对象中" | tail -1 | grep -oE '[0-9]+(\.[0-9]+)? [KM]iB' | head -1)
|
|
print_success "HTTPS 测试完成"
|
|
echo " 下载大小: ${HTTPS_SIZE:-未知}"
|
|
echo " 下载速度: ${HTTPS_SPEED:-未知}"
|
|
else
|
|
print_error "HTTPS 测试失败"
|
|
HTTPS_SPEED="N/A"
|
|
HTTPS_SIZE="N/A"
|
|
fi
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
print_info "测试结果对比"
|
|
echo ""
|
|
printf "%-20s %-20s %-20s\n" "方式" "下载大小" "下载速度"
|
|
printf "%-20s %-20s %-20s\n" "----" "--------" "--------"
|
|
printf "%-20s %-20s %-20s\n" "SSH" "${SSH_SIZE}" "${SSH_SPEED}"
|
|
printf "%-20s %-20s %-20s\n" "HTTPS" "${HTTPS_SIZE}" "${HTTPS_SPEED}"
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
|
|
# 结论
|
|
if [[ "$SSH_SPEED" != "N/A" ]] && [[ "$HTTPS_SPEED" != "N/A" ]]; then
|
|
# 提取数字进行比较
|
|
SSH_NUM=$(echo "$SSH_SPEED" | grep -oE '[0-9]+(\.[0-9]+)?' | head -1)
|
|
HTTPS_NUM=$(echo "$HTTPS_SPEED" | grep -oE '[0-9]+(\.[0-9]+)?' | head -1)
|
|
|
|
# 检查单位
|
|
SSH_UNIT=$(echo "$SSH_SPEED" | grep -oE '[KM]iB/s')
|
|
HTTPS_UNIT=$(echo "$HTTPS_SPEED" | grep -oE '[KM]iB/s')
|
|
|
|
# 转换为统一单位进行比较 (KiB/s)
|
|
if [[ "$SSH_UNIT" == "MiB/s" ]]; then
|
|
SSH_NUM=$(echo "$SSH_NUM * 1024" | bc)
|
|
fi
|
|
if [[ "$HTTPS_UNIT" == "MiB/s" ]]; then
|
|
HTTPS_NUM=$(echo "$HTTPS_NUM * 1024" | bc)
|
|
fi
|
|
|
|
if (( $(echo "$SSH_NUM > $HTTPS_NUM" | bc -l) )); then
|
|
print_success "结论: SSH 方式更快"
|
|
DIFF=$(echo "scale=2; ($SSH_NUM - $HTTPS_NUM) / $HTTPS_NUM * 100" | bc)
|
|
echo " SSH 比 HTTPS 快 ${DIFF}%"
|
|
elif (( $(echo "$HTTPS_NUM > $SSH_NUM" | bc -l) )); then
|
|
print_success "结论: HTTPS 方式更快"
|
|
DIFF=$(echo "scale=2; ($HTTPS_NUM - $SSH_NUM) / $SSH_NUM * 100" | bc)
|
|
echo " HTTPS 比 SSH 快 ${DIFF}%"
|
|
else
|
|
print_info "结论: 两种方式速度相当"
|
|
fi
|
|
else
|
|
print_warning "无法比较:部分测试失败"
|
|
fi
|
|
|
|
echo ""
|
|
print_info "详细日志保存在:"
|
|
echo " SSH: $SSH_LOG"
|
|
echo " HTTPS: $HTTPS_LOG"
|
|
echo ""
|
|
|
|
# 清理
|
|
cd - > /dev/null
|
|
print_warning "测试目录保留: $TEST_DIR (可手动删除)"
|