-
Notifications
You must be signed in to change notification settings - Fork 0
Testing Strategy
中文 | English
维护版本:v0.51.2 | 最后更新:2026-07-06
EnerOS 采用多层测试策略,覆盖单元 / 集成 / e2e / 混沌 / fuzz / proptest / 协议一致性 7 个层次。v0.51.2 测试规模:7700+ tests / 0 failed / 78 ignored / 0 clippy warning / cargo deny 全绿。本页为策略摘要;完整测试指南请参阅主仓库 docs/developer-guide.md §v0.51.0。
┌──────────┐
│ Fuzz │ 4 协议 × 24h
└──────────┘
┌───────────────────┐
│ 混沌 Chaos │ 5 类故障注入
└───────────────────┘
┌─────────────────────────────┐
│ e2e 端到端 (tests/e2e) │ HTTP API 全链路
└─────────────────────────────┘
┌─────────────────────────────────────┐
│ 集成测试(跨 crate) │
└─────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 单元测试(crate 内 tests/) │ ~7000+
└─────────────────────────────────────────────┘
每个 crate 的 src/ 内 #[cfg(test)] mod tests + tests/ 目录。
cargo test --workspacev0.51.2 规模:7700+ tests passed / 0 failed / 78 ignored。
跨 crate 集成测试位于 tests/ 目录:
| 目录 | 用途 |
|---|---|
tests/e2e/ |
HTTP API 端到端 |
tests/protocol_conformance/ |
协议一致性(7 协议 275 测试) |
tests/llm_verify/ |
LLM 100 场景验证(v0.50.1+) |
tests/llm_verify_semantic_20/ |
LLM 20 轮语义验证(v0.50.2+) |
tests/chaos/ |
混沌测试 |
tests/integration/ |
跨 crate 模块边界测试 |
tests/e2e/ 使用真实 eneros-api 实例 + HTTP 客户端,覆盖:
- /health 健康检查
- /api/v1/demo/* 演示 API
- /api/v1/devices/* 设备管理
- /api/v1/timeseries/* 时序查询
- /api/v1/analysis/* 分析计算
- /api/v1/ops/* 运维端点
tests/chaos/ 注入 5 类故障:
| 故障类型 | 注入方式 | 验证 |
|---|---|---|
| 网络分区 | iptables 阻断 | HA 故障切换 |
| 进程崩溃 | kill -9 | 守护进程重启 |
| 磁盘满 | tmpfs 填充 | 优雅降级 |
| CPU 饱和 | stress-ng | 调度优先级生效 |
| 内存压力 | cgroups 限制 | OOM 不影响实时域 |
fuzz/ 目录提供 4 个 fuzz 目标,使用 libFuzzer 引擎:
| 目标 | 协议 |
|---|---|
fuzz_iec104 |
IEC 104 |
fuzz_iec103 |
IEC 103 |
fuzz_dlt698 |
DL/T 698 |
fuzz_pmu_c37118 |
PMU C37.118 |
# Smoke 测试(60s)
cargo fuzz run fuzz_iec104 -- -max_total_time=60
# 长时运行(24h)
cargo fuzz run fuzz_iec104 -- -max_total_time=86400Windows 平台 libFuzzer 链接问题(LNK1104),需在 Linux / WSL2 环境运行。
5 个 crate × 256 cases = 30720 verifications(v0.51.1 已扩到 1024 cases = 30720 verifications,0 violations):
| crate | 属性数 | 用途 |
|---|---|---|
| eneros-powerflow | 6 | 潮流求解收敛性 + 守恒律 |
| eneros-topology | 5 | 拓扑搜索不变式 |
| eneros-linalg | 6 | 矩阵运算性质 |
| eneros-timeseries | 7 | 时序聚合无丢点 |
| eneros-constraint | 6 | 约束检查幂等性 |
eneros.toml [quality].proptest_cases = 256 配置每个属性的用例数。
tests/protocol_conformance/ 提供 7 协议 275 测试,详见本 wiki 协议支持 页。
benches/ 目录使用 criterion:
cargo bench --workspacebenches/baseline.json 保存性能基线,PR 不应导致关键路径性能回退超过 5%。
| 门禁 | 命令 | 失败处理 |
|---|---|---|
| 格式化 | cargo fmt --all -- --check |
阻塞 |
| Lint | cargo clippy --workspace --all-targets -- -D warnings |
阻塞 |
| 构建 | cargo build --workspace |
阻塞 |
| 测试 | cargo test --workspace |
阻塞 |
| 文档 | cargo doc --workspace --no-deps |
警告 |
| 依赖 | cargo deny check |
阻塞 |
| 覆盖率 | llvm-cov | 阈值检查 |
- Fuzz 60s smoke 与 24h 长时运行待 Linux/WSL2 环境验证
- proptest 仅 5 crate 覆盖,待扩展到全部 L0/L1 crate
- 67 个 unwrap/expect 残留于非测试代码(v0.51.0 已移除 88 个)
- WCET 测试需
--test-threads=1(避免噪声) -
test_wcet_over_budget_under_2x_audit_sink_records为已知 flaky(基于时序)
- 主仓库 docs/developer-guide.md §v0.51.0 — 测试策略详解
- 本 wiki 开发工作流 — 质量门禁与调试
- 本 wiki 协议支持 — 协议一致性测试矩阵
- 本 wiki SafetyGateway — WCET 框架
- 主仓库 benches/ — 性能基准
- 主仓库 fuzz/ — Fuzz 目标
- 主仓库 tests/ — 集成测试
EnerOS Wiki | v0.51.2