231 lines
6.8 KiB
Python
231 lines
6.8 KiB
Python
|
|
"""
|
|||
|
|
测试音乐库唱歌视频功能
|
|||
|
|
"""
|
|||
|
|
import requests
|
|||
|
|
import json
|
|||
|
|
import time
|
|||
|
|
|
|||
|
|
# 配置
|
|||
|
|
BASE_URL = "http://localhost:30101"
|
|||
|
|
# 需要替换为实际的 token
|
|||
|
|
TOKEN = "your_token_here"
|
|||
|
|
|
|||
|
|
headers = {
|
|||
|
|
"Authorization": f"Bearer {TOKEN}",
|
|||
|
|
"Content-Type": "application/json"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def test_convert_music_to_song():
|
|||
|
|
"""测试转换音乐为系统歌曲"""
|
|||
|
|
print("\n=== 测试转换音乐为系统歌曲 ===")
|
|||
|
|
|
|||
|
|
# 测试直链音乐(Bensound)
|
|||
|
|
response = requests.post(
|
|||
|
|
f"{BASE_URL}/music/convert-to-song",
|
|||
|
|
headers=headers,
|
|||
|
|
params={"music_id": 1}
|
|||
|
|
)
|
|||
|
|
print(f"状态码: {response.status_code}")
|
|||
|
|
print(f"响应: {json.dumps(response.json(), indent=2, ensure_ascii=False)}")
|
|||
|
|
|
|||
|
|
if response.status_code == 200:
|
|||
|
|
data = response.json()
|
|||
|
|
if data.get("code") == 1:
|
|||
|
|
song_id = data["data"]["song_id"]
|
|||
|
|
print(f"✅ 转换成功,song_id: {song_id}")
|
|||
|
|
return song_id
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 转换失败: {data.get('message')}")
|
|||
|
|
return None
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 请求失败")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
|
|||
|
|
def test_convert_external_music():
|
|||
|
|
"""测试转换外部链接音乐(应该失败)"""
|
|||
|
|
print("\n=== 测试转换外部链接音乐(应该失败) ===")
|
|||
|
|
|
|||
|
|
response = requests.post(
|
|||
|
|
f"{BASE_URL}/music/convert-to-song",
|
|||
|
|
headers=headers,
|
|||
|
|
params={"music_id": 31} # 假设 31 是网易云音乐
|
|||
|
|
)
|
|||
|
|
print(f"状态码: {response.status_code}")
|
|||
|
|
print(f"响应: {json.dumps(response.json(), indent=2, ensure_ascii=False)}")
|
|||
|
|
|
|||
|
|
if response.status_code == 200:
|
|||
|
|
data = response.json()
|
|||
|
|
if data.get("code") != 1:
|
|||
|
|
print(f"✅ 正确拒绝外部链接音乐")
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 不应该允许转换外部链接音乐")
|
|||
|
|
else:
|
|||
|
|
print(f"✅ 正确拒绝外部链接音乐")
|
|||
|
|
|
|||
|
|
|
|||
|
|
def test_generate_sing_video(song_id):
|
|||
|
|
"""测试生成唱歌视频"""
|
|||
|
|
print("\n=== 测试生成唱歌视频 ===")
|
|||
|
|
|
|||
|
|
if not song_id:
|
|||
|
|
print("❌ 没有 song_id,跳过测试")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
response = requests.post(
|
|||
|
|
f"{BASE_URL}/sing/generate",
|
|||
|
|
headers=headers,
|
|||
|
|
json={"song_id": song_id}
|
|||
|
|
)
|
|||
|
|
print(f"状态码: {response.status_code}")
|
|||
|
|
print(f"响应: {json.dumps(response.json(), indent=2, ensure_ascii=False)}")
|
|||
|
|
|
|||
|
|
if response.status_code == 200:
|
|||
|
|
data = response.json()
|
|||
|
|
if data.get("code") == 1:
|
|||
|
|
task_data = data["data"]
|
|||
|
|
task_id = task_data.get("generation_task_id")
|
|||
|
|
status = task_data.get("status")
|
|||
|
|
|
|||
|
|
print(f"✅ 任务创建成功")
|
|||
|
|
print(f" 任务ID: {task_id}")
|
|||
|
|
print(f" 状态: {status}")
|
|||
|
|
|
|||
|
|
if status == "succeeded":
|
|||
|
|
print(f" 视频URL: {task_data.get('video_url')}")
|
|||
|
|
print(f" ✅ 立即成功(有缓存)")
|
|||
|
|
else:
|
|||
|
|
print(f" ⏳ 生成中...")
|
|||
|
|
|
|||
|
|
return task_id
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 生成失败: {data.get('message')}")
|
|||
|
|
return None
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 请求失败")
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
|
|||
|
|
def test_check_task_status(task_id):
|
|||
|
|
"""测试查询任务状态"""
|
|||
|
|
print("\n=== 测试查询任务状态 ===")
|
|||
|
|
|
|||
|
|
if not task_id:
|
|||
|
|
print("❌ 没有 task_id,跳过测试")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
response = requests.get(
|
|||
|
|
f"{BASE_URL}/sing/task/{task_id}",
|
|||
|
|
headers=headers
|
|||
|
|
)
|
|||
|
|
print(f"状态码: {response.status_code}")
|
|||
|
|
print(f"响应: {json.dumps(response.json(), indent=2, ensure_ascii=False)}")
|
|||
|
|
|
|||
|
|
if response.status_code == 200:
|
|||
|
|
data = response.json()
|
|||
|
|
if data.get("code") == 1:
|
|||
|
|
task_data = data["data"]
|
|||
|
|
status = task_data.get("status")
|
|||
|
|
print(f"✅ 任务状态: {status}")
|
|||
|
|
|
|||
|
|
if status == "succeeded":
|
|||
|
|
print(f" 视频URL: {task_data.get('video_url')}")
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 查询失败: {data.get('message')}")
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 请求失败")
|
|||
|
|
|
|||
|
|
|
|||
|
|
def test_get_sing_history():
|
|||
|
|
"""测试获取唱歌历史记录"""
|
|||
|
|
print("\n=== 测试获取唱歌历史记录 ===")
|
|||
|
|
|
|||
|
|
response = requests.get(
|
|||
|
|
f"{BASE_URL}/sing/history",
|
|||
|
|
headers=headers,
|
|||
|
|
params={"page": 1, "size": 5}
|
|||
|
|
)
|
|||
|
|
print(f"状态码: {response.status_code}")
|
|||
|
|
|
|||
|
|
if response.status_code == 200:
|
|||
|
|
data = response.json()
|
|||
|
|
if data.get("code") == 1:
|
|||
|
|
history_list = data.get("data", [])
|
|||
|
|
print(f"✅ 历史记录数量: {len(history_list)}")
|
|||
|
|
|
|||
|
|
if history_list:
|
|||
|
|
print("\n最近的视频:")
|
|||
|
|
for i, item in enumerate(history_list[:3], 1):
|
|||
|
|
print(f"{i}. {item.get('song_title', '未知')} - {item.get('status')}")
|
|||
|
|
if item.get('video_url'):
|
|||
|
|
print(f" 视频: {item.get('video_url')[:50]}...")
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 获取失败: {data.get('message')}")
|
|||
|
|
else:
|
|||
|
|
print(f"❌ 请求失败")
|
|||
|
|
|
|||
|
|
|
|||
|
|
def main():
|
|||
|
|
"""主函数"""
|
|||
|
|
print("=" * 60)
|
|||
|
|
print("音乐库唱歌视频功能测试")
|
|||
|
|
print("=" * 60)
|
|||
|
|
|
|||
|
|
# 检查 token
|
|||
|
|
if TOKEN == "your_token_here":
|
|||
|
|
print("\n⚠️ 警告: 请先设置有效的 TOKEN")
|
|||
|
|
print(" 1. 登录应用获取 token")
|
|||
|
|
print(" 2. 修改此脚本中的 TOKEN 变量")
|
|||
|
|
print(" 3. 重新运行测试")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# 运行测试
|
|||
|
|
results = []
|
|||
|
|
|
|||
|
|
# 测试 1: 转换音乐
|
|||
|
|
song_id = test_convert_music_to_song()
|
|||
|
|
results.append(("转换音乐", song_id is not None))
|
|||
|
|
|
|||
|
|
# 测试 2: 转换外部链接(应该失败)
|
|||
|
|
test_convert_external_music()
|
|||
|
|
results.append(("拒绝外部链接", True)) # 手动判断
|
|||
|
|
|
|||
|
|
# 测试 3: 生成视频
|
|||
|
|
if song_id:
|
|||
|
|
task_id = test_generate_sing_video(song_id)
|
|||
|
|
results.append(("生成视频", task_id is not None))
|
|||
|
|
|
|||
|
|
# 测试 4: 查询任务状态
|
|||
|
|
if task_id:
|
|||
|
|
time.sleep(2) # 等待 2 秒
|
|||
|
|
test_check_task_status(task_id)
|
|||
|
|
results.append(("查询任务", True))
|
|||
|
|
|
|||
|
|
# 测试 5: 获取历史记录
|
|||
|
|
test_get_sing_history()
|
|||
|
|
results.append(("获取历史", True))
|
|||
|
|
|
|||
|
|
# 显示测试结果
|
|||
|
|
print("\n" + "=" * 60)
|
|||
|
|
print("测试结果汇总")
|
|||
|
|
print("=" * 60)
|
|||
|
|
|
|||
|
|
for name, success in results:
|
|||
|
|
status = "✅ 通过" if success else "❌ 失败"
|
|||
|
|
print(f"{status} - {name}")
|
|||
|
|
|
|||
|
|
# 统计
|
|||
|
|
passed = sum(1 for _, success in results if success)
|
|||
|
|
total = len(results)
|
|||
|
|
print(f"\n总计: {passed}/{total} 通过")
|
|||
|
|
|
|||
|
|
if passed == total:
|
|||
|
|
print("\n🎉 所有测试通过!")
|
|||
|
|
else:
|
|||
|
|
print(f"\n⚠️ 有 {total - passed} 个测试失败")
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
main()
|