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