""" 声纹采集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)