Skip to content

Commit 6c95081

Browse files
author
Sunny Jiao
committed
no message
1 parent b3ffa43 commit 6c95081

File tree

1 file changed

+268
-0
lines changed

1 file changed

+268
-0
lines changed

run_lite_fn_tests.sh

Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
#!/bin/bash
2+
3+
# 循环运行 LiteFnQueryHttpFilterTest 和 LiteFnQueryGrpcInterceptorTest 的脚本
4+
# 作者: 自动生成
5+
# 日期: $(date)
6+
7+
set -e # 遇到错误时退出
8+
9+
# 颜色定义
10+
RED='\033[0;31m'
11+
GREEN='\033[0;32m'
12+
YELLOW='\033[1;33m'
13+
BLUE='\033[0;34m'
14+
NC='\033[0m' # No Color
15+
16+
# 配置参数
17+
DEFAULT_ITERATIONS=10
18+
LOG_DIR="./lite_fn_test_logs"
19+
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
20+
LOG_FILE="$LOG_DIR/test_run_$TIMESTAMP.log"
21+
SUMMARY_FILE="$LOG_DIR/test_summary_$TIMESTAMP.log"
22+
23+
# 测试类名
24+
HTTP_TEST="org.tron.core.services.filter.LiteFnQueryHttpFilterTest"
25+
GRPC_TEST="org.tron.core.services.filter.LiteFnQueryGrpcInterceptorTest"
26+
27+
# 创建日志目录
28+
mkdir -p "$LOG_DIR"
29+
30+
# 帮助信息
31+
show_help() {
32+
echo "用法: $0 [选项]"
33+
echo "选项:"
34+
echo " -n, --iterations NUM 运行次数 (默认: $DEFAULT_ITERATIONS)"
35+
echo " -h, --help 显示此帮助信息"
36+
echo " -v, --verbose 详细输出模式"
37+
echo " --http-only 只运行 HTTP 测试"
38+
echo " --grpc-only 只运行 gRPC 测试"
39+
echo ""
40+
echo "示例:"
41+
echo " $0 -n 20 # 运行 20 次"
42+
echo " $0 --http-only -n 5 # 只运行 HTTP 测试 5 次"
43+
echo " $0 --grpc-only # 只运行 gRPC 测试 10 次"
44+
}
45+
46+
# 解析命令行参数
47+
ITERATIONS=$DEFAULT_ITERATIONS
48+
VERBOSE=false
49+
HTTP_ONLY=false
50+
GRPC_ONLY=false
51+
52+
while [[ $# -gt 0 ]]; do
53+
case $1 in
54+
-n|--iterations)
55+
ITERATIONS="$2"
56+
shift 2
57+
;;
58+
-h|--help)
59+
show_help
60+
exit 0
61+
;;
62+
-v|--verbose)
63+
VERBOSE=true
64+
shift
65+
;;
66+
--http-only)
67+
HTTP_ONLY=true
68+
shift
69+
;;
70+
--grpc-only)
71+
GRPC_ONLY=true
72+
shift
73+
;;
74+
*)
75+
echo "未知选项: $1"
76+
show_help
77+
exit 1
78+
;;
79+
esac
80+
done
81+
82+
# 验证参数
83+
if ! [[ "$ITERATIONS" =~ ^[0-9]+$ ]] || [ "$ITERATIONS" -le 0 ]; then
84+
echo -e "${RED}错误: 运行次数必须是正整数${NC}"
85+
exit 1
86+
fi
87+
88+
if [ "$HTTP_ONLY" = true ] && [ "$GRPC_ONLY" = true ]; then
89+
echo -e "${RED}错误: --http-only 和 --grpc-only 不能同时使用${NC}"
90+
exit 1
91+
fi
92+
93+
# 统计变量
94+
HTTP_SUCCESS=0
95+
HTTP_FAILED=0
96+
GRPC_SUCCESS=0
97+
GRPC_FAILED=0
98+
TOTAL_START_TIME=$(date +%s)
99+
100+
# 日志函数
101+
log_info() {
102+
local message="$1"
103+
echo -e "${BLUE}[INFO]${NC} $message" | tee -a "$LOG_FILE"
104+
}
105+
106+
log_success() {
107+
local message="$1"
108+
echo -e "${GREEN}[SUCCESS]${NC} $message" | tee -a "$LOG_FILE"
109+
}
110+
111+
log_error() {
112+
local message="$1"
113+
echo -e "${RED}[ERROR]${NC} $message" | tee -a "$LOG_FILE"
114+
}
115+
116+
log_warning() {
117+
local message="$1"
118+
echo -e "${YELLOW}[WARNING]${NC} $message" | tee -a "$LOG_FILE"
119+
}
120+
121+
# 运行单个测试的函数
122+
run_test() {
123+
local test_class="$1"
124+
local test_name="$2"
125+
local iteration="$3"
126+
127+
log_info "$iteration 次运行 $test_name 测试..."
128+
129+
# 先执行clean
130+
log_info "执行clean操作..."
131+
local clean_output=$(./gradlew clean 2>&1)
132+
local clean_exit_code=$?
133+
134+
if [ $clean_exit_code -ne 0 ]; then
135+
log_error "Clean操作失败"
136+
echo "Clean错误输出:" >> "$LOG_FILE"
137+
echo "$clean_output" >> "$LOG_FILE"
138+
return 1
139+
fi
140+
141+
local start_time=$(date +%s)
142+
local test_output
143+
144+
if [ "$VERBOSE" = true ]; then
145+
test_output=$(./gradlew :framework:test --tests "$test_class" --rerun-tasks 2>&1)
146+
else
147+
test_output=$(./gradlew :framework:test --tests "$test_class" --rerun-tasks 2>&1 | grep -E "(PASSED|FAILED|BUILD|ERROR)")
148+
fi
149+
150+
local exit_code=$?
151+
local end_time=$(date +%s)
152+
local duration=$((end_time - start_time))
153+
154+
echo "$test_output" >> "$LOG_FILE"
155+
156+
if [ $exit_code -eq 0 ]; then
157+
log_success "$test_name 测试通过 (耗时: ${duration}s)"
158+
return 0
159+
else
160+
log_error "$test_name 测试失败 (耗时: ${duration}s)"
161+
echo "错误输出:" >> "$LOG_FILE"
162+
echo "$test_output" >> "$LOG_FILE"
163+
return 1
164+
fi
165+
}
166+
167+
# 主执行逻辑
168+
echo -e "${BLUE}========================================${NC}"
169+
echo -e "${BLUE} LiteFn 测试循环运行脚本${NC}"
170+
echo -e "${BLUE}========================================${NC}"
171+
echo ""
172+
log_info "开始测试运行..."
173+
log_info "运行次数: $ITERATIONS"
174+
log_info "日志文件: $LOG_FILE"
175+
log_info "汇总文件: $SUMMARY_FILE"
176+
177+
if [ "$HTTP_ONLY" = true ]; then
178+
log_info "模式: 仅运行 HTTP 测试"
179+
elif [ "$GRPC_ONLY" = true ]; then
180+
log_info "模式: 仅运行 gRPC 测试"
181+
else
182+
log_info "模式: 运行所有测试"
183+
fi
184+
185+
echo ""
186+
187+
# 执行测试循环
188+
for i in $(seq 1 $ITERATIONS); do
189+
echo -e "${YELLOW}======== 第 $i/$ITERATIONS 轮测试 ========${NC}"
190+
191+
# 运行 HTTP 测试
192+
if [ "$GRPC_ONLY" != true ]; then
193+
if run_test "$HTTP_TEST" "HTTP Filter" "$i"; then
194+
((HTTP_SUCCESS++))
195+
else
196+
((HTTP_FAILED++))
197+
fi
198+
fi
199+
200+
# 运行 gRPC 测试
201+
if [ "$HTTP_ONLY" != true ]; then
202+
if run_test "$GRPC_TEST" "gRPC Interceptor" "$i"; then
203+
((GRPC_SUCCESS++))
204+
else
205+
((GRPC_FAILED++))
206+
fi
207+
fi
208+
209+
echo ""
210+
done
211+
212+
# 计算总耗时
213+
TOTAL_END_TIME=$(date +%s)
214+
TOTAL_DURATION=$((TOTAL_END_TIME - TOTAL_START_TIME))
215+
216+
# 生成汇总报告
217+
echo -e "${BLUE}========================================${NC}"
218+
echo -e "${BLUE} 测试汇总报告${NC}"
219+
echo -e "${BLUE}========================================${NC}"
220+
221+
{
222+
echo "测试汇总报告"
223+
echo "生成时间: $(date)"
224+
echo "总运行时间: ${TOTAL_DURATION}s"
225+
echo "运行次数: $ITERATIONS"
226+
echo ""
227+
228+
if [ "$GRPC_ONLY" != true ]; then
229+
echo "HTTP Filter 测试结果:"
230+
echo " 成功: $HTTP_SUCCESS"
231+
echo " 失败: $HTTP_FAILED"
232+
echo " 成功率: $(( HTTP_SUCCESS * 100 / (HTTP_SUCCESS + HTTP_FAILED) ))%"
233+
echo ""
234+
fi
235+
236+
if [ "$HTTP_ONLY" != true ]; then
237+
echo "gRPC Interceptor 测试结果:"
238+
echo " 成功: $GRPC_SUCCESS"
239+
echo " 失败: $GRPC_FAILED"
240+
echo " 成功率: $(( GRPC_SUCCESS * 100 / (GRPC_SUCCESS + GRPC_FAILED) ))%"
241+
echo ""
242+
fi
243+
244+
TOTAL_SUCCESS=$((HTTP_SUCCESS + GRPC_SUCCESS))
245+
TOTAL_FAILED=$((HTTP_FAILED + GRPC_FAILED))
246+
TOTAL_TESTS=$((TOTAL_SUCCESS + TOTAL_FAILED))
247+
248+
echo "总体结果:"
249+
echo " 总测试数: $TOTAL_TESTS"
250+
echo " 总成功数: $TOTAL_SUCCESS"
251+
echo " 总失败数: $TOTAL_FAILED"
252+
if [ $TOTAL_TESTS -gt 0 ]; then
253+
echo " 总成功率: $(( TOTAL_SUCCESS * 100 / TOTAL_TESTS ))%"
254+
fi
255+
} | tee "$SUMMARY_FILE"
256+
257+
echo ""
258+
log_info "测试完成!详细日志请查看: $LOG_FILE"
259+
log_info "汇总报告请查看: $SUMMARY_FILE"
260+
261+
# 根据结果设置退出码
262+
if [ $TOTAL_FAILED -gt 0 ]; then
263+
log_warning "存在失败的测试,请检查日志"
264+
exit 1
265+
else
266+
log_success "所有测试都通过了!"
267+
exit 0
268+
fi

0 commit comments

Comments
 (0)