分离单元测试和集成测试
集成测试速度较慢,并且需要 API 凭证,因此请将它们与单元测试分开。这样可以让你在每次变更时运行快速的单元测试,并将集成测试留给 CI 或部署前检查。 使用 pytest markers 标记集成测试:管理 API 密钥
集成测试需要真实 API 凭证。请从环境变量加载凭证,避免将密钥提交到源代码管理系统。 使用conftest.py fixture 验证所需密钥是否可用:
.env 文件中,并使用 python-dotenv 加载:
.env
conftest.py
断言结构,而不是内容
LLM 响应在不同运行之间会变化。请不要断言精确的输出字符串,而是验证响应的结构属性:消息类型、工具调用名称、参数形状和消息数量。降低成本和延迟
调用 LLM API 的集成测试会产生真实成本。以下做法有助于让测试套件保持快速且成本可控:- 使用较小的模型:对于只需要验证工具调用和响应结构的测试,使用
gemini-3.1-flash-lite或等效模型。 - 设置
maxTokens:限制响应长度,避免生成较长且昂贵的补全。 - 限制测试范围:每个测试只测试一种行为。如果单轮测试足够,请避免串联多次 LLM 调用的端到端场景。
- 选择性运行:使用上文中的测试分离方法,只在 CI 或部署前运行集成测试,而不是在每次保存文件时运行。
记录和重放 HTTP 调用
对于在 CI 中频繁运行的测试,你可以在首次运行时记录 HTTP 交互,并在后续运行中重放它们,而无需进行真实 API 调用。这样可以在初始记录之后消除成本和延迟。vcrpy 会将 HTTP 请求/响应对记录到 YAML “cassette” 文件中。pytest-recording 插件会将此能力集成到 pytest 中。
设置 conftest.py,从 cassette 中过滤敏感信息:
conftest.py
vcr marker:
--record-mode=once 选项会在首次运行时记录 HTTP 交互,并在后续运行中重放这些交互。vcr marker 装饰测试:
tests/cassettes/ 中生成 cassette 文件。后续运行会重放已记录的响应。
后续步骤
了解如何在 Evals 中使用确定性匹配或 LLM-as-judge 评估器评估 Agent 执行轨迹。Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

