添加测试用例
This commit is contained in:
@@ -1,40 +1,70 @@
|
||||
#!/bin/bash
|
||||
# Termux专属启动脚本 编译+启动 解决exit后卡空行/需手动^C问题
|
||||
# 优化:增加JVM内存限制、进程异常捕获、日志输出
|
||||
# Termux专属启动脚本 编译+启动 解决exit后卡空行/需手动^C/参数误判问题
|
||||
# 优化:分离日志输出、保留终端交互、增强异常处理、适配新版参数解析
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")" || { echo "目录切换失败"; exit 1; }
|
||||
BASE_DIR=$(cd .. && pwd)
|
||||
LOG_DIR="$BASE_DIR/logs"
|
||||
MAIN_LOG="$LOG_DIR/main.log"
|
||||
|
||||
# 1. 编译校验
|
||||
# 1. 前置准备:创建日志目录
|
||||
mkdir -p "$LOG_DIR" || { echo "日志目录创建失败"; exit 1; }
|
||||
|
||||
# 2. 编译校验
|
||||
BUILD_SH="$BASE_DIR/bash/build_class.sh"
|
||||
if [ ! -f "$BUILD_SH" ]; then
|
||||
echo "编译脚本不存在:$BUILD_SH"
|
||||
exit 1
|
||||
fi
|
||||
bash "$BUILD_SH" || { echo "编译失败退出"; exit 1; }
|
||||
|
||||
# 2. 类路径配置
|
||||
# 3. 类路径配置(修复:指定完整包名主类)
|
||||
CLASSPATH="$BASE_DIR/runtime"
|
||||
[ -d "$BASE_DIR/libs" ] && CLASSPATH="$CLASSPATH:$BASE_DIR/libs/*"
|
||||
MAIN_CLASS="Main"
|
||||
# 关键:Main类带完整包名,避免类找不到或参数解析异常
|
||||
MAIN_CLASS="cc.winboll.Main"
|
||||
|
||||
# 3. 关键优化:JVM内存限制(避免内存耗尽)+ 异常日志输出
|
||||
export _JAVA_OPTIONS="-Xmx128m -Xms64m" # 限制最大堆内存128M,初始堆64M,适配Termux
|
||||
# 4. JVM优化配置(适配Termux低内存环境)
|
||||
export _JAVA_OPTIONS="-Xmx128m -Xms64m -Dfile.encoding=UTF-8"
|
||||
STOP_SIGNAL=0
|
||||
JAVA_PID=0
|
||||
|
||||
# 捕获进程异常终止信号
|
||||
# 5. 信号捕获:优雅停机+终端重置
|
||||
on_exit() {
|
||||
STOP_SIGNAL=1
|
||||
echo -e "\n⚠️ 服务异常终止,可查看日志排查问题"
|
||||
echo -e "\n⚠️ 收到停止信号,正在优雅停机..."
|
||||
# 向Java进程发送中断信号
|
||||
if [ $JAVA_PID -ne 0 ]; then
|
||||
kill -INT $JAVA_PID 2>/dev/null
|
||||
sleep 1
|
||||
kill -9 $JAVA_PID 2>/dev/null
|
||||
fi
|
||||
stty sane
|
||||
echo -e "✅ 服务已停止,日志文件:$MAIN_LOG"
|
||||
exit 1
|
||||
}
|
||||
trap 'on_exit' SIGABRT SIGSEGV SIGILL SIGTERM
|
||||
# 捕获更多退出信号
|
||||
trap 'on_exit' SIGINT SIGTERM SIGABRT SIGSEGV SIGILL
|
||||
|
||||
# 4. 启动服务+日志输出
|
||||
# 6. 启动服务(核心修改:分离日志,保留终端stdin)
|
||||
stty -echoctl # 屏蔽^C视觉印记
|
||||
echo -e "\n🚀 服务启动中,输入help查指令,输入exit优雅停机"
|
||||
java -cp "$CLASSPATH" "$MAIN_CLASS" -v -log:ALL &> "$BASE_DIR/logs/main.log"
|
||||
echo -e "🚀 服务启动中,输入help查指令,输入exit优雅停机"
|
||||
echo -e "📝 日志输出路径:$MAIN_LOG\n"
|
||||
|
||||
# 5. Java退出后 强制重置终端+脚本退出,彻底无残留
|
||||
if [ $STOP_SIGNAL -eq 0 ]; then
|
||||
echo -e "\n✅ 服务优雅停机"
|
||||
fi
|
||||
# 关键:stdout/stderr 追加到日志,但保留stdin给程序交互
|
||||
java -cp "$CLASSPATH" "$MAIN_CLASS" -v -log:ALL >> "$MAIN_LOG" 2>&1 &
|
||||
JAVA_PID=$!
|
||||
|
||||
# 7. 等待Java进程结束(解决卡空行问题)
|
||||
wait $JAVA_PID
|
||||
EXIT_CODE=$?
|
||||
|
||||
# 8. 后置处理
|
||||
stty sane
|
||||
exit $?
|
||||
|
||||
if [ $STOP_SIGNAL -eq 0 ]; then
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
echo -e "\n✅ 服务优雅停机完成"
|
||||
else
|
||||
echo -e "\n❌ 服务异常退出,退出码:$EXIT_CODE,查看日志:$MAIN_LOG"
|
||||
fi
|
||||
fi
|
||||
exit $EXIT_CODE
|
||||
|
||||
64
bash/unit_test.sh
Normal file
64
bash/unit_test.sh
Normal file
@@ -0,0 +1,64 @@
|
||||
#!/bin/bash
|
||||
# Termux专属 测试用例启动脚本
|
||||
# 功能:编译代码 + 运行ConsoleCmdAutoTest测试类 + 输出测试日志 + 终端环境重置
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")" || { echo "❌ 目录切换失败"; exit 1; }
|
||||
BASE_DIR=$(cd .. && pwd)
|
||||
|
||||
# ========== 配置项 ==========
|
||||
# 测试类全限定名
|
||||
TEST_MAIN_CLASS="cc.winboll.test.ConsoleCmdAutoTest"
|
||||
# 日志输出路径(与测试类中配置的日志目录一致)
|
||||
TEST_LOG_DIR="$BASE_DIR/logs"
|
||||
TEST_LOG_FILE="$TEST_LOG_DIR/test_run.log"
|
||||
# JVM 内存配置(适配Termux低内存环境)
|
||||
JAVA_OPTS="-Xmx128m -Xms64m"
|
||||
# 编译脚本路径
|
||||
BUILD_SH="$BASE_DIR/bash/build_class.sh"
|
||||
|
||||
# ========== 前置检查 ==========
|
||||
# 创建日志目录
|
||||
if [ ! -d "$TEST_LOG_DIR" ]; then
|
||||
mkdir -p "$TEST_LOG_DIR" || { echo "❌ 日志目录创建失败: $TEST_LOG_DIR"; exit 1; }
|
||||
fi
|
||||
|
||||
# ========== 编译代码 ==========
|
||||
echo "📦 开始编译项目代码..."
|
||||
bash "$BUILD_SH" || { echo "❌ 项目编译失败,退出测试"; exit 1; }
|
||||
echo "✅ 项目编译成功"
|
||||
|
||||
# ========== 配置类路径 ==========
|
||||
CLASSPATH="$BASE_DIR/runtime"
|
||||
if [ -d "$BASE_DIR/libs" ]; then
|
||||
CLASSPATH="$CLASSPATH:$BASE_DIR/libs/*"
|
||||
fi
|
||||
|
||||
# ========== 信号捕获(异常终止处理) ==========
|
||||
STOP_SIGNAL=0
|
||||
on_exit() {
|
||||
STOP_SIGNAL=1
|
||||
echo -e "\n⚠️ 测试进程异常终止!查看日志: $TEST_LOG_FILE"
|
||||
stty sane
|
||||
exit 1
|
||||
}
|
||||
trap 'on_exit' SIGABRT SIGSEGV SIGILL SIGTERM
|
||||
|
||||
# ========== 启动测试用例 ==========
|
||||
echo -e "\n🚀 启动测试用例: $TEST_MAIN_CLASS"
|
||||
echo -e "📜 测试日志将输出到: $TEST_LOG_FILE"
|
||||
echo -e "=====================================\n"
|
||||
|
||||
# 屏蔽^C视觉印记 + 执行测试类 + 日志重定向
|
||||
stty -echoctl
|
||||
java $JAVA_OPTS -cp "$CLASSPATH" "$TEST_MAIN_CLASS" -v -log:ALL &> "$TEST_LOG_FILE"
|
||||
|
||||
# ========== 测试结束处理 ==========
|
||||
if [ $STOP_SIGNAL -eq 0 ]; then
|
||||
echo -e "\n====================================="
|
||||
echo "✅ 测试用例执行完成!"
|
||||
echo "📊 测试报告路径: $BASE_DIR/test-report.txt"
|
||||
echo "📜 详细日志路径: $TEST_LOG_FILE"
|
||||
fi
|
||||
|
||||
# 重置终端属性,避免残留问题
|
||||
stty sane
|
||||
exit $?
|
||||
Reference in New Issue
Block a user