分离单元测试和集成测试
集成测试较慢且需要 API 凭证,因此应将其与单元测试分开。这样您可以在每次更改时快速运行单元测试,而将集成测试保留用于 CI 或部署前检查。 使用 pytest 标记来标记集成测试:管理 API 密钥
集成测试需要真实的 API 凭证。从环境变量加载它们,以确保密钥不会进入源代码控制。 使用conftest.py fixture 来验证所需密钥是否可用:
.env 文件中,并使用 python-dotenv 加载它们:
.env
conftest.py
断言结构,而非内容
LLM 响应在每次运行时都不同。不要断言精确的输出字符串,而是验证响应的结构属性:消息类型、工具调用名称、参数形状和消息数量。降低成本和延迟
调用 LLM API 的集成测试会产生实际成本。以下一些实践有助于保持测试套件快速且经济:- 使用较小的模型:对于仅需验证工具调用和响应结构的测试,使用
gemini-3.1-flash-lite-preview或同等模型。 - 设置
maxTokens:限制响应长度,以避免冗长且昂贵的补全。 - 限制测试范围:每个测试只测试一种行为。当单轮测试足够时,避免链接多个 LLM 调用的端到端场景。
- 选择性运行:使用上述的测试分离方法,仅在 CI 或部署前运行集成测试,而不是在每次保存文件时运行。
记录和重放 HTTP 调用
对于在 CI 中频繁运行的测试,您可以在第一次运行时记录 HTTP 交互,并在后续运行中重放它们,而无需进行真实的 API 调用。这消除了初始记录后的成本和延迟。vcrpy 将 HTTP 请求/响应对记录到 YAML “盒式文件”中。pytest-recording 插件将其与 pytest 集成。
设置您的 conftest.py 以从盒式文件中过滤敏感信息:
conftest.py
vcr 标记:
--record-mode=once 选项在第一次运行时记录 HTTP 交互,并在后续运行中重放它们。vcr 标记装饰您的测试:
tests/cassettes/ 中生成一个盒式文件。后续运行会重放记录的响应。
后续步骤
了解如何在 Evals 中使用确定性匹配或 LLM 作为评判的评估器来评估智能体轨迹。将这些文档通过 MCP 连接到 Claude、VSCode 等,以获取实时答案。

