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

245 lines
8.0 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 "PERFORMANCE_TEST_RESULTS_DIR=%TEST_RESULTS_DIR%\performance"
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%测试结果目录: %PERFORMANCE_TEST_RESULTS_DIR%%NC%
echo.
REM 确保测试结果目录存在
if not exist "%PERFORMANCE_TEST_RESULTS_DIR%" mkdir "%PERFORMANCE_TEST_RESULTS_DIR%"
REM 检查测试目录是否存在
if not exist "%TEST_BIN_DIR%" (
echo %RED%错误: 测试可执行文件目录不存在。请先构建项目。%NC%
exit /b 1
)
REM 收集所有性能测试可执行文件
set "PERFORMANCE_TEST_COUNT=0"
set "PERFORMANCE_TESTS="
if exist "%TEST_BIN_DIR%\integration\performance_benchmark_test.exe" (
set /a PERFORMANCE_TEST_COUNT+=1
set "PERFORMANCE_TESTS=%TEST_BIN_DIR%\integration\performance_benchmark_test.exe"
)
REM 如果没有找到性能测试,显示警告并退出
if %PERFORMANCE_TEST_COUNT% equ 0 (
echo %YELLOW%警告: 未找到性能测试可执行文件。%NC%
exit /b 0
)
echo %BLUE%找到 %PERFORMANCE_TEST_COUNT% 个性能测试%NC%
echo.
REM 准备性能测试环境
echo %BLUE%准备性能测试环境...%NC%
REM 检查系统资源
echo 检查系统资源...
wmic cpu get NumberOfCores,NumberOfLogicalProcessors
wmic OS get FreePhysicalMemory,TotalVisibleMemorySize
REM 优化系统性能
echo 优化系统性能...
REM 设置电源计划为高性能(需要管理员权限)
powercfg /list | findstr "高性能" > nul
if %ERRORLEVEL% equ 0 (
echo 尝试设置高性能电源计划...
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c > nul 2>&1
if %ERRORLEVEL% equ 0 (
echo 已设置高性能电源计划
) else (
echo %YELLOW%无法设置高性能电源计划,可能需要管理员权限%NC%
)
) else (
echo %YELLOW%未找到高性能电源计划%NC%
)
echo %GREEN%性能测试环境准备完成%NC%
echo.
REM 运行所有性能测试
set "PASSED_TESTS=0"
set "FAILED_TESTS=0"
set "TOTAL_TESTS=0"
echo %BLUE%运行性能测试: performance_benchmark_test%NC%
echo 开始时间: %TIME%
REM 创建结果目录
if not exist "%PERFORMANCE_TEST_RESULTS_DIR%" mkdir "%PERFORMANCE_TEST_RESULTS_DIR%"
REM 运行测试并保存结果
set "test_name=performance_benchmark_test"
set "json_output=%PERFORMANCE_TEST_RESULTS_DIR%\%test_name%_result.json"
set "text_output=%PERFORMANCE_TEST_RESULTS_DIR%\%test_name%_result.txt"
REM 运行测试
echo 运行中,请耐心等待...
"%PERFORMANCE_TESTS%" --gtest_output=json:"%json_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 完成时间: %TIME%
echo.
REM 解析性能数据并生成报告
echo %BLUE%生成性能报告...%NC%
REM 提取关键性能指标
set "PERFORMANCE_SUMMARY=%PERFORMANCE_TEST_RESULTS_DIR%\performance_summary.txt"
findstr /C:"平均延迟:" "%text_output%" > "%PERFORMANCE_SUMMARY%"
findstr /C:"每秒缓冲区数:" "%text_output%" >> "%PERFORMANCE_SUMMARY%"
findstr /C:"CPU使用率:" "%text_output%" >> "%PERFORMANCE_SUMMARY%"
findstr /C:"内存使用:" "%text_output%" >> "%PERFORMANCE_SUMMARY%"
REM 生成简单的HTML报告
set "HTML_REPORT=%PERFORMANCE_TEST_RESULTS_DIR%\performance_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, h2 { color: #333; }
echo .summary { margin-bottom: 20px; }
echo .pass { color: green; }
echo .fail { color: red; }
echo .warning { color: orange; }
echo table { border-collapse: collapse; width: 100%%; margin-bottom: 20px; }
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 pre { background-color: #f5f5f5; padding: 10px; border-radius: 5px; }
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 检查输出是否存在以确定测试是否成功运行
if exist "%text_output%" (
REM 检查是否有失败信息
findstr /C:"FAILED" "%text_output%" > nul
if %ERRORLEVEL% equ 0 (
set "result=失败"
set "result_class=fail"
) else (
set "result=通过"
set "result_class=pass"
)
) else (
set "result=错误"
set "result_class=fail"
)
REM 添加到HTML表格
(
echo ^<tr^>
echo ^<td^>performance_benchmark_test^</td^>
echo ^<td class="%result_class%"^>%result%^</td^>
echo ^<td^>^<a href="performance_benchmark_test_result.txt"^>详细日志^</a^>^</td^>
echo ^</tr^>
echo ^</table^>
echo ^<h2^>性能指标摘要^</h2^>
echo ^<pre^>
) >> "%HTML_REPORT%"
REM 添加性能摘要到HTML报告
if exist "%PERFORMANCE_SUMMARY%" (
type "%PERFORMANCE_SUMMARY%" >> "%HTML_REPORT%"
) else (
echo 无法提取性能指标数据。请查看详细日志了解更多信息。 >> "%HTML_REPORT%"
)
REM 完成HTML报告
(
echo ^</pre^>
echo ^<h2^>系统环境^</h2^>
echo ^<pre^>
wmic cpu get Name,NumberOfCores,NumberOfLogicalProcessors
echo.
wmic OS get Caption,OSArchitecture,Version
echo.
wmic OS get FreePhysicalMemory,TotalVisibleMemorySize
echo ^</pre^>
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
)