142 lines
4.3 KiB
Python
142 lines
4.3 KiB
Python
"""
|
||
声纹采集API测试脚本
|
||
|
||
使用方法:
|
||
1. 确保后端服务正在运行
|
||
2. 修改 USER_ID 和 TOKEN 为实际值
|
||
3. 准备一个10秒的WAV音频文件
|
||
4. 运行: python test_voiceprint_api.py
|
||
"""
|
||
|
||
import requests
|
||
import json
|
||
|
||
# 配置
|
||
BASE_URL = "http://localhost:8000/api"
|
||
USER_ID = 1 # 修改为实际用户ID
|
||
TOKEN = "" # 登录后获取的token
|
||
|
||
# 请求头
|
||
headers = {
|
||
"Authorization": f"Bearer {TOKEN}",
|
||
"Content-Type": "application/json"
|
||
}
|
||
|
||
|
||
def test_get_template():
|
||
"""测试获取朗读模板"""
|
||
print("\n=== 测试1: 获取朗读模板 ===")
|
||
url = f"{BASE_URL}/voiceprint/template"
|
||
response = requests.get(url, headers=headers)
|
||
print(f"状态码: {response.status_code}")
|
||
print(f"响应: {json.dumps(response.json(), ensure_ascii=False, indent=2)}")
|
||
return response.json()
|
||
|
||
|
||
def test_get_status(user_id):
|
||
"""测试获取声纹状态"""
|
||
print(f"\n=== 测试2: 获取用户 {user_id} 的声纹状态 ===")
|
||
url = f"{BASE_URL}/voiceprint/{user_id}"
|
||
response = requests.get(url, headers=headers)
|
||
print(f"状态码: {response.status_code}")
|
||
print(f"响应: {json.dumps(response.json(), ensure_ascii=False, indent=2)}")
|
||
return response.json()
|
||
|
||
|
||
def test_upload_voiceprint(user_id, audio_file_path):
|
||
"""测试上传声纹"""
|
||
print(f"\n=== 测试3: 上传声纹音频 ===")
|
||
url = f"{BASE_URL}/voiceprint/{user_id}"
|
||
|
||
# 移除Content-Type,让requests自动设置multipart/form-data
|
||
upload_headers = {
|
||
"Authorization": f"Bearer {TOKEN}"
|
||
}
|
||
|
||
with open(audio_file_path, 'rb') as f:
|
||
files = {'audio_file': (audio_file_path.split('/')[-1], f, 'audio/wav')}
|
||
response = requests.post(url, headers=upload_headers, files=files)
|
||
|
||
print(f"状态码: {response.status_code}")
|
||
print(f"响应: {json.dumps(response.json(), ensure_ascii=False, indent=2)}")
|
||
return response.json()
|
||
|
||
|
||
def test_delete_voiceprint(user_id):
|
||
"""测试删除声纹"""
|
||
print(f"\n=== 测试4: 删除用户 {user_id} 的声纹 ===")
|
||
url = f"{BASE_URL}/voiceprint/{user_id}"
|
||
response = requests.delete(url, headers=headers)
|
||
print(f"状态码: {response.status_code}")
|
||
print(f"响应: {json.dumps(response.json(), ensure_ascii=False, indent=2)}")
|
||
return response.json()
|
||
|
||
|
||
def login(username, password):
|
||
"""登录获取token"""
|
||
print("\n=== 登录获取Token ===")
|
||
url = f"{BASE_URL}/auth/login"
|
||
data = {
|
||
"username": username,
|
||
"password": password
|
||
}
|
||
response = requests.post(url, json=data)
|
||
if response.status_code == 200:
|
||
result = response.json()
|
||
if result.get('code') == '200':
|
||
token = result['data']['token']
|
||
print(f"登录成功,Token: {token[:20]}...")
|
||
return token
|
||
else:
|
||
print(f"登录失败: {result.get('message')}")
|
||
return None
|
||
else:
|
||
print(f"请求失败,状态码: {response.status_code}")
|
||
return None
|
||
|
||
|
||
if __name__ == "__main__":
|
||
print("=" * 60)
|
||
print("声纹采集API测试脚本")
|
||
print("=" * 60)
|
||
|
||
# 步骤1: 登录(如果没有token)
|
||
if not TOKEN:
|
||
print("\n请先登录获取Token...")
|
||
username = input("用户名: ")
|
||
password = input("密码: ")
|
||
TOKEN = login(username, password)
|
||
if TOKEN:
|
||
headers["Authorization"] = f"Bearer {TOKEN}"
|
||
else:
|
||
print("登录失败,退出测试")
|
||
exit(1)
|
||
|
||
# 步骤2: 测试获取朗读模板
|
||
test_get_template()
|
||
|
||
# 步骤3: 测试获取声纹状态
|
||
test_get_status(USER_ID)
|
||
|
||
# 步骤4: 测试上传声纹(需要准备音频文件)
|
||
audio_file = input("\n请输入WAV音频文件路径 (回车跳过上传测试): ")
|
||
if audio_file.strip():
|
||
test_upload_voiceprint(USER_ID, audio_file.strip())
|
||
|
||
# 上传后再次查看状态
|
||
print("\n=== 上传后再次查看状态 ===")
|
||
test_get_status(USER_ID)
|
||
|
||
# 步骤5: 测试删除声纹
|
||
confirm = input("\n是否测试删除声纹? (yes/no): ")
|
||
if confirm.lower() == 'yes':
|
||
test_delete_voiceprint(USER_ID)
|
||
|
||
# 删除后再次查看状态
|
||
print("\n=== 删除后再次查看状态 ===")
|
||
test_get_status(USER_ID)
|
||
|
||
print("\n" + "=" * 60)
|
||
print("测试完成")
|
||
print("=" * 60)
|