- 新增认证API测试,覆盖登录、权限验证、用户管理等关键流程 - 新增对话API测试,包含智能体调用、线程管理、工具获取及配置查询 - 新增系统API测试,涵盖系统健康检查、信息查询及配置管理权限控制 - 配置pytest支持异步测试、标记分类及详细输出 - 添加测试环境配置示例文件 .env.test.example - 新增测试用例README文档,说明测试架构及运行方法 - 优化Makefile,添加格式化差异检查任务 format_diff - 更新.gitignore,支持忽略测试环境配置文件 .env.test
252 lines
5.1 KiB
Markdown
252 lines
5.1 KiB
Markdown
# Yuxi-Know API 测试脚本
|
||
|
||
## 概述
|
||
|
||
本测试套件为Yuxi-Know项目提供了全面的API接口测试,涵盖认证、系统管理、对话等核心功能模块。
|
||
|
||
## 测试架构
|
||
|
||
### 测试工具栈
|
||
- **pytest**: Python测试框架
|
||
- **pytest-asyncio**: 异步测试支持
|
||
- **httpx**: 现代HTTP客户端
|
||
- **pytest-cov**: 测试覆盖率分析
|
||
|
||
### 测试模块结构
|
||
|
||
```
|
||
test/
|
||
├── api/ # API接口测试
|
||
│ ├── test_auth_api.py # 认证API测试
|
||
│ ├── test_system_api.py # 系统API测试
|
||
│ └── test_chat_api.py # 对话API测试
|
||
├── conftest.py # pytest配置和公共fixtures
|
||
├── run_tests.sh # 测试运行脚本
|
||
├── .env.test.example # 测试环境配置示例
|
||
└── README.md # 测试文档
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
### 1. 准备环境
|
||
|
||
```bash
|
||
# 复制测试配置文件
|
||
cp test/.env.test.example test/.env.test
|
||
|
||
# 编辑配置文件,设置测试服务器地址和认证信息
|
||
vim test/.env.test
|
||
```
|
||
|
||
### 2. 运行测试
|
||
|
||
```bash
|
||
# 使用测试脚本(推荐)
|
||
./test/run_tests.sh all
|
||
|
||
# 或直接使用pytest
|
||
uv run pytest test/api/ -v
|
||
```
|
||
|
||
## 测试类型
|
||
|
||
### 认证测试 (test_auth_api.py)
|
||
- ✅ 健康检查(无需认证)
|
||
- ✅ 首次运行状态检查
|
||
- ✅ 登录凭据验证
|
||
- ✅ 用户信息获取
|
||
- ✅ 用户管理权限
|
||
- ✅ 无效令牌处理
|
||
|
||
### 系统测试 (test_system_api.py)
|
||
- ✅ 系统健康检查
|
||
- ✅ 系统信息获取
|
||
- ✅ 配置管理(获取/更新)
|
||
- ✅ 批量配置更新
|
||
- ✅ 系统日志获取
|
||
- ✅ 权限控制验证
|
||
|
||
### 对话测试 (test_chat_api.py)
|
||
- ✅ 智能体列表获取
|
||
- ✅ 简单对话调用
|
||
- ✅ 流式对话测试
|
||
- ✅ 线程管理(创建/更新/删除)
|
||
- ✅ 工具列表获取
|
||
- ✅ 智能体配置管理
|
||
|
||
## 运行命令
|
||
|
||
### 使用测试脚本
|
||
|
||
```bash
|
||
# 所有测试
|
||
./test/run_tests.sh all
|
||
|
||
# 认证测试
|
||
./test/run_tests.sh auth
|
||
|
||
# 系统测试
|
||
./test/run_tests.sh system
|
||
|
||
# 对话测试
|
||
./test/run_tests.sh chat
|
||
|
||
# 快速测试(排除慢速测试)
|
||
./test/run_tests.sh quick
|
||
|
||
# 检查服务器状态
|
||
./test/run_tests.sh check
|
||
```
|
||
|
||
### 使用pytest直接运行
|
||
|
||
```bash
|
||
# 运行所有API测试
|
||
uv run pytest test/api/ -v
|
||
|
||
# 运行特定测试文件
|
||
uv run pytest test/api/test_auth_api.py -v
|
||
|
||
# 运行特定测试方法
|
||
uv run pytest test/api/test_auth_api.py::TestAuthAPI::test_login_valid_credentials -v
|
||
|
||
# 运行带标记的测试
|
||
uv run pytest test/api/ -v -m "auth"
|
||
uv run pytest test/api/ -v -m "not slow"
|
||
|
||
# 生成覆盖率报告
|
||
uv run pytest test/api/ --cov=server --cov=src --cov-report=html
|
||
```
|
||
|
||
## 测试标记
|
||
|
||
测试使用pytest标记进行分类:
|
||
|
||
- `@pytest.mark.auth`: 需要认证的测试
|
||
- `@pytest.mark.slow`: 慢速测试(如流式对话)
|
||
- `@pytest.mark.integration`: 集成测试
|
||
|
||
## 配置说明
|
||
|
||
### 环境变量 (test/.env.test)
|
||
|
||
```bash
|
||
# 测试服务器地址
|
||
TEST_BASE_URL=http://localhost:5050
|
||
|
||
# 测试用户凭据
|
||
TEST_USERNAME=zwj
|
||
TEST_PASSWORD=zwj12138
|
||
```
|
||
|
||
### pytest配置 (pyproject.toml)
|
||
|
||
```toml
|
||
[tool.pytest.ini_options]
|
||
addopts = "-v --tb=short"
|
||
testpaths = ["test"]
|
||
markers = [
|
||
"auth: marks tests that require authentication",
|
||
"slow: marks tests as slow",
|
||
"integration: marks tests as integration tests"
|
||
]
|
||
asyncio_mode = "auto"
|
||
asyncio_default_fixture_loop_scope = "session"
|
||
```
|
||
|
||
## 测试特性
|
||
|
||
### 智能错误处理
|
||
- 自动检测服务器可用性
|
||
- 优雅处理认证失败
|
||
- 权限不足时跳过相关测试
|
||
|
||
### 异步支持
|
||
- 完整的异步测试支持
|
||
- 高效的并发测试执行
|
||
- 会话级别的资源管理
|
||
|
||
### 灵活配置
|
||
- 环境变量配置
|
||
- 可配置的服务器地址
|
||
- 支持不同环境切换
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **连接失败**
|
||
```bash
|
||
# 检查服务器是否运行
|
||
curl http://localhost:5050/api/system/health
|
||
|
||
# 检查Docker服务
|
||
docker-compose ps
|
||
```
|
||
|
||
2. **认证失败**
|
||
- 检查 `test/.env.test` 中的用户凭据
|
||
- 确认用户存在且密码正确
|
||
- 验证用户权限级别
|
||
|
||
3. **依赖问题**
|
||
```bash
|
||
# 重新安装测试依赖
|
||
uv add --group test pytest pytest-asyncio pytest-httpx pytest-cov
|
||
```
|
||
|
||
### 调试选项
|
||
|
||
```bash
|
||
# 详细输出
|
||
uv run pytest test/api/ -v -s
|
||
|
||
# 显示完整错误信息
|
||
uv run pytest test/api/ --tb=long
|
||
|
||
# 停在第一个失败
|
||
uv run pytest test/api/ -x
|
||
|
||
# 运行最后失败的测试
|
||
uv run pytest test/api/ --lf
|
||
```
|
||
|
||
## 扩展开发
|
||
|
||
### 添加新的测试
|
||
|
||
1. 在 `test/api/` 目录下创建新的测试文件
|
||
2. 继承测试基类或直接编写测试函数
|
||
3. 使用现有的fixtures (test_client, auth_headers)
|
||
4. 添加适当的pytest标记
|
||
|
||
### 自定义fixtures
|
||
|
||
在 `test/conftest.py` 中添加新的fixtures:
|
||
|
||
```python
|
||
@pytest_asyncio.fixture
|
||
async def custom_fixture():
|
||
# 初始化资源
|
||
yield resource
|
||
# 清理资源
|
||
```
|
||
|
||
## 持续集成
|
||
|
||
测试脚本可以轻松集成到CI/CD流水线:
|
||
|
||
```yaml
|
||
# GitHub Actions示例
|
||
- name: Run API Tests
|
||
run: |
|
||
cp test/.env.test.example test/.env.test
|
||
./test/run_tests.sh all
|
||
```
|
||
|
||
## 性能考虑
|
||
|
||
- 会话级别的HTTP客户端复用
|
||
- 异步并发执行
|
||
- 智能跳过不可用的测试
|
||
- 最小化资源占用 |