Skip to content

Latest commit

 

History

History
143 lines (93 loc) · 3.42 KB

File metadata and controls

143 lines (93 loc) · 3.42 KB

E2E 测试指南

基于真实厂商 API 的端到端测试运行指南。 最后更新:2026-04-22

返回文档索引


概述

TokenRouter 的 E2E 测试在进程内通过 httptest 组装生产级路由链:

AuthMiddleware → 可选 RateLimitMiddleware → server.ChatPipeline.Handle → DeepSeek API

测试使用临时 SQLite 数据库 seed 用户、API Key、模型定价和请求记录表,直接对接真实 DeepSeek API,验证完整 pipeline 在真实网络环境下的行为。与 tests/integration/ 中的 mock-based 测试互补:mock 测试保证逻辑正确性,E2E 测试保证外部兼容性和生产中间件链路。

E2E 测试分为两个 suite:

Suite Build Tag 请求数 用途 运行频率
Fast e2e 2-3 开发阶段快速验证核心场景 随时
Full e2e_full 10+ 上线前全量兼容性验证 发布前

日常 go test ./... 不会运行 E2E 测试(build tag 隔离),不影响开发效率。


前置条件

  • Go 1.22+
  • 有效的 DeepSeek API Key

环境配置

E2E 测试通过环境变量读取配置:

# 必需
export DEEPSEEK_API_KEY="sk-xxx"

也可以在项目根目录 .env 文件中配置(会被 godotenv 读取)。


运行 Fast Suite

Fast Suite 覆盖三个核心场景,每次运行消耗 2-3 个 API 请求:

make test-e2e-fast

等价命令:

go test -tags=e2e ./tests/e2e/...

覆盖场景:

  • 非流式请求返回完整 JSON
  • 流式 SSE 请求返回完整 data 流
  • 带 tools 的请求被上游正确接受

运行 Full Suite

Full Suite 在上线前运行,覆盖边界和并发场景:

make test-e2e-full

等价命令:

go test -tags=e2e_full ./tests/e2e/...

覆盖场景:

  • 长上下文消息(多轮对话)
  • 特殊字符 / Unicode
  • 并发请求稳定性
  • API Key 认证:缺失、无效、已撤销、合法 key
  • 隔离限流:小限额下同一认证用户触发 429
  • Dedup 对错误状态码的保持
  • DeepSeek V4 Flash / V4 Pro(推理模型)基础兼容
  • JSON response_format 和采样参数透传
  • Tool call 两轮 round-trip
  • 无效 model 的错误处理
  • 空 messages 边界行为

断言策略

E2E 测试只验证响应结构,不验证内容

验证项 原因
choices 存在且长度 >= 1 保证响应格式正确
message.content 为非空字符串 保证模型返回了有效内容
usage.prompt_tokens > 0 保证计费数据可用
SSE 流包含 data: [DONE] 保证流式协议完整

不验证内容的原因:大模型对相同输入可能返回不同内容,内容断言会导致 flaky test。


故障排查

E2E 测试被跳过

helper_test.go:XX: DEEPSEEK_API_KEY not set, skipping e2e test

原因:环境变量未设置。
解决export DEEPSEEK_API_KEY=sk-xxx

502 Bad Gateway

原因:上游 DeepSeek API 暂时不可用或网络问题。
解决:检查网络连接,稍后重试。

429 Too Many Requests

原因:DeepSeek API 速率限制。
解决:降低并发数,或等待一段时间后重试。Fast Suite 通常不会触发。


下一步