2.7 KiB
2.7 KiB
测试策略
1. 分层
- 领域单测:状态机、TTL、路由、容量、Fetch 分类和 Extraction 原子性。
- 契约测试:配置、OpenAPI、Protobuf 和 Provider Adapter fixture。
- 集成测试:PostgreSQL 事务、Redis Leader/限流、Outbox 与重建。
- 端到端测试:HTTP、CONNECT、Admin、Distribution 和优雅停机。
- 负载测试:Worker 调度微基准、50k 隧道 soak、集群 100k QPS 场景。
2. 必测不变量
- 1,000 个并发预留不突破单 Proxy 最大并发。
- 同一 Proxy 在并发 Extraction 中最多出现一次。
allOrNothing不足时不消耗任何候选。- 连续 4 次 Empty 后 Valid 不切换;连续 5 次只从 A 切到 B。
- Error 和 DuplicateOnly 不累计 Empty。
- 100 个缺池信号只形成一个合并 Provider reconcile。
- 并发 Fetch 不突破
pool.maxSize与fetch.maxTotal。 - TTL safety margin 内不再分配。
- Snapshot 版本断档、目标错误或校验和错误不替换当前视图。
- 非幂等 HTTP 和已建立 CONNECT 不自动重放。
- 所有 Upstream 不可用时严格执行显式策略。
3. 基础质量门禁
gofmt -l .
go vet ./...
go test ./...
go test -race ./internal/...
go build ./...
单条测试命令超时 60 秒。依赖真实等待的用例必须改为 fake clock;集成和 soak 测试单独标记,不混入快速单测。
4. 100k QPS 验收
测试报告必须记录:
- CPU、内存、内核、网卡、文件描述符和 conntrack 配置。
- Worker 数量、故障域、目标利用率和负载均衡算法。
- HTTP/CONNECT 比例、keep-alive、请求/响应大小、上游 RTT 与失败率。
- Proxy 总数、每 Proxy 容量、Routing 数和 Snapshot 更新频率。
- 持续时间、P50/P95/P99、成功率、重试率、GC、RSS 和 goroutine 数。
只有在代表性环境持续达到目标且满足错误率和延迟门槛后,才能把“设计目标” 改为“已验证容量”。
5. 当前本地微基准
2026-07-28,Windows/amd64、Intel Core Ultra 7 155H:
BenchmarkAcquire100kIndexed-22 3553592 640.0 ns/op 256 B/op 2 allocs/op
BenchmarkStoreApply100k-22 1 472.7 ms/op 654 MB/op 2700642 allocs/op
Acquire 已使用 scheme/upstream/tag 索引,结果只代表本地选择和容量预留。
Store.Apply 属于冷路径且当前内存开销较高;运行态为防止旧快照在途连接超配,
暂不自动回收曾出现过的 Proxy ID。后续需要基于 RCU/引用计数定义安全回收点。
这些数据不包含网络、认证、Provider、存储或多 Worker 协调,不能作为
100k QPS 端到端验收结论。