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

✅ 全部通过

测试最佳实践

  1. 使用 setUp 方法:每个测试类都使用 setUp 方法初始化测试环境

  2. 清晰的测试名称:测试方法名称清晰描述测试内容

  3. 完整的断言:使用多种断言方法验证预期行为

  4. 边界测试:测试边界条件和异常情况

  5. 独立性:每个测试方法独立运行,不依赖其他测试

测试覆盖率

当前测试覆盖了以下核心模块:

  • ✅ 核心功能 (core.py)

  • ✅ 缓存系统 (cache/)

  • ✅ 会话管理 (session/)

  • ✅ 中间件系统 (middleware/)

  • ✅ 请求处理 (handlers/request.py)

  • ✅ HTTP 服务器 (server/http_server.py)

待补充测试

以下模块需要补充测试:

  • ⚠️ 工具函数 (utils/)

  • ⚠️ 异常处理 (exceptions/)

  • ⚠️ 文件事件处理 (cache/FileEventHandler)

  • ⚠️ WSGI 请求处理器 (handlers/WSGIRequestHandler)

  • ⚠️ 集成测试

注意事项

  1. SQLite 资源警告:TreeCache 测试中会出现 SQLite 连接未关闭的警告,这是正常的,因为测试创建了多个缓存实例

  2. 测试隔离:每个测试方法独立运行,确保测试结果不受其他测试影响

  3. Mock 使用:部分测试使用 unittest.mock 模拟依赖,确保测试的独立性

持续改进

建议定期运行测试以确保代码质量:

  • 在提交代码前运行测试

  • 在 CI/CD 流程中集成测试

  • 目标测试覆盖率:80%+