Skip to content

Document 接口测试

概述

本文档详细描述了 Document CRUD 功能的接口测试用例,包括创建、查询、更新、删除和搜索文档等操作。

测试环境

  • API 地址: http://localhost:3000
  • 请求格式: JSON
  • 响应格式: JSON
  • 认证方式: JWT Token

接口列表

接口名称请求方法请求路径描述
创建文档POST/api/v1/documents上传并创建文档
查询文档列表GET/api/v1/documents查询文档列表
获取文档详情GET/api/v1/documents/{id}获取指定文档详情
更新文档PUT/api/v1/documents/{id}更新指定文档
删除文档DELETE/api/v1/documents/{id}删除指定文档
搜索文档POST/api/v1/documents/search搜索文档内容
批量删除文档DELETE/api/v1/documents批量删除文档

测试用例

1. 创建文档

1.1 正常创建文档

  • 接口: POST /api/v1/documents
  • 请求头:
    • Authorization: Bearer
    • Content-Type: multipart/form-data
  • 请求参数:
    • file: 测试文档文件(.md格式)
    • collectionId: 集合ID
    • title: 文档标题(可选)
  • 预期结果:
    • 状态码: 201
    • 返回创建的文档信息,包含ID、标题、文件名等字段
    • 文档在本地数据库和Chroma中都成功创建

1.2 未提供文件创建文档

  • 接口: POST /api/v1/documents
  • 请求头:
    • Authorization: Bearer
    • Content-Type: multipart/form-data
  • 请求参数:
    • collectionId: 集合ID
  • 预期结果:
    • 状态码: 400
    • 返回错误信息,提示文件是必需的

1.3 未提供集合ID创建文档

  • 接口: POST /api/v1/documents
  • 请求头:
    • Authorization: Bearer
    • Content-Type: multipart/form-data
  • 请求参数:
    • file: 测试文档文件(.md格式)
  • 预期结果:
    • 状态码: 400
    • 返回错误信息,提示集合ID是必需的

1.4 提供不支持的文件类型

  • 接口: POST /api/v1/documents
  • 请求头:
    • Authorization: Bearer
    • Content-Type: multipart/form-data
  • 请求参数:
    • file: 测试文档文件(.pdf格式)
    • collectionId: 集合ID
  • 预期结果:
    • 状态码: 400
    • 返回错误信息,提示不支持的文件类型

2. 查询文档列表

2.1 查询所有文档

  • 接口: GET /api/v1/documents
  • 请求头:
    • Authorization: Bearer
  • 请求参数: 无
  • 预期结果:
    • 状态码: 200
    • 返回文档列表和总数
    • 列表按创建时间倒序排列

2.2 分页查询文档

  • 接口: GET /api/v1/documents?page=1&pageSize=10
  • 请求头:
    • Authorization: Bearer
  • 请求参数:
    • page: 1
    • pageSize: 10
  • 预期结果:
    • 状态码: 200
    • 返回指定页码和大小的文档列表
    • 包含总数、当前页码和页大小信息

2.3 按集合ID查询文档

  • 接口: GET /api/v1/documents?collectionId={collectionId}
  • 请求头:
    • Authorization: Bearer
  • 请求参数:
    • collectionId: 集合ID
  • 预期结果:
    • 状态码: 200
    • 返回指定集合下的文档列表

2.4 查询不存在集合的文档

  • 接口: GET /api/v1/documents?collectionId=invalid-id
  • 请求头:
    • Authorization: Bearer
  • 请求参数:
    • collectionId: 无效的集合ID
  • 预期结果:
    • 状态码: 200
    • 返回空列表

3. 获取文档详情

3.1 获取存在的文档详情

  • 接口: GET /api/v1/documents/{id}
  • 请求头:
    • Authorization: Bearer
  • 请求参数:
    • id: 文档ID
  • 预期结果:
    • 状态码: 200
    • 返回指定文档的详细信息

3.2 获取不存在的文档详情

  • 接口: GET /api/v1/documents/invalid-id
  • 请求头:
    • Authorization: Bearer
  • 请求参数:
    • id: 无效的文档ID
  • 预期结果:
    • 状态码: 404
    • 返回错误信息,提示文档未找到

4. 更新文档

