230 lines
7.0 KiB
Bash
230 lines
7.0 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"
|
|
# 集成测试结果目录
|
|
INTEGRATION_TEST_RESULTS_DIR="$TEST_RESULTS_DIR/integration"
|
|
# 测试可执行文件目录
|
|
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}测试结果录: ${INTEGRATION_TEST_RESULTS_DIR}${NC}"
|
|
echo ""
|
|
|
|
# 确保测试结果目录存在
|
|
mkdir -p "$INTEGRATION_TEST_RESULTS_DIR"
|
|
|
|
# 检查测试目录是否存在
|
|
if [ ! -d "$TEST_BIN_DIR" ]; then
|
|
echo -e "${RED}错误: 测试可执行文件目录不存在。请先构建项目。${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 收集所有集成测试可执行文件
|
|
INTEGRATION_TESTS=()
|
|
if [ -d "$TEST_BIN_DIR/integration" ]; then
|
|
for test_file in "$TEST_BIN_DIR/integration"/*; do
|
|
if [ -x "$test_file" ]; then
|
|
INTEGRATION_TESTS+=("$test_file")
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# 如果没有找到集成测试,显示警告并退出
|
|
if [ ${#INTEGRATION_TESTS[@]} -eq 0 ]; then
|
|
echo -e "${YELLOW}警告: 未找到集成测试可执行文件。${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
echo -e "${BLUE}找到 ${#INTEGRATION_TESTS[@]} 个集成测试${NC}"
|
|
echo ""
|
|
|
|
# 准备测试环境
|
|
echo -e "${BLUE}准备集成测试环境...${NC}"
|
|
RESOURCES_DIR="$ROOT_DIR/tests/integration/resources"
|
|
if [ ! -d "$RESOURCES_DIR" ]; then
|
|
mkdir -p "$RESOURCES_DIR"
|
|
echo -e "创建测试资源目录: $RESOURCES_DIR"
|
|
fi
|
|
|
|
TEMP_DIR="$ROOT_DIR/tests/integration/temp"
|
|
if [ ! -d "$TEMP_DIR" ]; then
|
|
mkdir -p "$TEMP_DIR"
|
|
echo -e "创建临时测试目录: $TEMP_DIR"
|
|
fi
|
|
|
|
# 检查并创建测试插件目录
|
|
PLUGINS_DIR="$RESOURCES_DIR/plugins"
|
|
if [ ! -d "$PLUGINS_DIR" ]; then
|
|
mkdir -p "$PLUGINS_DIR"
|
|
echo -e "创建测试插件目录: $PLUGINS_DIR"
|
|
fi
|
|
|
|
# 检查并创建测试配置目录
|
|
CONFIG_DIR="$RESOURCES_DIR/config"
|
|
if [ ! -d "$CONFIG_DIR" ]; then
|
|
mkdir -p "$CONFIG_DIR"
|
|
echo -e "创建测试配置目录: $CONFIG_DIR"
|
|
fi
|
|
|
|
# 检查并创建测试音频文件目录
|
|
AUDIO_FILES_DIR="$RESOURCES_DIR/audio"
|
|
if [ ! -d "$AUDIO_FILES_DIR" ]; then
|
|
mkdir -p "$AUDIO_FILES_DIR"
|
|
echo -e "创建测试音频文件目录: $AUDIO_FILES_DIR"
|
|
fi
|
|
|
|
echo -e "${GREEN}集成测试环境准备完成${NC}"
|
|
echo ""
|
|
|
|
# 运行所有集成测试
|
|
PASSED_TESTS=0
|
|
FAILED_TESTS=0
|
|
TOTAL_TESTS=0
|
|
|
|
for test_executable in "${INTEGRATION_TESTS[@]}"; do
|
|
test_name=$(basename "$test_executable")
|
|
|
|
echo -e "${BLUE}运行测试: ${test_name}${NC}"
|
|
|
|
# 创建结果目录
|
|
mkdir -p "$INTEGRATION_TEST_RESULTS_DIR"
|
|
|
|
# 运行测试并保存结果
|
|
xml_output="$INTEGRATION_TEST_RESULTS_DIR/${test_name}_result.xml"
|
|
text_output="$INTEGRATION_TEST_RESULTS_DIR/${test_name}_result.txt"
|
|
|
|
# 运行测试
|
|
"$test_executable" --gtest_output=xml:"$xml_output" | tee "$text_output"
|
|
test_result=${PIPESTATUS[0]}
|
|
|
|
# 统计测试结果
|
|
if [ $test_result -eq 0 ]; then
|
|
echo -e "${GREEN}测试通过: ${test_name}${NC}"
|
|
((PASSED_TESTS++))
|
|
else
|
|
echo -e "${RED}测试失败: ${test_name} (退出码: $test_result)${NC}"
|
|
((FAILED_TESTS++))
|
|
fi
|
|
|
|
((TOTAL_TESTS++))
|
|
echo ""
|
|
done
|
|
|
|
# 生成简单的HTML报告
|
|
HTML_REPORT="$INTEGRATION_TEST_RESULTS_DIR/integration_test_report.html"
|
|
cat > "$HTML_REPORT" <<EOF
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>音频后端集成测试报告</title>
|
|
<style>
|
|
body { font-family: Arial, sans-serif; margin: 20px; }
|
|
h1 { color: #333; }
|
|
.summary { margin-bottom: 20px; }
|
|
.pass { color: green; }
|
|
.fail { color: red; }
|
|
table { border-collapse: collapse; width: 100%; }
|
|
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
|
|
th { background-color: #f2f2f2; }
|
|
tr:nth-child(even) { background-color: #f9f9f9; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>音频后端集成测试报告</h1>
|
|
<div class="summary">
|
|
<p>总测试数: <strong>${TOTAL_TESTS}</strong></p>
|
|
<p>通过: <strong class="pass">${PASSED_TESTS}</strong></p>
|
|
<p>失败: <strong class="fail">${FAILED_TESTS}</strong></p>
|
|
</div>
|
|
<h2>测试详情</h2>
|
|
<table>
|
|
<tr>
|
|
<th>测试名称</th>
|
|
<th>结果</th>
|
|
<th>详情链接</th>
|
|
</tr>
|
|
EOF
|
|
|
|
# 添加测试详情到HTML报告
|
|
for test_executable in "${INTEGRATION_TESTS[@]}"; do
|
|
test_name=$(basename "$test_executable")
|
|
xml_output="$INTEGRATION_TEST_RESULTS_DIR/${test_name}_result.xml"
|
|
text_output="$INTEGRATION_TEST_RESULTS_DIR/${test_name}_result.txt"
|
|
|
|
# 检查XML输出是否存在以确定测试是否成功运行
|
|
if [ -f "$xml_output" ]; then
|
|
# 从XML中提取失败测试数
|
|
failures=$(grep -c "<failure" "$xml_output" || echo "0")
|
|
if [ "$failures" -eq "0" ]; then
|
|
result="通过"
|
|
result_class="pass"
|
|
else
|
|
result="失败"
|
|
result_class="fail"
|
|
fi
|
|
else
|
|
result="错误"
|
|
result_class="fail"
|
|
failures="N/A"
|
|
fi
|
|
|
|
# 添加到HTML表格
|
|
cat >> "$HTML_REPORT" <<EOF
|
|
<tr>
|
|
<td>${test_name}</td>
|
|
<td class="${result_class}">${result}</td>
|
|
<td><a href="${test_name}_result.txt">日志</a> | <a href="${test_name}_result.xml">XML</a></td>
|
|
</tr>
|
|
EOF
|
|
done
|
|
|
|
# 完成HTML报告
|
|
cat >> "$HTML_REPORT" <<EOF
|
|
</table>
|
|
<p>报告生成时间: $(date)</p>
|
|
</body>
|
|
</html>
|
|
EOF
|
|
|
|
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}${HTML_REPORT}${NC}"
|
|
echo ""
|
|
|
|
# 返回测试结果
|
|
if [ $FAILED_TESTS -eq 0 ]; then
|
|
echo -e "${GREEN}所有集成测试通过!${NC}"
|
|
exit 0
|
|
else
|
|
echo -e "${RED}有集成测试失败!${NC}"
|
|
exit 1
|
|
fi |