You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
8.9 KiB
8.9 KiB
AI 服务测试指南
概述
本指南提供 AI 服务功能的完整测试流程,包括:
- AI 对话管理
- AI 提示词系统
- AI 任务管理
- 剧本解析
前置条件
1. 环境准备
确保 Docker 容器正常运行:
# 检查容器状态
docker ps | grep jointo-server
# 应该看到以下容器:
# - jointo-server-app
# - jointo-server-postgres
# - jointo-server-redis
# - jointo-server-rabbitmq
# - jointo-server-celery-ai
# - jointo-server-celery-export
# - jointo-server-celery-beat
2. 数据库准备
确保数据库迁移已完成:
# 检查迁移状态
docker exec jointo-server-app alembic current
# 如果需要升级
docker exec jointo-server-app python scripts/db_migrate.py upgrade
3. 测试用户准备
创建测试用户(如果还没有):
docker exec -it jointo-server-postgres psql -U jointoAI -d jointo -c "
INSERT INTO users (user_id, phone, nickname, password_hash, is_active)
VALUES (
gen_random_uuid(),
'13800138000',
'测试用户',
'\$2b\$12\$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewY5GyYqNqYqNqYq',
true
) ON CONFLICT (phone) DO NOTHING;
"
测试流程
阶段 1:单元测试
运行单元测试验证核心逻辑:
# 进入容器
docker exec -it jointo-server-app bash
# 运行 AI 服务单元测试
pytest tests/unit/test_ai_service.py -v
# 运行 AI 任务单元测试
pytest tests/unit/test_ai_tasks.py -v
阶段 2:集成测试
运行集成测试验证 API 端点:
# 运行 AI 集成测试
pytest tests/integration/test_ai_integration.py -v
# 运行特定测试类
pytest tests/integration/test_ai_integration.py::TestAIConversations -v
pytest tests/integration/test_ai_integration.py::TestAIPrompts -v
pytest tests/integration/test_ai_integration.py::TestAIJobs -v
pytest tests/integration/test_ai_integration.py::TestScreenplayParsing -v
阶段 3:手动 API 测试
使用 curl 或 Postman 测试 API 端点。
3.1 获取访问令牌
# 登录获取 token
curl -X POST http://localhost:8000/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"phone": "13800138000",
"password": "test123456"
}'
# 保存返回的 access_token
export TOKEN="your_access_token_here"
3.2 测试 AI 对话管理
# 创建对话
curl -X POST http://localhost:8000/api/v1/ai/conversations \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"project_id": "your_project_id",
"title": "测试对话"
}'
# 保存返回的 conversation_id
export CONV_ID="conversation_id_here"
# 添加消息
curl -X POST http://localhost:8000/api/v1/ai/conversations/$CONV_ID/messages \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"role": "user",
"content": "你好,请帮我生成一张图片"
}'
# 获取对话历史
curl -X GET http://localhost:8000/api/v1/ai/conversations/$CONV_ID/messages \
-H "Authorization: Bearer $TOKEN"
3.3 测试 AI 提示词系统
# 获取提示词列表
curl -X GET http://localhost:8000/api/v1/ai/prompts \
-H "Authorization: Bearer $TOKEN"
# 根据 key 获取提示词
curl -X GET http://localhost:8000/api/v1/ai/prompts/key/image_generation \
-H "Authorization: Bearer $TOKEN"
# 获取提示词变量
curl -X GET http://localhost:8000/api/v1/ai/prompts/key/image_generation/variables \
-H "Authorization: Bearer $TOKEN"
3.4 测试 AI 模型查询
# 获取所有模型
curl -X GET http://localhost:8000/api/v1/ai/models \
-H "Authorization: Bearer $TOKEN"
# 按类型过滤
curl -X GET "http://localhost:8000/api/v1/ai/models?model_type=image" \
-H "Authorization: Bearer $TOKEN"
# 按提供商过滤
curl -X GET "http://localhost:8000/api/v1/ai/models?provider=aihubmix" \
-H "Authorization: Bearer $TOKEN"
3.5 测试 AI 任务管理
# 创建图片生成任务
curl -X POST http://localhost:8000/api/v1/ai/jobs/image \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"project_id": "your_project_id",
"model": "flux-1.1-pro",
"prompt": "一只可爱的猫咪,坐在窗边,阳光洒在身上",
"width": 1024,
"height": 1024
}'
# 保存返回的 job_id
export JOB_ID="job_id_here"
# 查询任务状态
curl -X GET http://localhost:8000/api/v1/ai/jobs/$JOB_ID \
-H "Authorization: Bearer $TOKEN"
# 获取用户任务列表
curl -X GET http://localhost:8000/api/v1/ai/jobs \
-H "Authorization: Bearer $TOKEN"
# 取消任务
curl -X POST http://localhost:8000/api/v1/ai/jobs/$JOB_ID/cancel \
-H "Authorization: Bearer $TOKEN"
3.6 测试剧本解析
# 创建剧本(如果还没有)
curl -X POST http://localhost:8000/api/v1/screenplays \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"project_id": "your_project_id",
"title": "测试剧本",
"content": "场景1:咖啡馆 - 白天\n\n小明走进咖啡馆。\n\n小明:你好!"
}'
# 保存返回的 screenplay_id
export SCREENPLAY_ID="screenplay_id_here"
# 解析剧本
curl -X POST http://localhost:8000/api/v1/screenplays/$SCREENPLAY_ID/parse \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"auto_create_elements": true,
"auto_create_tags": true,
"auto_create_storyboards": false
}'
# 保存返回的 job_id,然后查询状态
curl -X GET http://localhost:8000/api/v1/ai/jobs/$JOB_ID \
-H "Authorization: Bearer $TOKEN"
阶段 4:Celery 任务测试
验证 Celery 任务是否正常执行:
# 查看 Celery Worker 日志
docker logs jointo-server-celery-ai -f
# 查看 Celery Beat 日志(定时任务)
docker logs jointo-server-celery-beat -f
# 进入 Redis 查看任务队列
docker exec -it jointo-server-redis redis-cli
> KEYS celery*
> LLEN celery
> LRANGE celery 0 -1
阶段 5:性能测试
使用 Apache Bench 或 wrk 进行压力测试:
# 安装 Apache Bench
apt-get install apache2-utils
# 测试 AI 模型列表接口(100 个请求,10 个并发)
ab -n 100 -c 10 \
-H "Authorization: Bearer $TOKEN" \
http://localhost:8000/api/v1/ai/models
# 测试提示词列表接口
ab -n 100 -c 10 \
-H "Authorization: Bearer $TOKEN" \
http://localhost:8000/api/v1/ai/prompts
测试检查清单
✅ 功能测试
- AI 对话创建成功
- AI 对话消息添加成功
- AI 对话 @ 提及功能正常
- AI 提示词查询正常
- AI 提示词变量解析正常
- AI 模型列表查询正常
- AI 模型过滤功能正常
- 图片生成任务创建成功
- 视频生成任务创建成功
- 音效生成任务创建成功
- 配音生成任务创建成功
- 字幕生成任务创建成功
- 任务状态查询正常
- 任务取消功能正常
- 剧本解析任务创建成功
- 剧本解析结果正确
✅ 权限测试
- 未登录用户无法访问 API
- 用户只能访问自己的对话
- 用户只能访问自己的任务
- 管理员可以管理提示词
- 普通用户不能管理提示词
✅ 异常测试
- 无效的 project_id 返回 404
- 无效的 conversation_id 返回 404
- 无效的 job_id 返回 404
- 空剧本解析返回 400
- 无效的模型名称返回 400
- 超出配额返回 402
✅ 性能测试
- AI 模型列表响应时间 < 100ms
- AI 提示词列表响应时间 < 100ms
- 任务创建响应时间 < 200ms
- 任务状态查询响应时间 < 50ms
- 并发 10 个请求无错误
常见问题
1. Celery Worker 无法连接 RabbitMQ
症状:任务创建后一直处于 pending 状态
解决方案:
# 检查 RabbitMQ 状态
docker exec jointo-server-rabbitmq rabbitmqctl status
# 重启 Celery Worker
docker restart jointo-server-celery-ai
2. AI Provider 返回错误
症状:任务失败,错误信息显示 API 调用失败
解决方案:
# 检查环境变量
docker exec jointo-server-app env | grep AIHUBMIX
# 检查 AI Provider 日志
docker logs jointo-server-app | grep "AIHubMix"
3. 数据库连接超时
症状:API 请求超时或返回 500 错误
解决方案:
# 检查数据库连接
docker exec jointo-server-postgres pg_isready
# 检查连接池
docker exec jointo-server-app python -c "
from app.core.database import engine
print(engine.pool.status())
"
下一步
测试通过后,可以:
- 部署到测试环境
- 进行用户验收测试(UAT)
- 监控生产环境性能
- 收集用户反馈并优化