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

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%+ 待测量

后续优化建议

  1. 性能测试

    • 大量数据下的查询性能
    • 并发创建测试
  2. 压力测试

    • API 接口压力测试
    • 数据库连接池测试
  3. 安全测试

    • SQL 注入测试
    • XSS 攻击测试
    • 权限绕过测试

变更日期:2026-02-04
变更类型:测试
符合规范:jointo-tech-stack v1.0