Skip to content

Latest commit

 

History

History
257 lines (224 loc) · 7.1 KB

File metadata and controls

257 lines (224 loc) · 7.1 KB

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/greenlet.py)

待补充测试

以下模块需要补充测试:

  • ⚠️ 工具函数 (utils/)
  • ⚠️ 异常处理 (exceptions/)
  • ⚠️ 文件事件处理 (cache/FileEventHandler)
  • ⚠️ WSGI 请求处理器 (handlers/WSGIRequestHandler)
  • ⚠️ 集成测试

注意事项

  1. SQLite 资源警告:TreeCache 测试中会出现 SQLite 连接未关闭的警告,这是正常的,因为测试创建了多个缓存实例
  2. 测试隔离:每个测试方法独立运行,确保测试结果不受其他测试影响
  3. Mock 使用:部分测试使用 unittest.mock 模拟依赖,确保测试的独立性

持续改进

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

  • 在提交代码前运行测试
  • 在 CI/CD 流程中集成测试
  • 目标测试覆盖率:80%+