proxy-pool/docs/testing/strategy.md

2.0 KiB
Raw Blame History

测试策略

1. 分层

  • 领域单测状态机、TTL、路由、容量、Fetch 分类和 Extraction 原子性。
  • 契约测试配置、OpenAPI、Protobuf 和 Provider Adapter fixture。
  • 集成测试PostgreSQL 事务、Redis Leader/限流、Outbox 与重建。
  • 端到端测试HTTP、CONNECT、Admin、Distribution 和优雅停机。
  • 负载测试Worker 调度微基准、50k 隧道 soak、集群 100k QPS 场景。

2. 必测不变量

  1. 1,000 个并发预留不突破单 Proxy 最大并发。
  2. 同一 Proxy 在并发 Extraction 中最多出现一次。
  3. allOrNothing 不足时不消耗任何候选。
  4. 连续 4 次 Empty 后 Valid 不切换;连续 5 次只从 A 切到 B。
  5. Error 和 DuplicateOnly 不累计 Empty。
  6. 100 个缺池信号只形成一个合并 Provider reconcile。
  7. 并发 Fetch 不突破 pool.maxSizefetch.maxTotal
  8. TTL safety margin 内不再分配。
  9. Snapshot 版本断档、目标错误或校验和错误不替换当前视图。
  10. 非幂等 HTTP 和已建立 CONNECT 不自动重放。
  11. 所有 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 数。

只有在代表性环境持续达到目标且满足错误率和延迟门槛后,才能把“设计目标” 改为“已验证容量”。