Litefs 单元测试文档
Generated by TRAE SOLO at 2026-03-27
测试概述
Litefs 项目使用 Python unittest 框架编写了全面的单元测试,覆盖了项目的核心功能模块。
测试文件结构
tests/
├── unit/
│ ├── test_basic.py # 基本功能测试
│ ├── test_cache.py # 缓存模块完整测试
│ ├── test_core.py # 核心模块测试
│ ├── test_environ.py # 环境变量测试
│ ├── test_form.py # 表单解析测试
│ ├── test_max_request_size.py # 请求大小限制测试
│ ├── test_memorycache.py # 内存缓存测试
│ ├── test_middleware.py # 中间件测试
│ ├── test_session.py # 会话管理测试
│ └── test_treecache.py # 树缓存测试
└── run_tests.py # 测试运行器
测试覆盖范围
1. 核心模块 (test_core.py)
✅
make_config函数测试✅
Litefs初始化测试✅ 中间件管理测试
✅ WSGI 接口测试
2. 缓存模块 (test_cache.py)
✅
MemoryCache完整测试初始化、put、get、delete
LRU 淘汰策略
更新已存在的键
字符串表示
✅
TreeCache完整测试初始化、put、get、delete
通配符删除
过期机制
自动清理
复杂数据类型
路径风格键
✅
LiteFile完整测试初始化
无压缩处理器
gzip 压缩处理器
deflate 压缩处理器
304 Not Modified 响应
ETag 匹配
3. 会话模块 (test_session.py)
✅
Session初始化测试✅ 字符串表示测试
✅ data 属性测试
✅ 数据修改测试
✅ 数据删除测试
✅ 数据更新测试
✅ 数据清空测试
✅ 多个会话测试
✅ 复杂数据类型测试
4. 中间件模块 (test_middleware.py)
✅
MiddlewareManager测试添加中间件
移除中间件
清空中间件
获取中间件实例
带参数的中间件
✅
LoggingMiddleware测试请求处理
响应处理
✅
CORSMiddleware测试OPTIONS 请求处理
GET 请求处理
响应处理
来源验证
✅
SecurityMiddleware测试响应处理
安全响应头验证
✅
RateLimitMiddleware测试限流范围内请求
超过限流请求
✅
ThrottleMiddleware测试时间间隔内请求
超过时间间隔请求
✅ Litefs 中间件集成测试
添加中间件
移除中间件
清空中间件
链式添加中间件
5. 环境变量 (test_environ.py)
✅ 基本环境变量测试
✅ 查询字符串测试
✅ URL 编码路径测试
✅ Content-Length 测试
✅ Content-Type 测试
✅ 自定义头部测试
✅ Connection 头部测试
✅ User-Agent 头部测试
✅ 空请求测试
✅ 请求过大测试
✅ SCRIPT_NAME 生成测试
✅ 索引页测试
✅ 同名多个头部测试
✅ HTTP 方法测试 (GET, POST, PUT, DELETE)
6. 表单解析 (test_form.py)
✅ 简单表单测试
✅ URL 编码表单测试
✅ 数组表示法测试
✅ 字典表示法测试
✅ 混合表示法测试
✅ 空值测试
✅ 无值键测试
✅ 特殊字符测试
✅ 相同键测试
✅ 空查询字符串测试
✅ 复杂表单测试
7. 请求大小限制 (test_max_request_size.py)
✅ 默认配置测试
✅ 自定义配置测试
✅ HTTPServer 默认值测试
✅ HTTPServer 自定义值测试
✅ 小请求接受测试
✅ 大请求拒绝测试
✅ 边界请求测试
✅ 无 Content-Length 测试
✅ 零 Content-Length 测试
8. 基本功能 (test_basic.py)
✅ 版本号测试
✅ make_config 函数测试
✅ make_logger 函数测试
✅ parse_form 函数测试
✅ 模块导入测试
9. 内存缓存 (test_memorycache.py)
✅ 初始化测试
✅ put 方法测试
✅ get 方法测试
✅ 获取不存在的键测试
✅ delete 方法测试
✅ 删除不存在的键测试
✅ 超过最大大小测试
✅ LRU 淘汰策略测试
✅ 更新已存在的键测试
✅ 字符串表示测试
✅ 访问更新 LRU 测试
10. 树缓存 (test_treecache.py)
✅ 初始化测试
✅ put 方法测试
✅ get 方法测试
✅ 获取不存在的键测试
✅ delete 方法测试
✅ 通配符删除测试
✅ 过期机制测试
✅ 自动清理测试
✅ 更新已存在的键测试
✅ 复杂数据类型测试
✅ 路径风格键测试
✅ 嵌套路径删除测试
✅ 长时间不过期测试
运行测试
运行所有测试
python tests/run_tests.py
运行单个测试文件
python tests/unit/test_core.py
python tests/unit/test_cache.py
python tests/unit/test_session.py
python tests/unit/test_middleware.py
python tests/unit/test_environ.py
python tests/unit/test_form.py
python tests/unit/test_max_request_size.py
python tests/unit/test_basic.py
python tests/unit/test_memorycache.py
python tests/unit/test_treecache.py
运行特定测试类
python -m unittest tests.unit.test_core.TestMakeConfig
运行特定测试方法
python -m unittest tests.unit.test_core.TestMakeConfig.test_default_config
测试统计
测试文件 |
测试数量 |
状态 |
|---|---|---|
test_basic.py |
5 |
✅ 通过 |
test_cache.py |
15 |
✅ 通过 |
test_core.py |
12 |
✅ 通过 |
test_environ.py |
15 |
✅ 通过 |
test_form.py |
11 |
✅ 通过 |
test_max_request_size.py |
9 |
✅ 通过 |
test_memorycache.py |
11 |
✅ 通过 |
test_middleware.py |
20 |
✅ 通过 |
test_session.py |
9 |
✅ 通过 |
test_treecache.py |
13 |
✅ 通过 |
总计 |
120 |
✅ 全部通过 |
测试最佳实践
使用 setUp 方法:每个测试类都使用
setUp方法初始化测试环境清晰的测试名称:测试方法名称清晰描述测试内容
完整的断言:使用多种断言方法验证预期行为
边界测试:测试边界条件和异常情况
独立性:每个测试方法独立运行,不依赖其他测试
测试覆盖率
当前测试覆盖了以下核心模块:
✅ 核心功能 (core.py)
✅ 缓存系统 (cache/)
✅ 会话管理 (session/)
✅ 中间件系统 (middleware/)
✅ 请求处理 (handlers/request.py)
✅ HTTP 服务器 (server/http_server.py)
待补充测试
以下模块需要补充测试:
⚠️ 工具函数 (utils/)
⚠️ 异常处理 (exceptions/)
⚠️ 文件事件处理 (cache/FileEventHandler)
⚠️ WSGI 请求处理器 (handlers/WSGIRequestHandler)
⚠️ 集成测试
注意事项
SQLite 资源警告:TreeCache 测试中会出现 SQLite 连接未关闭的警告,这是正常的,因为测试创建了多个缓存实例
测试隔离:每个测试方法独立运行,确保测试结果不受其他测试影响
Mock 使用:部分测试使用
unittest.mock模拟依赖,确保测试的独立性
持续改进
建议定期运行测试以确保代码质量:
在提交代码前运行测试
在 CI/CD 流程中集成测试
目标测试覆盖率:80%+