Files
sharp-basic/test/NetServer.Test/README.md
T
2025-12-30 09:17:25 +08:00

313 lines
7.2 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.
# NetServer.Test - 测试和示例项目
这个项目包含了 Sharp.NetServer 框架的完整测试和使用示例。
## 📁 项目结构
```
NetServer.Test/
├── UnitTests/ # 单元测试
│ ├── RouteTableTests.cs # 路由表测试
│ ├── MiddlewarePipelineTests.cs # 中间件管道测试
│ └── MiddlewareTests.cs # 中间件功能测试
│
├── IntegrationTests/ # 集成测试
│ └── ServerIntegrationTests.cs # 服务器集成测试
│
├── Examples/ # 完整示例
│ ├── Controllers/
│ │ ├── UserController.cs # 用户管理示例
│ │ ├── ProductController.cs # 产品管理示例
│ │ └── AuthController.cs # 认证示例
│ └── ExampleProgram.cs # 示例程序入口
│
└── NetServer.Test.csproj # 项目配置
```
## 🚀 运行测试
### 运行所有测试
```bash
cd test/NetServer.Test
dotnet test
```
### 运行特定测试类
```bash
dotnet test --filter "FullyQualifiedName~RouteTableTests"
dotnet test --filter "FullyQualifiedName~MiddlewarePipelineTests"
dotnet test --filter "FullyQualifiedName~ServerIntegrationTests"
```
## 🎯 运行示例程序
### 方式一:直接运行
```bash
cd test/NetServer.Test
dotnet run
# 或指定端口
dotnet run 8080
```
### 方式二:编译后运行
```bash
dotnet build
cd bin/Debug/net8.0
./NetServer.Test.exe # Windows
./NetServer.Test # Linux/Mac
```
## 📚 测试说明
### 1. 单元测试 (UnitTests/)
#### RouteTableTests.cs
测试路由系统的核心功能:
- ✅ 路由注册和发现
- ✅ 路由匹配(包括路径参数)
- ✅ 特性解析(授权、限流、缓存等)
- ✅ 无效路由处理
#### MiddlewarePipelineTests.cs
测试中间件管道:
- ✅ 中间件执行顺序
- ✅ 多个中间件的链式调用
- ✅ 中间件短路机制
### 2. 集成测试 (IntegrationTests/)
#### ServerIntegrationTests.cs
测试完整的服务器功能:
- ✅ HTTP GET/POST 请求处理
- ✅ 查询参数解析
- ✅ 404 错误处理
- ✅ CORS 响应头
- ✅ 并发请求处理
**注意**: 集成测试会启动一个真实的 HTTP 服务器,监听端口 15000。
## 💡 示例说明
### 1. 用户管理示例 (UserController.cs)
展示了完整的 CRUD 操作:
- `GET /api/users` - 获取所有用户(需要 Admin 角色)
- `GET /api/users/{id}` - 获取单个用户(带缓存)
- `POST /api/users` - 创建用户(需要 Admin 角色)
- `PUT /api/users/{id}` - 更新用户
- `DELETE /api/users/{id}` - 删除用户(需要 Admin 角色)
- `GET /api/users/search` - 搜索用户(允许匿名)
**特性展示**:
- 角色授权 (`[Authorize(Roles = "Admin")]`)
- 限流保护 (`[RateLimit]`)
- 响应缓存 (`[ResponseCache]`)
- 允许匿名访问 (`[AllowAnonymous]`)
### 2. 产品管理示例 (ProductController.cs)
展示了产品管理功能:
- `GET /api/products` - 获取所有产品(公开接口,带缓存和限流)
- `GET /api/products/{id}` - 获取产品详情(带缓存)
- `POST /api/products` - 创建产品(需要 Admin)
- `PATCH /api/products/{id}/stock` - 更新库存(需要认证)
- `DELETE /api/products/{id}` - 删除产品(需要 Admin)
- `GET /api/products/search` - 搜索产品(支持价格范围)
**特性展示**:
- 查询参数处理
- 部分更新 (PATCH)
- 复杂搜索条件
- 响应缓存策略
### 3. 认证示例 (AuthController.cs)
展示了完整的认证流程:
- `POST /api/auth/login` - 用户登录
- `POST /api/auth/logout` - 用户登出
- `GET /api/auth/me` - 获取当前用户信息
- `POST /api/auth/change-password` - 修改密码
- `POST /api/auth/refresh` - 刷新 Token
**特性展示**:
- 简单的 Token 认证实现
- Cookie 操作
- 密码验证
- 防暴力破解限流
### 4. 完整示例程序 (ExampleProgram.cs)
一个完整的可运行示例,包含:
- ✅ 服务器配置和启动
- ✅ CORS 配置
- ✅ 认证授权配置
- ✅ 限流和缓存配置
- ✅ 自定义中间件(请求计时)
- ✅ 日志配置
- ✅ 依赖注入
## 🔧 使用示例
### 启动服务器
```bash
cd test/NetServer.Test
dotnet run
```
服务器将在 `http://localhost:5000/` 启动。
### 测试 API
#### 1. 登录获取 Token
```bash
curl -X POST http://localhost:5000/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
```
响应示例:
```json
{
"success": true,
"data": {
"token": "YWRtaW46QWRtaW46MTczNDU2Nzg5MA==",
"username": "admin",
"role": "Admin",
"expiresIn": 3600
},
"message": "登录成功",
"timestamp": 1734567890123
}
```
#### 2. 获取所有产品(无需认证)
```bash
curl http://localhost:5000/api/products
```
#### 3. 搜索用户(无需认证)
```bash
curl "http://localhost:5000/api/users/search?keyword=张"
```
#### 4. 获取用户详情(需要认证)
```bash
curl http://localhost:5000/api/users/1 \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
```
或使用 Cookie 认证:
```bash
curl http://localhost:5000/api/users/1 \
-b "auth_token=YOUR_TOKEN_HERE"
```
#### 5. 创建产品(需要 Admin 角色)
```bash
curl -X POST http://localhost:5000/api/products \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{"name":"新产品","price":299,"stock":50,"category":"测试"}'
```
#### 6. 更新库存(需要认证)
```bash
curl -X PATCH http://localhost:5000/api/products/1/stock \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-d '{"quantity":100}'
```
## 🔑 测试账号
- **管理员**: `admin` / `admin123`
- **普通用户**: `user` / `user123`
## 📊 功能特性展示
### 认证授权
- ✅ 基于 Token 的认证
- ✅ Cookie 支持
- ✅ 角色验证
- ✅ 权限验证
### 限流
- ✅ 基于 IP 的限流
- ✅ 基于用户的限流
- ✅ 防暴力破解
### 缓存
- ✅ 内存响应缓存
- ✅ 基于查询参数的缓存变化
### CORS
- ✅ 跨域资源共享
- ✅ 预检请求处理
### 日志
- ✅ 请求日志记录
- ✅ 错误日志记录
- ✅ 性能监控(慢请求警告)
## 🎓 学习路径
1. **初学者**: 从 `ExampleProgram.cs` 开始,了解基本配置
2. **进阶**: 查看各个 Controller,学习如何使用特性
3. **高级**: 阅读单元测试和集成测试,深入理解框架原理
## 📝 注意事项
1. **端口占用**: 确保 5000 端口未被占用,或通过参数指定其他端口
2. **管理员权限**: Windows 上监听非 localhost 地址可能需要管理员权限
3. **Token 安全**: 示例中的 Token 实现仅用于演示,生产环境应使用 JWT
4. **数据持久化**: 示例使用内存存储,重启后数据会丢失
## 🚧 扩展建议
基于这些示例,你可以:
- 添加数据库支持(Entity Framework Core)
- 实现真正的 JWT 认证
- 添加 Swagger/OpenAPI 文档
- 实现文件上传功能
- 添加 WebSocket 支持
- 集成分布式缓存(Redis)
- 实现更复杂的业务逻辑
## 📖 相关文档
- [框架 README](../../src/Sharp/NetServer/README.md)
- [架构文档](../../src/Sharp/NetServer/ARCHITECTURE.md)