分离单元测试和集成测试
集成测试速度较慢且需要 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 “cassette” 文件中。pytest-recording 插件将其与 pytest 集成。
在 conftest.py 中设置以过滤 cassette 文件中的敏感信息:
conftest.py
vcr 标记:
--record-mode=once 选项会在第一次运行时记录 HTTP 交互,并在后续运行时重放它们。vcr 标记装饰您的测试:
tests/cassettes/ 目录下生成一个 cassette 文件。后续运行将重放记录的响应。
后续步骤
了解如何使用确定性匹配或 LLM-as-judge 评估器在 Evals 中评估智能体轨迹。Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

