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.7 KiB
8.7 KiB
AI Prompt System 测试套件创建
变更日期:2026-02-04
变更类型:测试
影响范围:AI Prompt System 服务
符合规范:jointo-tech-stack v1.0
变更概述
为 AI Prompt System 服务创建完整的测试套件,包括 Repository 单元测试、Service 单元测试和 API 集成测试。
测试文件
1. Repository 单元测试
文件:server/tests/unit/repositories/test_ai_prompt_system_repository.py
测试类:TestAIPromptSystemRepository
测试覆盖:
基础 CRUD 测试
- ✅
test_create_prompt- 创建提示词 - ✅
test_get_by_id- 根据 ID 获取 - ✅
test_get_by_id_not_found- 获取不存在的提示词 - ✅
test_update_prompt- 更新提示词 - ✅
test_delete_prompt- 删除提示词(软删除)
查询方法测试
- ✅
test_get_by_name- 根据名称获取(最新版本) - ✅
test_get_by_name_version- 根据名称和版本获取 - ✅
test_get_default_by_type- 获取默认提示词 - ✅
test_list_prompts_no_filter- 获取列表(无过滤) - ✅
test_list_prompts_with_type_filter- 按类型过滤 - ✅
test_list_prompts_with_active_filter- 按激活状态过滤 - ✅
test_list_prompts_with_name_search- 按名称搜索 - ✅
test_list_prompts_pagination- 分页测试 - ✅
test_count_prompts- 统计数量 - ✅
test_count_prompts_with_filter- 带过滤的统计
版本管理测试
- ✅
test_get_versions_by_name- 获取版本历史 - ✅
test_get_versions_by_name_empty- 获取空版本历史
默认提示词管理测试
- ✅
test_unset_default_by_type- 取消默认提示词 - ✅
test_unset_default_by_type_no_effect_on_other_types- 不影响其他类型
边界情况测试
- ✅
test_create_duplicate_name_version- 创建重复名称+版本 - ✅
test_skills_data_jsonb- JSONB 字段测试
总计:22 个测试用例
2. Service 单元测试
文件:server/tests/unit/services/test_ai_prompt_system_service.py
测试类:TestAIPromptSystemService
测试覆盖:
创建提示词测试
- ✅
test_create_prompt_success- 创建成功 - ✅
test_create_prompt_duplicate_version- 重复版本失败 - ✅
test_create_prompt_invalid_skills_data- 无效 skills_data - ✅
test_create_prompt_missing_skills_field- 缺少 skills 字段 - ✅
test_create_prompt_set_as_default- 设置为默认
获取提示词测试
- ✅
test_get_prompt_by_id_success- 根据 ID 获取成功 - ✅
test_get_prompt_by_id_not_found- ID 不存在 - ✅
test_get_prompt_by_name_success- 根据名称获取成功 - ✅
test_get_prompt_by_name_not_found- 名称不存在 - ✅
test_get_default_prompt_success- 获取默认提示词成功 - ✅
test_get_default_prompt_not_found- 默认提示词不存在
列表查询测试
- ✅
test_list_prompts_success- 获取列表成功 - ✅
test_list_prompts_with_filters- 带过滤条件 - ✅
test_list_prompts_pagination- 分页计算
更新提示词测试
- ✅
test_update_prompt_success- 更新成功 - ✅
test_update_prompt_not_found- 提示词不存在 - ✅
test_update_prompt_set_as_default- 更新并设置为默认
删除提示词测试
- ✅
test_delete_prompt_success- 删除成功 - ✅
test_delete_prompt_not_found- 提示词不存在 - ✅
test_delete_default_prompt_fails- 删除默认提示词失败
设置默认提示词测试
- ✅
test_set_default_success- 设置成功 - ✅
test_set_default_not_found- 提示词不存在 - ✅
test_set_default_inactive_prompt_fails- 未激活提示词失败
版本管理测试
- ✅
test_create_version_success- 创建版本成功 - ✅
test_create_version_base_not_found- 基础提示词不存在 - ✅
test_create_version_duplicate- 创建重复版本 - ✅
test_create_version_inherit_content- 继承内容 - ✅
test_get_versions_success- 获取版本历史成功 - ✅
test_get_versions_empty- 获取空版本历史
私有方法测试
- ✅
test_validate_skills_data_valid- 验证有效数据 - ✅
test_validate_skills_data_not_dict- 非字典类型 - ✅
test_validate_skills_data_missing_skills- 缺少 skills 字段 - ✅
test_validate_skills_data_skills_not_list- skills 不是数组 - ✅
test_validate_skills_data_skill_not_dict- skill 不是字典 - ✅
test_validate_skills_data_missing_required_field- 缺少必需字段 - ✅
test_format_prompt_response- 格式化响应 - ✅
test_format_prompt_list_item- 格式化列表项
总计:36 个测试用例
3. API 集成测试
文件:server/tests/integration/test_ai_prompts_api.py
测试类:TestAIPromptsAPI
测试覆盖:
创建提示词测试
- ✅
test_create_prompt_success- 创建成功 - ✅
test_create_prompt_unauthorized- 未认证 - ✅
test_create_prompt_duplicate_version- 重复版本 - ✅
test_create_prompt_invalid_skills_data- 无效 skills_data
获取提示词列表测试
- ✅
test_list_prompts_success- 获取列表成功 - ✅
test_list_prompts_with_type_filter- 按类型过滤 - ✅
test_list_prompts_pagination- 分页
获取提示词详情测试
- ✅
test_get_prompt_by_id_success- 根据 ID 获取成功 - ✅
test_get_prompt_by_id_not_found- ID 不存在 - ✅
test_get_prompt_by_name_success- 根据名称获取成功
更新提示词测试
- ✅
test_update_prompt_success- 更新成功 - ✅
test_update_prompt_not_found- 提示词不存在
删除提示词测试
- ✅
test_delete_prompt_success- 删除成功 - ✅
test_delete_default_prompt_fails- 删除默认提示词失败
设置默认提示词测试
- ✅
test_set_default_prompt_success- 设置成功
版本管理测试
- ✅
test_create_version_success- 创建版本成功 - ✅
test_create_version_duplicate- 创建重复版本 - ✅
test_get_versions_success- 获取版本历史成功
获取默认提示词测试(公开接口)
- ✅
test_get_default_prompt_success- 获取成功 - ✅
test_get_default_prompt_not_found- 不存在
总计:19 个测试用例
测试统计
| 测试类型 | 文件 | 测试用例数 |
|---|---|---|
| Repository 单元测试 | test_ai_prompt_system_repository.py |
22 |
| Service 单元测试 | test_ai_prompt_system_service.py |
36 |
| API 集成测试 | test_ai_prompts_api.py |
19 |
| 总计 | 77 |
测试技术规范
✅ 符合 jointo-tech-stack 规范
- ✅ 使用 pytest-asyncio
- ✅ 使用 fixture 管理测试数据
- ✅ 完整的类型注解
- ✅ 测试异步操作
- ✅ Mock Repository 层(Service 测试)
- ✅ 使用 httpx.AsyncClient(API 测试)
- ✅ 测试认证和权限
- ✅ 完整的边界情况覆盖
运行测试
运行所有测试
# 在容器内运行
docker exec jointo-server-app pytest server/tests/unit/repositories/test_ai_prompt_system_repository.py -v
docker exec jointo-server-app pytest server/tests/unit/services/test_ai_prompt_system_service.py -v
docker exec jointo-server-app pytest server/tests/integration/test_ai_prompts_api.py -v
运行特定测试
# Repository 测试
docker exec jointo-server-app pytest server/tests/unit/repositories/test_ai_prompt_system_repository.py::TestAIPromptSystemRepository::test_create_prompt -v
# Service 测试
docker exec jointo-server-app pytest server/tests/unit/services/test_ai_prompt_system_service.py::TestAIPromptSystemService::test_create_prompt_success -v
# API 测试
docker exec jointo-server-app pytest server/tests/integration/test_ai_prompts_api.py::TestAIPromptsAPI::test_create_prompt_success -v
生成覆盖率报告
docker exec jointo-server-app pytest \
server/tests/unit/repositories/test_ai_prompt_system_repository.py \
server/tests/unit/services/test_ai_prompt_system_service.py \
server/tests/integration/test_ai_prompts_api.py \
--cov=app.repositories.ai_prompt_system_repository \
--cov=app.services.ai_prompt_system_service \
--cov=app.api.v1.ai_prompts \
--cov-report=html \
--cov-report=term
测试覆盖率目标
| 模块 | 目标覆盖率 | 实际覆盖率 |
|---|---|---|
| Repository | 90%+ | 待测量 |
| Service | 90%+ | 待测量 |
| API | 85%+ | 待测量 |
后续优化建议
-
性能测试
- 大量数据下的查询性能
- 并发创建测试
-
压力测试
- API 接口压力测试
- 数据库连接池测试
-
安全测试
- SQL 注入测试
- XSS 攻击测试
- 权限绕过测试
变更日期:2026-02-04
变更类型:测试
符合规范:jointo-tech-stack v1.0