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)
- 预期结果:
- 成功上传并处理
- 或返回适当错误信息,提示文件过大
测试执行记录
| 测试用例 | 执行时间 | 执行人 | 结果 | 备注 |
|---|---|---|---|---|