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

233 lines
7.4 KiB
Batchfile

@echo off
REM ================================================================================================
REM Audio Backend - 集成测试运行脚本 (Windows)
REM ================================================================================================
REM 描述: 运行项目中的所有集成测试
REM ================================================================================================
setlocal EnableDelayedExpansion
REM 设置颜色输出
set "GREEN=[92m"
set "RED=[91m"
set "YELLOW=[93m"
set "BLUE=[94m"
set "NC=[0m"
REM 脚本所在的目录路径
set "SCRIPT_DIR=%~dp0"
REM 项目根目录
for %%i in ("%SCRIPT_DIR%\..\..\..\") do set "ROOT_DIR=%%~fi"
REM 构建目录
set "BUILD_DIR=%ROOT_DIR%\build"
REM 测试结果目录
set "TEST_RESULTS_DIR=%ROOT_DIR%\test-results"
REM 集成测试结果目录
set "INTEGRATION_TEST_RESULTS_DIR=%TEST_RESULTS_DIR%\integration"
REM 测试可执行文件目录
set "TEST_BIN_DIR=%BUILD_DIR%\bin\tests"
REM 打印脚本信息
echo %BLUE%=========================================================%NC%
echo %BLUE% 音频后端集成测试运行脚本 %NC%
echo %BLUE%=========================================================%NC%
echo %YELLOW%项目根目录: %ROOT_DIR%%NC%
echo %YELLOW%测试结果目: %INTEGRATION_TEST_RESULTS_DIR%%NC%
echo.
REM 确保测试结果目录存在
if not exist "%INTEGRATION_TEST_RESULTS_DIR%" mkdir "%INTEGRATION_TEST_RESULTS_DIR%"
REM 检查测试目录是否存在
if not exist "%TEST_BIN_DIR%" (
echo %RED%错误: 测试可执行文件目录不存在。请先构建项目。%NC%
exit /b 1
)
REM 收集所有集成测试可执行文件
set "INTEGRATION_TEST_COUNT=0"
set "INTEGRATION_TESTS="
if exist "%TEST_BIN_DIR%\integration\" (
for %%f in ("%TEST_BIN_DIR%\integration\*.exe") do (
if exist "%%f" (
set /a INTEGRATION_TEST_COUNT+=1
set "INTEGRATION_TESTS=!INTEGRATION_TESTS! %%f"
)
)
)
REM 如果没有找到集成测试,显示警告并退出
if %INTEGRATION_TEST_COUNT% equ 0 (
echo %YELLOW%警告: 未找到集成测试可执行文件。%NC%
exit /b 0
)
echo %BLUE%找到 %INTEGRATION_TEST_COUNT% 个集成测试%NC%
echo.
REM 准备测试环境
echo %BLUE%准备集成测试环境...%NC%
set "RESOURCES_DIR=%ROOT_DIR%\tests\integration\resources"
if not exist "%RESOURCES_DIR%" (
mkdir "%RESOURCES_DIR%"
echo 创建测试资源目录: %RESOURCES_DIR%
)
set "TEMP_DIR=%ROOT_DIR%\tests\integration\temp"
if not exist "%TEMP_DIR%" (
mkdir "%TEMP_DIR%"
echo 创建临时测试目录: %TEMP_DIR%
)
REM 检查并创建测试插件目录
set "PLUGINS_DIR=%RESOURCES_DIR%\plugins"
if not exist "%PLUGINS_DIR%" (
mkdir "%PLUGINS_DIR%"
echo 创建测试插件目录: %PLUGINS_DIR%
)
REM 检查并创建测试配置目录
set "CONFIG_DIR=%RESOURCES_DIR%\config"
if not exist "%CONFIG_DIR%" (
mkdir "%CONFIG_DIR%"
echo 创建测试配置目录: %CONFIG_DIR%
)
REM 检查并创建测试音频文件目录
set "AUDIO_FILES_DIR=%RESOURCES_DIR%\audio"
if not exist "%AUDIO_FILES_DIR%" (
mkdir "%AUDIO_FILES_DIR%"
echo 创建测试音频文件目录: %AUDIO_FILES_DIR%
)
echo %GREEN%集成测试环准备完成%NC%
echo.
REM 运行所有集成测试
set "PASSED_TESTS=0"
set "FAILED_TESTS=0"
set "TOTAL_TESTS=0"
for %%t in (%INTEGRATION_TESTS%) do (
set "test_executable=%%t"
for %%i in ("!test_executable!") do set "test_name=%%~ni"
echo %BLUE%运行测试: !test_name!%NC%
REM 运行测试并保存结果
set "xml_output=%INTEGRATION_TEST_RESULTS_DIR%\!test_name!_result.xml"
set "text_output=%INTEGRATION_TEST_RESULTS_DIR%\!test_name!_result.txt"
REM 运行测试
"!test_executable!" --gtest_output=xml:"!xml_output!" > "!text_output!" 2>&1
REM 检查测试结果
if !ERRORLEVEL! equ 0 (
echo %GREEN%测试通过: !test_name!%NC%
set /a PASSED_TESTS+=1
) else (
echo %RED%测试失败: !test_name! (退出码: !ERRORLEVEL!)%NC%
set /a FAILED_TESTS+=1
)
set /a TOTAL_TESTS+=1
echo.
)
REM 生成简单的HTML报
set "HTML_REPORT=%INTEGRATION_TEST_RESULTS_DIR%\integration_test_report.html"
(
echo ^<!DOCTYPE html^>
echo ^<html^>
echo ^<head^>
echo ^<meta charset="UTF-8"^>
echo ^<title^>音频后端集成测试报告^</title^>
echo ^<style^>
echo body { font-family: Arial, sans-serif; margin: 20px; }
echo h1 { color: #333; }
echo .summary { margin-bottom: 20px; }
echo .pass { color: green; }
echo .fail { color: red; }
echo table { border-collapse: collapse; width: 100%%; }
echo th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
echo th { background-color: #f2f2f2; }
echo tr:nth-child(even) { background-color: #f9f9f9; }
echo ^</style^>
echo ^</head^>
echo ^<body^>
echo ^<h1^>音频后端集成测试报告^</h1^>
echo ^<div class="summary"^>
echo ^<p^>总测试数: ^<strong^>%TOTAL_TESTS%^</strong^>^</p^>
echo ^<p^>通过: ^<strong class="pass"^>%PASSED_TESTS%^</strong^>^</p^>
echo ^<p^>失败: ^<strong class="fail"^>%FAILED_TESTS%^</strong^>^</p^>
echo ^</div^>
echo ^<h2^>测试详情^</h2^>
echo ^<table^>
echo ^<tr^>
echo ^<th^>测试名称^</th^>
echo ^<th^>结果^</th^>
echo ^<th^>详情链接^</th^>
echo ^</tr^>
) > "%HTML_REPORT%"
REM 添加测试详情到HTML报告
for %%t in (%INTEGRATION_TESTS%) do (
set "test_executable=%%t"
for %%i in ("!test_executable!") do set "test_name=%%~ni"
set "xml_output=%INTEGRATION_TEST_RESULTS_DIR%\!test_name!_result.xml"
set "text_output=%INTEGRATION_TEST_RESULTS_DIR%\!test_name!_result.txt"
REM 检查XML输出是否存在以确定测试是否成功运行
if exist "!xml_output!" (
REM 从XML中提取失败测试数 (简单搜索failure标)
findstr /C:"<failure" "!xml_output!" > nul
if !ERRORLEVEL! equ 1 (
set "result=通过"
set "result_class=pass"
) else (
set "result=失败"
set "result_class=fail"
)
) else (
set "result=错误"
set "result_class=fail"
)
REM 添加到HTML表格
(
echo ^<tr^>
echo ^<td^>!test_name!^</td^>
echo ^<td class="!result_class!"^>!result!^</td^>
echo ^<td^>^<a href="!test_name!_result.txt"^>日志^</a^> ^| ^<a href="!test_name!_result.xml"^>XML^</a^>^</td^>
echo ^</tr^>
) >> "%HTML_REPORT%"
)
REM 完成HTML报告
(
echo ^</table^>
echo ^<p^>报告生成时间: %DATE% %TIME%^</p^>
echo ^</body^>
echo ^</html^>
) >> "%HTML_REPORT%"
echo %BLUE%=========================================================%NC%
echo %BLUE% 集成测试结果汇总 %NC%
echo %BLUE%=========================================================%NC%
echo 总测试数: %TOTAL_TESTS%
echo 通过: %GREEN%%PASSED_TESTS%%NC%
echo 失败: %RED%%FAILED_TESTS%%NC%
echo.
echo 详细报告已生成到: %YELLOW%%HTML_REPORT%%NC%
echo.
REM 返回测试结果
if %FAILED_TESTS% equ 0 (
echo %GREEN%所有集成测通过!%NC%
exit /b 0
) else (
echo %RED%有集成测试失!%NC%
exit /b 1
)