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)
|