Files
Alicho/tests/scripts/run_regression_tests.sh
2025-10-28 10:27:49 +08:00

165 lines
5.7 KiB
Bash

#!/bin/bash
# ================================================================================================
# Audio Backend - 回归测试运行脚本
# ================================================================================================
# 描述: 运行关键测试案例以验证基本功能,适用于快速验证和持续集成环境
# ================================================================================================
# 设置颜色输出
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色
# 脚本所在的目录路径
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
# 项目根目录
ROOT_DIR="$(dirname "$(dirname "$(dirname "$SCRIPT_DIR")")")"
# 构建目录
BUILD_DIR="$ROOT_DIR/build"
# 测试结果目录
TEST_RESULTS_DIR="$ROOT_DIR/test-results"
# 回归测试结果目录
REGRESSION_TEST_RESULTS_DIR="$TEST_RESULTS_DIR/regression"
# 测试可执行文件目录
TEST_BIN_DIR="$BUILD_DIR/bin/tests"
# 打印脚本信息
echo -e "${BLUE}=========================================================${NC}"
echo -e "${BLUE} 音频后端回归测试运行脚本 ${NC}"
echo -e "${BLUE}=========================================================${NC}"
echo -e "${YELLOW}项目根目录: ${ROOT_DIR}${NC}"
echo -e "${YELLOW}测试结果录: ${REGRESSION_TEST_RESULTS_DIR}${NC}"
echo ""
# 确保测试结果目录存在
mkdir -p "$REGRESSION_TEST_RESULTS_DIR"
# 检查测试目录是否存在
if [ ! -d "$TEST_BIN_DIR" ]; then
echo -e "${RED}错误: 测试可执行文件目录不存在。请先构建项目。${NC}"
exit 1
fi
# 回归测试配置 - 指定关键测试案例
# 格式: "测试类型:测试可执行文件:测试过滤器"
REGRESSION_TESTS=(
# 引擎核心关键测试
"unit:engine/audio_buffer_test:*"
"unit:engine/audio_format_test:*"
# 通信关键测试
"unit:communication/message_test:*"
"unit:communication/zmq_transport_test:BasicCommunication"
# 前端关键测试
"unit:frontend/transport_layer_test:BasicConnection"
"unit:frontend/frontend_manager_test:BasicConnection"
# 集成关键测试
"integration:engine_communication_test:BasicCommunication"
"integration:frontend_engine_test:BasicConnection"
)
echo -e "${BLUE}回归测试将运行 ${#REGRESSION_TESTS[@]} 个关键测试案例${NC}"
echo ""
# 准备测试环境
echo -e "${BLUE}准备回归测试环境...${NC}"
"$SCRIPT_DIR/prepare_test_env.sh"
if [ $? -ne 0 ]; then
echo -e "${RED}准备测试环境失败${NC}"
exit 1
fi
echo -e "${GREEN}回归测试环境准备完成${NC}"
echo ""
# 运行回归测试
PASSED_TESTS=0
FAILED_TESTS=0
TOTAL_TESTS=0
# 创建回归测试报告
REPORT_FILE="$REGRESSION_TEST_RESULTS_DIR/regression_results.txt"
echo "音频后端回归测试结果 ($(date))" > "$REPORT_FILE"
echo "=================================" >> "$REPORT_FILE"
echo "" >> "$REPORT_FILE"
for test_spec in "${REGRESSION_TESTS[@]}"; do
# 解析测试规格
IFS=':' read -r test_type test_executable test_filter <<< "$test_spec"
# 查找对应的测试可执行文件
TEST_PATH=""
if [ "$test_type" == "unit" ]; then
TEST_PATH="$TEST_BIN_DIR/unit/$test_executable"
elif [ "$test_type" == "integration" ]; then
TEST_PATH="$TEST_BIN_DIR/integration/$test_executable"
else
echo -e "${YELLOW}警告: 未知的测试类型 '$test_type',跳过...${NC}"
continue
fi
if [ ! -x "$TEST_PATH" ]; then
echo -e "${YELLOW}警告: 测试可执行文件不存在或不可执行: $TEST_PATH,跳过...${NC}"
echo "跳过 - 测试不存在: $test_type/$test_executable:$test_filter" >> "$REPORT_FILE"
continue
fi
echo -e "${BLUE}运行回归测试: ${test_type}/${test_executable}:${test_filter}${NC}"
# 准备过滤器参数
FILTER_PARAM=""
if [ "$test_filter" != "*" ]; then
FILTER_PARAM="--gtest_filter=$test_filter"
fi
# 运行测试
TEST_OUTPUT="$REGRESSION_TEST_RESULTS_DIR/${test_type}_${test_executable//\//_}_${test_filter//\*/_all_}.txt"
"$TEST_PATH" $FILTER_PARAM > "$TEST_OUTPUT" 2>&1
TEST_RESULT=$?
# 检查测试结果
if [ $TEST_RESULT -eq 0 ]; then
echo -e "${GREEN}通过: ${test_type}/${test_executable}:${test_filter}${NC}"
echo "通过 - $test_type/$test_executable:$test_filter" >> "$REPORT_FILE"
((PASSED_TESTS++))
else
echo -e "${RED}失败: ${test_type}/${test_executable}:${test_filter}${NC}"
echo "失败 - $test_type/$test_executable:$test_filter" >> "$REPORT_FILE"
((FAILED_TESTS++))
fi
((TOTAL_TESTS++))
echo "" >> "$REPORT_FILE"
done
# 生成结果统计
echo "" >> "$REPORT_FILE"
echo "=================================" >> "$REPORT_FILE"
echo "总计: $TOTAL_TESTS 个测试" >> "$REPORT_FILE"
echo "通过: $PASSED_TESTS" >> "$REPORT_FILE"
echo "失败: $FAILED_TESTS" >> "$REPORT_FILE"
echo "完成时间: $(date)" >> "$REPORT_FILE"
# 打印结果汇总
echo -e "${BLUE}=========================================================${NC}"
echo -e "${BLUE} 回归测试结果汇总 ${NC}"
echo -e "${BLUE}=========================================================${NC}"
echo -e "总测试数: ${TOTAL_TESTS}"
echo -e "通过: ${GREEN}${PASSED_TESTS}${NC}"
echo -e "失败: ${RED}${FAILED_TESTS}${NC}"
echo ""
echo -e "详细报告已生成到: ${YELLOW}${REPORT_FILE}${NC}"
echo ""
# 返回测试结果
if [ $FAILED_TESTS -eq 0 ]; then
echo -e "${GREEN}所有回归测试通过!${NC}"
exit 0
else
echo -e "${RED}有回归测试失败!${NC}"
exit 1
fi