RealtimeSTT 测试体系全指南:从快速单元测试到 Golden 转录与 FastAPI 多用户负载验证
【免费下载链接】RealtimeSTTA robust, efficient, low-latency speech-to-text library with advanced voice activity detection, wake word activation and instant transcription.项目地址: https://gitcode.com/GitHub_Trending/re/RealtimeSTT
RealtimeSTT 是一套集成了 VAD 语音活动检测、唤醒词与实时转写能力的语音转文本库,其测试体系围绕「快速、可离线、可复用」与「真实模型、真实音频、真实延迟」两个层次设计。本文将基于 docs/testing.md 展开,带你完整掌握 RealtimeSTT 的两类测试——不下载模型的快速单元/契约测试,以及需要真实语音模型的 opt-in Golden 转录测试——并深入讲解 FastAPI 多用户负载测试的指标含义、Windows 环境注意事项,以及为新增转录引擎编写测试的最佳实践。
一、测试体系总览:两条分层的主线
RealtimeSTT 的测试在设计上刻意分成两类,避免“跑一次测试要下载几个 GB 模型”成为常态:
- 快速单元测试与契约测试(Fast Unit and Contract Tests):运行时不下载任何语音模型,完全依赖 mock 对象与假后端(fake runtime / fake backend),验证工厂选择、参数映射、音频校验、结果转换等契约行为。这是 CI 与日常开发的主力。
- Opt-in Golden 转录测试(Golden Transcription Tests):下载或加载真实语音模型,把小段音频 fixture 转写后与期望文本比对。因为更慢、首次运行可能需要联网、部分平台还需要额外权限,默认被跳过,只有显式设置环境变量后才运行。
音频 fixture 统一存放在 tests/unit/audio,素材基于公有领域(Public Domain)的 LJ Speech 样本。而tests/目录下直接放置的手动演示脚本、回归压测脚本与历史实验,则在 docs/test-scripts.md 中单独说明——两者不要混淆。
从源码结构看,tests/unit 下每个转录引擎都对应一个独立测试文件(test_whisper_cpp_engine.py、test_sherpa_onnx_engine.py、test_kroko_onnx_engine.py、test_omnilingual_asr_engine.py等),这为“新增引擎必须伴随契约测试”提供了制度性保障。
二、音频 Fixture:LJ Speech 样本与 Manifest 校验
Golden 测试依赖确定性的音频输入。tests/unit/audio/中的样本基于 LJ Speech 1.1 数据集(公有领域),每个样本包含:
- 一个 16-bit PCM、单声道 WAV 文件(如
LJ001-0002.wav); - 一个对应的期望文本文件(如
LJ001-0002.txt); - 一份汇总的 manifest.json,声明了数据集、采样率、通道数、位深及每个样本的
transcript与normalized_transcript。
以 manifest.json 为例,其核心字段包括dataset(LJ Speech 1.1)、license(Public Domain)、sample_rate_hz(22050)、channels(1)、sample_width_bits(16),以及 5 条样本记录,例如:
{ "id": "LJ001-0002", "file": "LJ001-0002.wav", "transcript_file": "LJ001-0002.txt", "transcript": "in being comparatively modern.", "normalized_transcript": "in being comparatively modern." }test_audio_fixtures.py 中的AudioFixtureTests.test_manifest_points_to_valid_wav_and_transcript_files会对 fixture 本身做契约校验:manifest 必须指向真实存在的 WAV 与 transcript 文件、文本内容必须一致、WAV 必须是单声道 16-bit PCM 且采样率与 manifest 声明一致、帧数必须大于 0。
同文件中的FeedAudioTests则验证了录音器核心的feed_audio行为:
- 不足一个 buffer 的原始 PCM 字节会被暂存,凑满
2 * buffer_size字节后才放入音频队列; - 以
original_sample_rate喂入非 16 kHz 音频时,会按16000 / sample_rate的比例重采样并正确分块(例如把 22050 Hz 的 LJ Speech 样本重采样到 16 kHz)。
这两组测试是理解后续 Golden 测试如何“喂音频”的基础:Golden 测试正是用 1024 样本一批的方式把 WAV 逐步feed_audio给录音器实例,再取出recorder.text()与期望文本比对。
三、快速单元测试:不下载模型的默认测试集
从仓库根目录运行默认快速测试集(PowerShell):
python -m unittest -v tests.unit.test_audio_fixtures tests.unit.test_whisper_cpp_engine tests.unit.test_openai_whisper_engine tests.unit.test_additional_transcription_engines tests.unit.test_cohere_transcribe_engine tests.unit.test_granite_speech_engine tests.unit.test_moonshine_engine tests.unit.test_sherpa_onnx_engine tests.unit.test_kroko_onnx_engine tests.unit.test_omnilingual_asr_engine tests.unit.test_realtime_streaming_transcription tests.unit.test_fastapi_server_protocol tests.unit.test_fastapi_server_multi_user请使用当前激活虚拟环境中的 Python 解释器(而非全局 Python)。运行要点:
- 没有设置 Golden 环境变量时,慢速模型测试会被有意跳过。结果中出现
skipped意味着:快速测试全部通过,而 opt-in 的模型测试没有运行——这是预期行为,不是失败。 - 各引擎测试文件内部对真实后端的调用做了 mock。例如 test_whisper_cpp_engine.py 中
WhisperCppFactoryTests通过 patchPyWhisperCppBackend为FakeBackend来验证工厂创建行为;WhisperCppEngineContractTests则验证了音频归一化(如[0.0, 2.0, -1.0]归一化为[0.0, 0.95, -0.475])、beam_search/greedy 解码策略切换、initial_prompt与 token 提示词的传递、空音频报错等契约。 - 类似地,test_kroko_onnx_engine.py 使用
FakeKrokoRecognizer、FakeKrokoStream等假对象,不安装也不导入 Kroko-ONNX 运行时即可跑通;test_omnilingual_asr_engine.py 使用假 Omnilingual 运行时对象,同样不安装不导入 Meta 的 Omnilingual ASR 包。
四、Golden 转录测试:真实模型驱动的端到端验证
Golden 测试是 RealtimeSTT 质量闭环的核心:加载真实模型 → 转写 fixture 音频 → 与期望文本比对。它们默认关闭,需要先安装可选依赖、再显式设置环境变量。所有环境变量在 PowerShell 中设置,test-model-cache/目录被 Git 忽略,可以放心存放下载的本地测试模型。
4.1 faster-whisper Golden 测试
$env:REALTIMESTT_RUN_GOLDEN_TRANSCRIPTION = "1" $env:REALTIMESTT_TEST_MODEL = "tiny" $env:REALTIMESTT_TEST_DEVICE = "cpu" $env:REALTIMESTT_TEST_COMPUTE_TYPE = "int8" python -m unittest -v tests.unit.test_audio_fixtures.GoldenTranscriptionTests对应 test_audio_fixtures.py 中的GoldenTranscriptionTests:它以use_microphone=False创建AudioToTextRecorder,把 manifest 中第一个样本按 1024 样本分批feed_audio,等待录音器收集到帧后取text(),断言转写文本非空且前两个词与期望文本匹配。环境变量直接映射到录音器参数:REALTIMESTT_TEST_MODEL→model(默认tiny)、REALTIMESTT_TEST_DEVICE→device(默认cpu)、REALTIMESTT_TEST_COMPUTE_TYPE→compute_type(默认int8)。
4.2 whisper.cpp Golden 测试
python -m pip install "RealtimeSTT[whisper-cpp]" $env:REALTIMESTT_RUN_WHISPER_CPP = "1" $env:REALTIMESTT_WHISPER_CPP_MODEL = "tiny.en" $env:REALTIMESTT_WHISPER_CPP_MODEL_DIR = Join-Path (Get-Location) "test-model-cache\pywhispercpp" python -m unittest -v tests.unit.test_whisper_cpp_engine.WhisperCppGoldenTranscriptionTeststest_whisper_cpp_engine.py 中的WhisperCppGoldenTranscriptionTests会把 WAV 样本转为float32 / 32768.0的归一化音频,构造WhisperCppEngine(模型默认tiny.en、beam size 默认 5),转写后断言前两个词命中。该测试还要求 NumPy 可用,否则会 skip。
4.3 OpenAI Whisper Golden 测试
python -m pip install openai-whisper $env:REALTIMESTT_RUN_OPENAI_WHISPER = "1" $env:REALTIMESTT_OPENAI_WHISPER_MODEL = "tiny.en" $env:REALTIMESTT_OPENAI_WHISPER_DEVICE = "cpu" $env:REALTIMESTT_OPENAI_WHISPER_COMPUTE_TYPE = "float32" $env:REALTIMESTT_OPENAI_WHISPER_MODEL_DIR = Join-Path (Get-Location) "test-model-cache\openai-whisper" python -m unittest -v tests.unit.test_openai_whisper_engine.OpenAIWhisperGoldenTranscriptionTests4.4 新一代模型家族的 opt-in Smoke 测试
Parakeet/NeMo、Cohere、Granite Speech、Qwen3-ASR、Moonshine 等较新引擎族的冒烟测试集中在 test_additional_transcription_engines.py:
# 只打开你要验证的那个引擎即可 $env:REALTIMESTT_RUN_PARAKEET = "1" $env:REALTIMESTT_RUN_COHERE_TRANSCRIBE = "1" $env:REALTIMESTT_RUN_GRANITE_SPEECH = "1" $env:REALTIMESTT_RUN_QWEN3_ASR = "1" $env:REALTIMESTT_RUN_MOONSHINE = "1" $env:REALTIMESTT_HF_MODEL_DIR = Join-Path (Get-Location) "test-model-cache\hf" python -m unittest -v tests.unit.test_additional_transcription_engines.AdditionalEngineGoldenTranscriptionTests这些 smoke 测试需要numpy、各后端可选依赖及模型访问权限。特别注意:Cohere 目前要求先接受 Hugging Face 的门控(gated)访问授权,权重才能下载。
4.5 sherpa-onnx:先契约、后真实模型
sherpa-onnx 的快速契约测试会 mock 运行时、不下载模型:
python -m pip install sherpa-onnx python -m unittest -v tests.unit.test_sherpa_onnx_engine若要拿到真实的 RTF(Real-Time Factor)对比数据,需要先把 sherpa-onnx 模型包下载并解压到test-model-cache\sherpa-onnx下,再运行对应的 opt-in smoke 测试。Parakeet 后端(INT8):
$env:REALTIMESTT_RUN_SHERPA_ONNX_PARAKEET = "1" $env:REALTIMESTT_SHERPA_ONNX_PARAKEET_MODEL = Join-Path (Get-Location) "test-model-cache\sherpa-onnx\sherpa-onnx-nemo-parakeet-tdt-0.6b-v3-int8" $env:REALTIMESTT_SHERPA_ONNX_NUM_THREADS = "2" python -m unittest -v tests.unit.test_sherpa_onnx_engine.SherpaOnnxGoldenTranscriptionTests.test_transcribes_fixture_with_real_sherpa_parakeet_backendMoonshine 后端(INT8):
$env:REALTIMESTT_RUN_SHERPA_ONNX_MOONSHINE = "1" $env:REALTIMESTT_SHERPA_ONNX_MOONSHINE_MODEL = Join-Path (Get-Location) "test-model-cache\sherpa-onnx\sherpa-onnx-moonshine-tiny-en-int8" $env:REALTIMESTT_SHERPA_ONNX_NUM_THREADS = "1" python -m unittest -v tests.unit.test_sherpa_onnx_engine.SherpaOnnxGoldenTranscriptionTests.test_transcribes_fixture_with_real_sherpa_moonshine_backend4.6 同时跑两条 Golden 路径
$env:REALTIMESTT_RUN_GOLDEN_TRANSCRIPTION = "1" $env:REALTIMESTT_TEST_MODEL = "tiny" $env:REALTIMESTT_TEST_DEVICE = "cpu" $env:REALTIMESTT_TEST_COMPUTE_TYPE = "int8" $env:REALTIMESTT_RUN_WHISPER_CPP = "1" $env:REALTIMESTT_WHISPER_CPP_MODEL = "tiny.en" $env:REALTIMESTT_WHISPER_CPP_MODEL_DIR = Join-Path (Get-Location) "test-model-cache\pywhispercpp" python -m unittest -v tests.unit.test_audio_fixtures tests.unit.test_whisper_cpp_engine4.7 Kroko-ONNX:契约测试与真实模型 Community smoke
python -m unittest -v tests.unit.test_kroko_onnx_engine python -m unittest -v tests.unit.test_realtime_streaming_transcription快速 Kroko 测试使用假运行时对象,不安装、不导入 Kroko-ONNX。要跑真实模型(Community 版)的 smoke 测试,需先安装 Kroko-ONNX 再 opt-in:
$env:REALTIMESTT_RUN_KROKO_ONNX = "1" $env:REALTIMESTT_KROKO_ONNX_MODEL = "test-model-cache\kroko-onnx\Kroko-EN-Community-64-L-Streaming-001.data" $env:REALTIMESTT_KROKO_ONNX_PROVIDER = "cpu" $env:REALTIMESTT_KROKO_ONNX_NUM_THREADS = "1" python -m unittest -v tests.unit.test_kroko_onnx_engine.KrokoOnnxGoldenTranscriptionTests若使用需要授权的 Pro 模型,可设置REALTIMESTT_KROKO_ONNX_KEY、KROKO_ONNX_KEY或KROKO_KEY(三者取其一)。切勿把密钥写入命令历史、文档、生成报告或提交的文件中——这一点在 test_kroko_onnx_engine.py 的KROKO_ONNX_KEY_ENV_NAMES常量中同样体现。
4.8 Omnilingual ASR:Linux/WSL2 专属路径
python -m unittest -v tests.unit.test_omnilingual_asr_engine这些测试使用假 Omnilingual 运行时对象,不安装不导入 Meta 的 Omnilingual ASR 包。它属于源码检出(source checkout)命令——只有在源码树与测试同时存在时才能工作;如果是干净 pip 安装的环境,请改用 docs/engines/omnilingual-asr.md 中基于文件的 smoke 测试。
真实模型 smoke 测试应在 Linux 或 WSL2 上运行,使用 Python 3.11.x 及与之匹配的torch/torchaudio构建。从omniASR_CTC_1B_v2开始尝试;如果遇到未知的_v2模型卡片,应将其视为 Omnilingual 依赖版本不匹配,而不是回退到旧的非 v2 卡片。源码检出下的运行方式:
python tests/realtimestt_omnilingual_test.py --file-smoke --device cudapip 安装场景请参照 docs/engines/omnilingual-asr.md 从对应发布分支下载独立脚本。
五、FastAPI 多用户负载测试:并发、公平调度与延迟指标
RealtimeSTT 的 FastAPI 浏览器服务器(见 example_fastapi_server)包含两类测试:快速假调度器测试与 opt-in 的真实引擎负载测试。
5.1 快速假调度器测试
python -m unittest -v tests.unit.test_fastapi_server_protocol tests.unit.test_fastapi_server_multi_user这两组测试覆盖:会话隔离(session isolation)、公平调度(fair scheduling)、realtime 合并(coalescing)、过期 realtime 丢弃(stale realtime discard)、准入限制(admission limits)以及 clear/reset 行为。以 test_fastapi_server_protocol.py 为例,它还验证了音频数据包的编解码往返(encode_audio_packet/decode_audio_packet)、非法包拒绝、sampleRate正整数校验、JSON 对象解析及带连字符的引擎名归一化(如cohere-transcribe);test_fastapi_server_multi_user.py 则验证了结构化实时文本稳定事件(RealtimeTextStabilizationEvent)到客户端消息字段(segmentId、stableText、stableDelta、unstableText等)的映射。
5.2 opt-in 真实引擎负载测试
该测试把 tests/unit/audio/asr-reference.wav(51.9 秒、16 kHz 参考音频)通过多个会话并行推流,将最终文本与 asr-reference.expected_sentences.json 中的combined_normalized比对,检查每个会话的延迟偏差,并打印计时报告:
$env:REALTIMESTT_RUN_FASTAPI_MULTI_USER_PERF = "1" $env:REALTIMESTT_FASTAPI_ASR_CLIENTS = "2" $env:REALTIMESTT_FASTAPI_ASR_ENGINE = "faster_whisper" $env:REALTIMESTT_FASTAPI_ASR_MODEL = "small.en" python -m unittest -v tests.unit.test_fastapi_server_multi_user_asr_integrationREALTIMESTT_RUN_FASTAPI_MULTI_USER_ASR=1会运行同一个测试,PERF名称只是在测量延迟时更清晰的开关(见 test_fastapi_server_multi_user_asr_integration.py 中run_real_asr_test_enabled的实现:两者任一为真即启用)。
报告内容(由build_performance_report生成,结构可从 test_fastapi_server_multi_user_asr_integration.py 确认):
- 延迟类:首个 realtime 延迟、首个 final 延迟、音频上传结束后的 final 延迟、首次 recording/VAD-start 计时、首个 realtime 相对 recording 开始的延迟、流发送时长、stop 调用时长;
- 节奏类:realtime/final 事件的 p50/p95 节拍(cadence);
- 质量类:每个会话的 WER(词错误率,内部实现为 token 级编辑距离除以期望词数);
- 调度器类:final 的 p50/p95 调度延迟、会话间的
firstFinalLatencySkewMs与schedulerFinalP95SkewMs偏差; - 计数类:realtime/final 提交与完成数、合并的 realtime 数、丢弃的过期 realtime 数、被拒绝的任务数;
- 汇总类:客户端数、模型就绪耗时、报告墙钟耗时、各延迟指标的 p50/p95、最大 WER。
将报告另存为 JSON 以便跨运行对比:
$env:REALTIMESTT_FASTAPI_ASR_METRICS_JSON = "test-results\fastapi-multi-user-perf.json"5.3 通过环境变量镜像手动服务器配置
负载测试接受后端与调度器的整套调参变量,从而能镜像一条手动启动的服务器命令。例如 sherpa-onnx Moonshine 在 CPU 上的配置:
$env:REALTIMESTT_RUN_FASTAPI_MULTI_USER_PERF = "1" $env:REALTIMESTT_FASTAPI_ASR_CLIENTS = "2" $env:REALTIMESTT_FASTAPI_ASR_ENGINE = "sherpa_onnx_moonshine" $env:REALTIMESTT_FASTAPI_ASR_MODEL = "sherpa-onnx-moonshine-base-en-int8" $env:REALTIMESTT_FASTAPI_ASR_REALTIME_ENGINE = "sherpa_onnx_moonshine" $env:REALTIMESTT_FASTAPI_ASR_REALTIME_MODEL = "sherpa-onnx-moonshine-tiny-en-int8" $env:REALTIMESTT_FASTAPI_ASR_DEVICE = "cpu" $env:REALTIMESTT_FASTAPI_ASR_DOWNLOAD_ROOT = "test-model-cache\sherpa-onnx" $env:REALTIMESTT_FASTAPI_ASR_ENGINE_OPTIONS = '{"num_threads":4,"provider":"cpu"}' $env:REALTIMESTT_FASTAPI_ASR_REALTIME_ENGINE_OPTIONS = '{"num_threads":2,"provider":"cpu"}' $env:REALTIMESTT_FASTAPI_ASR_REALTIME_PROCESSING_PAUSE = "0.8" $env:REALTIMESTT_FASTAPI_ASR_REALTIME_USE_SYLLABLE_BOUNDARIES = "1" $env:REALTIMESTT_FASTAPI_ASR_REALTIME_BOUNDARY_DETECTOR_SENSITIVITY = "0.6" $env:REALTIMESTT_FASTAPI_ASR_REALTIME_BOUNDARY_FOLLOWUP_DELAYS = "0.1,0.2,0.4" python -m unittest -v tests.unit.test_fastapi_server_multi_user_asr_integration.FastAPIMultiUserRealEngineASRTests要点:
- 引擎选项既接受 JSON 也接受
key=value列表,如num_threads=4,provider=cpu。后者是 cmd 友好的写法,可规避 Windows 引号转义问题。test_fastapi_server_multi_user_asr_integration.py 中的test_env_json_accepts_cmd_friendly_key_value_options和test_env_json_recovers_common_cmd_quote_forms专门验证了这两种解析路径,包括对{""num_threads"":4}这类双引号转义形式的恢复。 - 测试断言中,默认
max_wer为 0.30、max_latency_skew_ms为 30000(均可通过环境变量覆盖),并校验每个会话的finalCompleted > 0及多会话时的 final p95 偏差上限。
5.4 Windows cmd.exe 一键脚本
针对 Windows cmd.exe 下最常见的 sherpa-onnx Moonshine 运行,仓库提供了带默认值的辅助脚本 example_fastapi_server/run_multi_user_perf.cmd。它会从脚本所在目录跳转到仓库根目录执行python -m unittest,默认设置 4 个客户端、sherpa-onnx Moonshine base/tiny 双模型、CPU 引擎选项等;仅在环境变量未定义时才填充默认值,因此可直接覆盖再运行:
set REALTIMESTT_FASTAPI_ASR_CLIENTS=8 set REALTIMESTT_FASTAPI_ASR_METRICS_JSON=test-results\fastapi-8-user-perf.json example_fastapi_server\run_multi_user_perf.cmd更全面的REALTIMESTT_FASTAPI_ASR_*环境变量清单见 example_fastapi_server/README.md,可用于选择 CPU sherpa-onnx Moonshine、whisper.cpp、Parakeet 或其他已安装后端。
5.5 Kroko-ONNX 走同一 FastAPI 压测路径
$env:REALTIMESTT_RUN_FASTAPI_MULTI_USER_PERF = "1" $env:REALTIMESTT_FASTAPI_ASR_CLIENTS = "2" $env:REALTIMESTT_FASTAPI_ASR_ENGINE = "kroko_onnx" $env:REALTIMESTT_FASTAPI_ASR_MODEL = "test-model-cache\kroko-onnx\Kroko-EN-Community-64-L-Streaming-001.data" $env:REALTIMESTT_FASTAPI_ASR_REALTIME_ENGINE = "kroko_onnx" $env:REALTIMESTT_FASTAPI_ASR_REALTIME_MODEL = "test-model-cache\kroko-onnx\Kroko-EN-Community-64-L-Streaming-001.data" $env:REALTIMESTT_FASTAPI_ASR_DEVICE = "cpu" $env:REALTIMESTT_FASTAPI_ASR_ENGINE_OPTIONS = "provider=cpu,num_threads=2" $env:REALTIMESTT_FASTAPI_ASR_REALTIME_ENGINE_OPTIONS = "provider=cpu,num_threads=1" $env:REALTIMESTT_FASTAPI_ASR_METRICS_JSON = "test-results\kroko-onnx-fastapi-cpu-2clients.json" python -m unittest -v tests.unit.test_fastapi_server_multi_user_asr_integration.FastAPIMultiUserRealEngineASRTests若要用 CUDA,在确认当前安装的 Kroko-ONNX 构建支持 CUDA provider 之后,把REALTIMESTT_FASTAPI_ASR_DEVICE及两个 provider 选项改为cuda即可。
六、Windows 注意事项:沙箱、权限与平台差异
- multiprocessing 管道权限:部分录音器测试使用 multiprocessing 管道。在 Windows 上,受限沙箱中可能无法创建 multiprocessing 队列/管道。若 Golden 测试在创建队列或管道时报
PermissionError: [WinError 5] Zugriff verweigert(拒绝访问),请在普通终端中带上同样的环境变量重新运行。 - Parakeet/NeMo 与 Qwen vLLM 面向 Linux:在 Windows 工作站做真实模型验证时,建议在启用 CUDA 的 WSL2 Linux 环境中进行——安装可选后端依赖、把仓库挂载或克隆到 WSL 文件系统内,然后运行相同的
python -m unittest命令。 - 默认 Windows 单元运行应聚焦 mock 契约测试:这样本地检查与 CI 都不需要 GPU 驱动、门控模型访问或多 GB 级下载。
七、为新增转录引擎添加测试
当为 RealtimeSTT 引入新转录引擎时,docs/testing.md 明确要求先写快速契约测试,覆盖以下行为:
- 工厂选择与懒加载行为:
create_transcription_engine能按引擎名创建实例、可选后端在导入失败时不阻塞(见 test_whisper_cpp_engine.py 的工厂测试与get_supported_transcription_engines()断言)。 - 缺少可选依赖时的报错信息:mock 掉
import_module抛ModuleNotFoundError,断言抛出的TranscriptionEngineError包含pip install ...指引。 TranscriptionEngineConfig到后端绑定的参数映射:如beam_size=1时切换 greedy 解码、engine_options中n_threads/single_segment透传、download_root映射到models_dir等。- 音频校验与归一化行为:空音频拒绝、峰值归一化、
use_prompt开关、token 提示词(prompt_tokens/prompt_n_tokens)传递。 - 后端 segments 到
TranscriptionResult的转换:拼接文本、语言与置信度字段填充。
只有快速契约测试稳定之后,才添加真实模型的 Golden 测试,并且必须用环境变量保持 opt-in——这是整个测试体系保持“日常快速、按需完整”的关键约定。
八、测试路线图速查
| 测试类型 | 是否下载模型 | 关键环境变量 | 运行入口 |
|---|---|---|---|
| 快速单元/契约测试 | 否(mock 后端) | 无 | python -m unittest -v tests.unit.*全量命令 |
| faster-whisper Golden | 是 | REALTIMESTT_RUN_GOLDEN_TRANSCRIPTION=1、REALTIMESTT_TEST_MODEL等 | tests.unit.test_audio_fixtures.GoldenTranscriptionTests |
| whisper.cpp Golden | 是 | REALTIMESTT_RUN_WHISPER_CPP=1、REALTIMESTT_WHISPER_CPP_MODEL等 | tests.unit.test_whisper_cpp_engine.WhisperCppGoldenTranscriptionTests |
| OpenAI Whisper Golden | 是 | REALTIMESTT_RUN_OPENAI_WHISPER=1等 | tests.unit.test_openai_whisper_engine.OpenAIWhisperGoldenTranscriptionTests |
| 新家族引擎 Smoke | 是 | REALTIMESTT_RUN_PARAKEET/_COHERE_TRANSCRIBE/_GRANITE_SPEECH/_QWEN3_ASR/_MOONSHINE=1 | tests.unit.test_additional_transcription_engines.AdditionalEngineGoldenTranscriptionTests |
| sherpa-onnx 契约/真实模型 | 契约否、模型是 | REALTIMESTT_RUN_SHERPA_ONNX_PARAKEET/_MOONSHINE=1 | tests.unit.test_sherpa_onnx_engine |
| Kroko-ONNX 契约/Community | 契约否、模型是 | REALTIMESTT_RUN_KROKO_ONNX=1(Pro 另加 KEY) | tests.unit.test_kroko_onnx_engine.KrokoOnnxGoldenTranscriptionTests |
| Omnilingual 契约 | 否(假运行时) | 无(smoke 在 Linux/WSL2) | tests.unit.test_omnilingual_asr_engine |
| FastAPI 假调度器 | 否 | 无 | tests.unit.test_fastapi_server_protocol tests.unit.test_fastapi_server_multi_user |
| FastAPI 真实引擎负载 | 是 | REALTIMESTT_RUN_FASTAPI_MULTI_USER_PERF=1及REALTIMESTT_FASTAPI_ASR_*系列 | tests.unit.test_fastapi_server_multi_user_asr_integration.FastAPIMultiUserRealEngineASRTests |
结合这套分层体系,开发者既能在几秒内完成全部契约验证,也能按需对任意转录引擎做真实音频的端到端质量与延迟评估;而 FastAPI 多用户压测则把「并发公平性 + 延迟 p50/p95 + WER」固化成了可重复、可导出 JSON 对比的自动化检查。相关手动演示与回归脚本(如tests/final_transcription_gap_regression.py、tests/realtime_transcription_count_comparison.py)详见 docs/test-scripts.md,可与此处单元测试体系互补使用。
【免费下载链接】RealtimeSTTA robust, efficient, low-latency speech-to-text library with advanced voice activity detection, wake word activation and instant transcription.项目地址: https://gitcode.com/GitHub_Trending/re/RealtimeSTT
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考