Docker 集成测试策略

本文说明容器化栈中完整 run 生命周期的 Docker-backed 集成测试方案。

目标

  • 证明 API、worker、beat、PostgreSQL、Redis 与本地 OpenAI-compatible test gateway 能正确协同
  • 验证 run 创建、执行、评分、重试与 SSE 更新
  • 保持 fixtures 可确定复现,并可在 CI 和本地调试中复用

快速开始

scripts/tests/run_docker_integration.sh --full-run --fresh --with-beat

该辅助脚本会:

  1. 创建或复用 .env.integration
  2. 启动 postgresredis、本地 OpenAI-compatible gateway、celery-worker 和可选的 celery-beat
  3. 执行 migrations
  4. 注入可复现的 provider 与 dataset fixtures
  5. 执行 pytest -m integration
  6. 将日志和 coverage 收集到 .artifacts/docker-integration/

拓扑

  • postgres
  • redis
  • 本地 OpenAI-compatible test gateway(compose service:fake-openai
  • celery-worker
  • 可选 celery-beat
  • backend test container

场景矩阵

IDScenarioNotes
INT-001smoke run completesprimary completion gate
INT-002provider failure surfaces使用 always-fail model name
INT-003SSE stream integrity受 TestClient 限制,主要由单元测试与浏览器流程覆盖
INT-004retry + beat使用 fail-once models,并验证 beat 驱动的 retry dispatch

Test Gateway 说明

集成测试不依赖外部 API keys。

取而代之,整套栈会注入一个本地 OpenAI-compatible test provider。 应用本身仍走标准 LiteLLM client path;只有 provider endpoint 是本地且确定性的。

Model-name 约定:

  • gpt-3.5-turbo:成功
  • *-fail-once-*:第一次失败,之后成功
  • *-always-fail-*:每次都失败

本地开发者工作流

scripts/tests/run_docker_integration.sh --up --with-beat
scripts/tests/run_docker_integration.sh --test integration
scripts/tests/run_docker_integration.sh --down

排查失败时可结合 docker compose logs backenddocker compose logs celery-worker 和 artifact 目录一起查看。