ForcePilot/test/README.md
Wenjie Zhang 2a3e18b444 test(tests): 添加全面的API接口测试套件
- 新增认证API测试,覆盖登录、权限验证、用户管理等关键流程
- 新增对话API测试,包含智能体调用、线程管理、工具获取及配置查询
- 新增系统API测试,涵盖系统健康检查、信息查询及配置管理权限控制
- 配置pytest支持异步测试、标记分类及详细输出
- 添加测试环境配置示例文件 .env.test.example
- 新增测试用例README文档,说明测试架构及运行方法
- 优化Makefile,添加格式化差异检查任务 format_diff
- 更新.gitignore,支持忽略测试环境配置文件 .env.test
2025-09-20 22:53:37 +08:00

252 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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客户端复用
- 异步并发执行
- 智能跳过不可用的测试
- 最小化资源占用