271 lines
6.7 KiB
Markdown
271 lines
6.7 KiB
Markdown
# 端到端真实测试套件
|
||
|
||
本目录包含完整的端到端真实测试,使用真实的视频/音频文件测试整个系统。
|
||
|
||
---
|
||
|
||
## 📁 文件结构
|
||
|
||
```
|
||
test/real/
|
||
├── README.md # 本文件(使用说明)
|
||
├── README_故障排查.md # 故障排查指南
|
||
├── test_config.yaml # 测试配置文件
|
||
├── test_requirements.txt # 额外依赖
|
||
├── test_real_e2e.py # 端到端测试主文件
|
||
└── check_e2e.py # 环境诊断脚本
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 1. 安装额外依赖
|
||
```bash
|
||
pip install pyyaml pytest-timeout
|
||
```
|
||
|
||
### 2. 检查测试环境
|
||
```bash
|
||
python test/real/check_e2e.py
|
||
```
|
||
|
||
### 3. 预下载模型(重要!)
|
||
```bash
|
||
# 首次运行前,手动加载模型避免测试卡住
|
||
python -c "from app.asr.asr_service import ASRService; ASRService()"
|
||
```
|
||
|
||
### 4. 运行测试
|
||
```bash
|
||
# 运行所有端到端测试
|
||
pytest test/real/ -v
|
||
|
||
# 只运行快速验证测试(不测试 ASR)
|
||
pytest test/real/test_real_e2e.py::TestVideoFileValidation -v
|
||
pytest test/real/test_real_e2e.py::TestErrorHandling -v
|
||
|
||
# 运行单个 ASR 测试(带详细输出)
|
||
pytest test/real/test_real_e2e.py::TestASRRecognition::test_recognize_audio_file -v -s
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 测试覆盖
|
||
|
||
### 测试类别(共 8 个测试类)
|
||
|
||
| 测试类 | 测试内容 | 预计时间 |
|
||
|--------|---------|---------|
|
||
| `TestVideoFileValidation` | 视频文件验证 | <1 秒 |
|
||
| `TestAudioFileValidation` | 音频文件验证 | <1 秒 |
|
||
| `TestASRRecognition` | ASR 识别流程 | 30 秒 -5 分钟 |
|
||
| `TestSpeakerDiarization` | 说话人分离 | 30 秒 -5 分钟 |
|
||
| `TestVideoTranscoding` | 视频转码 | 1-3 分钟 |
|
||
| `TestPerformance` | 性能测试 | 1-5 分钟 |
|
||
| `TestErrorHandling` | 错误处理 | <1 秒 |
|
||
| `TestAPIResponseFormat` | API 响应格式 | <1 秒 |
|
||
|
||
### 测试用例(共 20+ 个)
|
||
|
||
**文件验证**:
|
||
- ✅ 视频文件存在性
|
||
- ✅ 文件大小限制
|
||
- ✅ 文件格式支持
|
||
- ✅ 音频文件存在性
|
||
|
||
**ASR 识别**:
|
||
- ✅ 音频文件识别
|
||
- ✅ 视频文件识别
|
||
- ✅ 结果获取
|
||
- ✅ 响应格式验证
|
||
|
||
**说话人分离**:
|
||
- ✅ 说话人数量验证
|
||
- ✅ 时间戳精度检查
|
||
|
||
**视频转码**:
|
||
- ✅ 视频转码功能
|
||
- ✅ 转码后 URL 获取
|
||
|
||
**性能测试**:
|
||
- ✅ ASR 处理时间
|
||
- ✅ 实时处理率(RTF)
|
||
|
||
**错误处理**:
|
||
- ✅ 文件不存在错误
|
||
- ✅ 缺少参数错误
|
||
- ✅ 转码错误处理
|
||
|
||
---
|
||
|
||
## ⚙️ 配置说明
|
||
|
||
### test_config.yaml
|
||
|
||
```yaml
|
||
test_files:
|
||
primary_video: "input/VID_20251104_085655_024.AVI" # 主测试文件
|
||
backup_videos: # 备用文件
|
||
- "input/Miehhuoxqih.AVI"
|
||
- "input/VID_20251104_090655_025.AVI"
|
||
audio_files: # 音频测试文件
|
||
- "input/VID_20251031_132320_019_mono.wav"
|
||
|
||
timeouts:
|
||
asr_recognize: 600 # ASR 识别超时(秒)
|
||
transcode: 300 # 转码超时
|
||
|
||
performance:
|
||
max_asr_time: 120 # 最大 ASR 处理时间
|
||
min_processing_speed: 0.5 # 最小处理速度(倍)
|
||
```
|
||
|
||
---
|
||
|
||
## 🏷️ 测试标记(Markers)
|
||
|
||
测试使用了 pytest markers 分类:
|
||
|
||
- `@pytest.mark.real` - 端到端真实测试
|
||
- `@pytest.mark.slow` - 慢速测试(>10 秒)
|
||
- `@pytest.mark.performance` - 性能测试
|
||
- `@pytest.mark.timeout(N)` - N 秒超时
|
||
- `@pytest.mark.requires_ffmpeg` - 需要 ffmpeg
|
||
- `@pytest.mark.requires_gpu` - 需要 GPU
|
||
|
||
### 运行特定测试
|
||
|
||
```bash
|
||
# 只运行快速测试
|
||
pytest test/real/ -v -m "not slow"
|
||
|
||
# 只运行性能测试
|
||
pytest test/real/ -v -m "performance"
|
||
|
||
# 跳过需要 GPU 的测试
|
||
pytest test/real/ -v -m "not requires_gpu"
|
||
|
||
# 只运行 ASR 识别测试
|
||
pytest test/real/test_real_e2e.py::TestASRRecognition -v
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ 常见问题
|
||
|
||
### 测试卡住怎么办?
|
||
|
||
**可能原因**:
|
||
1. 首次下载模型(10-30 分钟)
|
||
2. 模型加载缓慢(30 秒 -2 分钟)
|
||
3. 文件过大处理时间长
|
||
|
||
**解决方案**:
|
||
1. 预下载模型:`python -c "from app.asr.asr_service import ASRService; ASRService()"`
|
||
2. 使用更小的测试文件
|
||
3. 安装 `pytest-timeout` 设置超时
|
||
|
||
详见:[README_故障排查.md](README_故障排查.md)
|
||
|
||
### CPU 占用低但测试无响应?
|
||
|
||
这是正常的,可能原因:
|
||
- 等待模型下载(网络 IO)
|
||
- 等待模型加载(内存 IO)
|
||
- 音频/视频处理中
|
||
|
||
**建议**:首次运行耐心等待 10-30 分钟
|
||
|
||
### 如何跳过慢速测试?
|
||
|
||
```bash
|
||
pytest test/real/ -v -m "not slow"
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 预期性能
|
||
|
||
### 处理时间参考(CPU)
|
||
|
||
| 文件类型 | 大小 | 处理时间 |
|
||
|---------|------|---------|
|
||
| 短音频 | 5MB | 30-60 秒 |
|
||
| 长音频 | 20MB | 2-5 分钟 |
|
||
| 短视频 | 50MB | 1-3 分钟 |
|
||
| 长视频 | 200MB | 5-15 分钟 |
|
||
|
||
### 处理时间参考(GPU)
|
||
|
||
| 文件类型 | 大小 | 处理时间 |
|
||
|---------|------|---------|
|
||
| 短音频 | 5MB | 10-20 秒 |
|
||
| 长音频 | 20MB | 30-60 秒 |
|
||
| 短视频 | 50MB | 30-60 秒 |
|
||
| 长视频 | 200MB | 2-5 分钟 |
|
||
|
||
---
|
||
|
||
## 🔧 依赖要求
|
||
|
||
### 必需依赖
|
||
```bash
|
||
pip install pyyaml>=6.0
|
||
```
|
||
|
||
### 可选依赖(推荐)
|
||
```bash
|
||
# 测试超时控制
|
||
pip install pytest-timeout>=2.2.0
|
||
|
||
# 性能测试
|
||
pip install pytest-benchmark>=4.0.0
|
||
|
||
# 代码覆盖率
|
||
pip install pytest-cov>=4.1.0
|
||
```
|
||
|
||
### 完整依赖列表
|
||
见:[test_requirements.txt](test_requirements.txt)
|
||
|
||
---
|
||
|
||
## 📝 测试输出示例
|
||
|
||
```
|
||
============================================================ test session starts ============================================================
|
||
platform win32 -- Python 3.10.0, pytest-7.4.0, pluggy-1.3.0 -- D:\Python310\python.exe
|
||
cachedir: .pytest_cache
|
||
rootdir: D:\Userfile\Projects\AnzezxianxHazardInspectAI\Code\audio2
|
||
plugins: timeout-2.2.0
|
||
collected 20 items
|
||
|
||
test/real/test_real_e2e.py::TestVideoFileValidation::test_primary_video_file_exists PASSED [ 5%]
|
||
test/real/test_real_e2e.py::TestASRRecognition::test_recognize_audio_file
|
||
使用测试音频:VID_20251031_132320_019_mono.wav (5.23 MB)
|
||
开始测试音频识别
|
||
音频识别耗时:45.32 秒
|
||
✓ 音频识别成功,task_id: abc123...
|
||
PASSED [ 10%]
|
||
|
||
======================================================== 20 passed in 180.52s (0:03:00) =========================================================
|
||
```
|
||
|
||
---
|
||
|
||
## 🆘 需要帮助?
|
||
|
||
1. 查看 [README_故障排查.md](README_故障排查.md)
|
||
2. 运行诊断脚本:`python test/real/check_e2e.py`
|
||
3. 查看详细输出:`pytest test/real/ -v -s`
|
||
4. 按 `Ctrl+C` 查看卡住位置的堆栈跟踪
|
||
|
||
---
|
||
|
||
## 📚 相关文档
|
||
|
||
- [主测试文档](../README.md) - 整体测试策略
|
||
- [pytest 文档](https://docs.pytest.org/) - pytest 使用指南
|
||
- [FunASR 文档](https://github.com/alibaba-damo-academy/FunASR) - ASR 模型说明
|