测试与 Benchmark Provider Adapter
使用协议 Cassette、一致性报告、故障注入、Live Canary、公平 Benchmark 与显式回归门槛。
证据层
Provider 信心来自互补证据层:
- 编码与本地状态 Unit Test;
- 传输行为的确定性 TCP 或 HTTP Cassette;
- 共享不变量的 Conformance Report;
- Timeout、截断、Response Loss 与取消的故障注入;
- CORS、Fetch、WebSocket 与 WebRTC 的固定浏览器测试;
- 覆盖最后外部边界的可选 Live Canary;
- 衡量性能但不证明正确性的 Benchmark。
一次成功 Live Request 几乎不能证明任何失败契约。
协议一致性
验证 Provider Identity、精确 Request Shape、分片 Stream 顺序、Terminal Completion、 Reasoning 分离、Usage 记账、Tool Argument 组装、结构化错误、Retry Safety、脱敏与并发 隔离。
runifold-provider-testkit 生成机器可读验收证据。Support 文档应指出精确 Adapter 与
Model Family 通过了哪些检查。
故障测试
注入 Body Timeout、Connection Reset、Truncated Stream、Malformed JSON、Oversized Frame、 Invalid Event Order、Cancellation Race、Lost Successful Response 与 Downstream Unavailable。断言 Error Kind、Retry Safety、Committed Stream State,并确认诊断不含凭证。
正确性依赖事务、时钟、锁、浏览器或 Object Lock 行为时,使用真实 Disposable Dependency。
Benchmark 契约
衡量 Success Rate、Throughput、Total Latency Percentile、Time to First Model Output、 Empty-output Success、Concurrency 与 Environment Metadata。计时包含 Request Construction、 Signing、Transport、Routing、Queueing、Decoding 与 Validation。
公平比较使用相同 Release Mode、Machine、Rust Version、Runtime、Model、Endpoint、 Request、Limit、Concurrency、Telemetry、Connection Reuse 与 Retry Policy,并交替顺序、 保存所有 Raw Report。
声明策略
不要发布单次运行 Winner。使用重复 Paired Round、Median、Confidence Interval,以及成功率 和延迟。区分 Loopback Framework Overhead 与 Provider Network Behavior。
把声明写成“在这些条件下已验证”,链接 Artifact,并说明尚未验证的部分。
本地验证阶梯
先运行成本最低、确定性最强的层级;真实网络调用只能是显式、带凭据的最后一步:
cargo test -p runifold-providers
cargo test -p runifold-provider-testkit
cargo test -p runifold-providers --test openai_control_http
cargo test --workspace --all-features每个失败的 cassette 都要记录适配器、模型族、协议事件、期望的标准化错误类型、
重试安全判断,以及输出是否已经提交。Live canary 应使用独立的低权限项目、
固定的小请求、硬性费用上限,并用测试名明确提示会访问网络。普通
cargo test 永远不应依赖真实凭据。