# 压力、故障与长跑测试
rs-zero 把 cache/resilience 的可靠性测试分成两类:默认确定性测试和显式长跑测试。
## 默认测试
默认测试随 `cargo test --workspace` 运行,不依赖外部服务,重点验证并发和故障下的不变量,而不是固定性能耗时。
```bash
cargo test --test cache_stress
cargo test --test resilience_stress
```
覆盖范围:
- `CacheAside`:同 key singleflight、多 key 热点、loader 失败、set/delete 故障、负缓存、腐坏值清理。
- `LruCacheStore`:并发 set/get、容量上限、TTL 清理和淘汰计数。
- `TwoLevelCacheStore`:L1/L2 backfill、并发删除、L2 set 失败时不污染 L1。
- `ConcurrencyLimit`:高并发下的 fail-fast 拒绝和 permit 回收。
- `SharedCircuitBreaker`:并发成功/失败、open/half-open、guard drop 和半开试探上限。
- `AdaptiveShedder`:过载拒绝、in-flight 回收、drop/failure 统计。
- `RollingWindow`:bucket 轮转、失败率、drop 率和延迟快照。
- REST/RPC resilience 集成:局部压力下的成功/拒绝状态和低基数 metrics。
## 长跑测试
长跑测试默认 ignored,需要显式运行。短 profile 适合本机或 CI 手动验证:
```bash
RS_ZERO_LONG_TEST_SECONDS=2 \
RS_ZERO_LONG_TEST_TASKS=8 \
RS_ZERO_LONG_TEST_KEYS=16 \
cargo test --test cache_resilience_long_running -- --ignored
```
变量说明:
- `RS_ZERO_LONG_TEST_SECONDS`:每个长跑用例的目标运行秒数,默认 `5`。
- `RS_ZERO_LONG_TEST_TASKS`:并发任务数,默认 `16`。
- `RS_ZERO_LONG_TEST_KEYS`:cache key 空间大小,默认 `64`。
手动加压时可以逐步增加 seconds/tasks/keys。测试只断言状态不变量,例如 loader error 计数、LRU 容量、breaker/shedder in-flight 回收,不使用机器相关的固定耗时 SLA。
## 排障建议
- 如果默认压力测试失败,先看断言中的 snapshot、stats 和错误文本;这些测试会尽量输出 cache/resilience 的最终状态。
- 如果长跑测试偶发失败,先用短 profile 复现,再单独运行失败的 ignored 用例。
- 如果修改了 cache/resilience 生产代码,至少运行默认 workspace、目标压力测试、短 profile 长跑测试和文档链接检查。