4.1 更新文档标题

  • 接口: PUT /api/v1/documents/{id}
  • 请求头:
    • Authorization: Bearer
    • Content-Type: application/json
  • 请求参数:
    • id: 文档ID
    • title: 新标题
  • 预期结果:
    • 状态码: 200
    • 返回更新后的文档信息
    • 文档在本地数据库和Chroma中都成功更新

4.2 更新不存在的文档

  • 接口: PUT /api/v1/documents/invalid-id
  • 请求头:
    • Authorization: Bearer
    • Content-Type: application/json
  • 请求参数:
    • id: 无效的文档ID
    • title: 新标题
  • 预期结果:
    • 状态码: 404
    • 返回错误信息,提示文档未找到

5. 删除文档

5.1 删除存在的文档

  • 接口: DELETE /api/v1/documents/{id}
  • 请求头:
    • Authorization: Bearer
  • 请求参数:
    • id: 文档ID
  • 预期结果:
    • 状态码: 200
    • 文档在本地数据库和Chroma中都成功删除

5.2 删除不存在的文档

  • 接口: DELETE /api/v1/documents/invalid-id
  • 请求头:
    • Authorization: Bearer
  • 请求参数:
    • id: 无效的文档ID
  • 预期结果:
    • 状态码: 404
    • 返回错误信息,提示文档未找到

6. 搜索文档

6.1 正常搜索文档

  • 接口: POST /api/v1/documents/search
  • 请求头:
    • Authorization: Bearer
    • Content-Type: application/json
  • 请求参数:
    • query: 搜索关键词
    • collectionId: 集合ID
  • 预期结果:
    • 状态码: 200
    • 返回匹配的文档列表,包含内容片段和相似度得分

6.2 在不存在的集合中搜索文档

  • 接口: POST /api/v1/documents/search
  • 请求头:
    • Authorization: Bearer
    • Content-Type: application/json
  • 请求参数:
    • query: 搜索关键词
    • collectionId: 无效的集合ID
  • 预期结果:
    • 状态码: 400 或 404
    • 返回错误信息,提示集合未找到

6.3 搜索不存在的内容

  • 接口: POST /api/v1/documents/search
  • 请求头:
    • Authorization: Bearer
    • Content-Type: application/json
  • 请求参数:
    • query: 不存在的关键词
    • collectionId: 集合ID
  • 预期结果:
    • 状态码: 200
    • 返回空的结果列表

7. 批量删除文档

7.1 批量删除存在的文档

  • 接口: DELETE /api/v1/documents
  • 请求头:
    • Authorization: Bearer
    • Content-Type: application/json
  • 请求参数:
    • ids: [文档ID1, 文档ID2, ...]
  • 预期结果:
    • 状态码: 200
    • 指定的文档在本地数据库和Chroma中都成功删除

7.2 批量删除部分存在的文档

  • 接口: DELETE /api/v1/documents
  • 请求头:
    • Authorization: Bearer
    • Content-Type: application/json
  • 请求参数:
    • ids: [有效文档ID, 无效文档ID]
  • 预期结果:
    • 状态码: 200
    • 有效的文档被删除,无效的文档被忽略

性能测试

1. 文档创建性能

  • 测试场景: 并发上传100个文档
  • 预期结果:
    • 平均响应时间 < 500ms
    • 成功率 100%
    • 数据库和Chroma数据一致性 100%

2. 文档查询性能

  • 测试场景: 并发查询100次文档列表
  • 预期结果:
    • 平均响应时间 < 200ms
    • 成功率 100%

3. 文档搜索性能

  • 测试场景: 并发执行100次文档搜索
  • 预期结果:
    • 平均响应时间 < 500ms
    • 成功率 100%

安全测试

1. 未认证访问

  • 测试场景: 不带JWT Token访问所有接口
  • 预期结果:
    • 状态码: 401
    • 返回未授权错误信息

2. 跨租户访问

  • 测试场景: 使用一个租户的Token访问另一个租户的文档
  • 预期结果:
    • 状态码: 403 或 404
    • 返回权限不足或资源未找到错误信息

兼容性测试

1. 不同文件类型支持

  • 测试场景: 上传不同格式的文档文件
  • 预期结果:
    • .md 文件: 成功上传并处理
    • 其他格式文件: 返回错误信息,提示不支持

2. 大文件处理

  • 测试场景: 上传大尺寸文档文件(>10MB)
  • 预期结果:
    • 成功上传并处理
    • 或返回适当错误信息,提示文件过大

测试执行记录

测试用例执行时间执行人结果备注