2026-04-06 11:14:09 +08:00
|
|
|
#!/usr/bin/env python3
|
2026-06-27 22:22:42 +08:00
|
|
|
"""Speech test runner for the current API-based TTS/ASR stack."""
|
|
|
|
|
|
|
|
|
|
from __future__ import annotations
|
2026-04-06 11:14:09 +08:00
|
|
|
|
|
|
|
|
import argparse
|
|
|
|
|
import os
|
|
|
|
|
import subprocess
|
|
|
|
|
import sys
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
|
2026-06-27 22:22:42 +08:00
|
|
|
def run_command(cmd: list[str], cwd: str | None = None) -> int:
|
2026-04-06 11:14:09 +08:00
|
|
|
print(f"\n执行: {' '.join(cmd)}")
|
|
|
|
|
print("-" * 70)
|
2026-06-27 22:22:42 +08:00
|
|
|
return subprocess.run(cmd, cwd=cwd).returncode
|
2026-04-06 11:14:09 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def run_unit_tests(verbose: bool = False) -> int:
|
2026-06-27 22:22:42 +08:00
|
|
|
cmd = ["pytest", "backend/tests/test_tts_asr.py"]
|
2026-04-06 11:14:09 +08:00
|
|
|
if verbose:
|
2026-06-27 22:22:42 +08:00
|
|
|
cmd.append("-v")
|
2026-04-06 11:14:09 +08:00
|
|
|
return run_command(cmd)
|
|
|
|
|
|
|
|
|
|
|
2026-06-27 22:22:42 +08:00
|
|
|
def run_benchmark(extra_args: list[str] | None = None) -> int:
|
|
|
|
|
cmd = ["python", "backend/tests/benchmark_tts_asr.py"]
|
|
|
|
|
if extra_args:
|
|
|
|
|
cmd.extend(extra_args)
|
2026-04-06 11:14:09 +08:00
|
|
|
return run_command(cmd)
|
|
|
|
|
|
|
|
|
|
|
2026-06-27 22:22:42 +08:00
|
|
|
def run_all(verbose: bool = False) -> int:
|
|
|
|
|
results = [
|
|
|
|
|
("单元测试", run_unit_tests(verbose=verbose)),
|
|
|
|
|
("基准测试", run_benchmark()),
|
|
|
|
|
]
|
2026-04-06 11:14:09 +08:00
|
|
|
|
2026-06-27 22:22:42 +08:00
|
|
|
print("\n" + "=" * 70)
|
2026-04-06 11:14:09 +08:00
|
|
|
print("测试结果汇总")
|
2026-06-27 22:22:42 +08:00
|
|
|
print("=" * 70)
|
|
|
|
|
passed = 0
|
2026-04-06 11:14:09 +08:00
|
|
|
for name, code in results:
|
2026-06-27 22:22:42 +08:00
|
|
|
ok = code == 0
|
|
|
|
|
passed += int(ok)
|
|
|
|
|
print(f"{name}: {'✓ 通过' if ok else '✗ 失败'}")
|
|
|
|
|
print("-" * 70)
|
|
|
|
|
print(f"总计: {passed}/{len(results)} 通过")
|
|
|
|
|
return 0 if passed == len(results) else 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main() -> int:
|
|
|
|
|
parser = argparse.ArgumentParser(description="当前 API 化 TTS/ASR 测试运行器")
|
|
|
|
|
subparsers = parser.add_subparsers(dest="command", help="测试类型")
|
|
|
|
|
|
|
|
|
|
unit_parser = subparsers.add_parser("unit", help="运行当前 TTS/ASR 单元测试")
|
|
|
|
|
unit_parser.add_argument("-v", "--verbose", action="store_true", help="详细输出")
|
|
|
|
|
|
|
|
|
|
benchmark_parser = subparsers.add_parser("benchmark", help="运行当前 TTS/ASR benchmark")
|
|
|
|
|
benchmark_parser.add_argument("benchmark_args", nargs="*", help="透传给 benchmark_tts_asr.py")
|
|
|
|
|
|
|
|
|
|
all_parser = subparsers.add_parser("all", help="运行当前 TTS/ASR 单元测试和 benchmark")
|
|
|
|
|
all_parser.add_argument("-v", "--verbose", action="store_true", help="详细输出")
|
|
|
|
|
|
2026-04-06 11:14:09 +08:00
|
|
|
args = parser.parse_args()
|
|
|
|
|
project_root = Path(__file__).parent.parent.parent
|
|
|
|
|
os.chdir(project_root)
|
2026-06-27 22:22:42 +08:00
|
|
|
|
|
|
|
|
if args.command == "unit":
|
2026-04-06 11:14:09 +08:00
|
|
|
return run_unit_tests(verbose=args.verbose)
|
2026-06-27 22:22:42 +08:00
|
|
|
if args.command == "benchmark":
|
|
|
|
|
return run_benchmark(extra_args=args.benchmark_args)
|
|
|
|
|
if args.command == "all":
|
|
|
|
|
return run_all(verbose=args.verbose)
|
|
|
|
|
|
|
|
|
|
parser.print_help()
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2026-04-06 11:14:09 +08:00
|
|
|
sys.exit(main())
|