bb.sh
3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/bash
# 配置参数
FILE="/home/ubuntu/rerank_test/titles.1.8w"
LINES=400
REPEAT=10
URLS=(
"http://localhost:6007/rerank"
"http://172.19.27.9:9997/v1/rerank"
)
# 检查必要命令
if ! command -v jq &> /dev/null; then
echo "错误:jq 未安装,请先安装 jq。"
exit 1
fi
# 检查文件是否存在
if [ ! -f "$FILE" ]; then
echo "错误:文件 $FILE 不存在。"
exit 1
fi
# 读取前 LINES 行,构建 docs 数组的 JSON
echo "正在从 $FILE 读取前 $LINES 行..."
docs_json=$(head -n "$LINES" "$FILE" | jq -R . | jq -s .)
if [ -z "$docs_json" ]; then
echo "错误:读取文件失败或文件为空。"
exit 1
fi
# 构建完整请求体 JSON
base_json='{"query": "健身女生T恤短袖", "top_n": 386, "normalize": true}'
full_json=$(echo "$base_json" | jq --argjson docs "$docs_json" '. + {docs: $docs}')
if [ -z "$full_json" ]; then
echo "错误:构建 JSON 失败。"
exit 1
fi
# 创建临时文件存放请求体
temp_file=$(mktemp)
echo "$full_json" > "$temp_file"
echo "请求体已保存到临时文件: $temp_file"
# 函数:测试单个 URL
test_url() {
local url=$1
local durations=()
local failed=0
echo "========================================"
echo "开始测试 URL: $url"
echo "重复次数: $REPEAT"
echo "----------------------------------------"
for i in $(seq 1 $REPEAT); do
# 开始计时(纳秒)
start=$(date +%s%N)
# 发送请求,-s 静默,-o /dev/null 丢弃响应体,--data-binary 直接读取文件
http_code=$(curl -s -o /dev/null -w "%{http_code}" -X POST "$url" \
-H "Content-Type: application/json" \
--data-binary @"$temp_file")
# 结束计时
end=$(date +%s%N)
duration=$(( (end - start) / 1000000 )) # 毫秒
# 判断是否成功(HTTP 2xx 视为成功)
if [[ "$http_code" -ge 200 && "$http_code" -lt 300 ]]; then
durations+=($duration)
echo "第 $i 次: 耗时 ${duration} ms (HTTP $http_code)"
else
echo "第 $i 次: 失败 (HTTP $http_code) 耗时 ${duration} ms"
failed=$((failed + 1))
fi
# 可选:每次请求间隔一点时间,避免过载(取消注释以启用)
# sleep 0.1
done
# 统计成功请求的耗时
local count=${#durations[@]}
echo "----------------------------------------"
if [ $count -eq 0 ]; then
echo "所有请求均失败,无法统计耗时。"
return
fi
# 计算总和、平均值、最小值、最大值
local sum=0
local min=${durations[0]}
local max=${durations[0]}
for d in "${durations[@]}"; do
sum=$((sum + d))
(( d < min )) && min=$d
(( d > max )) && max=$d
done
local avg=$((sum / count))
echo "成功请求数: $count / $REPEAT"
echo "失败请求数: $failed"
echo "平均耗时: $avg ms"
echo "最小耗时: $min ms"
echo "最大耗时: $max ms"
echo "========================================"
}
# 依次测试每个 URL
for url in "${URLS[@]}"; do
test_url "$url"
done
# 清理临时文件
rm -f "$temp_file"
echo "临时文件已删除。"