Skip to main content
Open on GitHub

为集成添加标准测试

在创建自定义类(无论是自己使用还是发布到 LangChain 集成中)时,添加标准测试以确保其按预期工作非常重要。本指南将展示如何为每种集成类型添加标准测试。

设置

首先,让我们安装 2 个依赖项:

  • langchain-core 将定义我们要导入以定义自定义工具的接口。
  • langchain-tests 将提供我们要使用的标准测试,以及运行它们所需的 pytest 插件。建议固定到最新版本:
note

由于 langchain-tests 新版本中添加的测试可能会破坏您的 CI/CD 管道,因此我们建议固定 langchain-tests 的版本以避免意外更改。

如果您已按照上一指南进行操作,应该已经安装了这些依赖项!

poetry add langchain-core
poetry add --group test langchain-tests==<latest_version>
poetry install --with test

添加和配置标准测试

langchain-tests 包中有 2 个命名空间:

  • 单元测试langchain_tests.unit_tests):设计用于独立测试组件,无需访问外部服务。
  • 集成测试langchain_tests.integration_tests):设计用于测试组件,允许访问外部服务(特别是组件旨在交互的外部服务)。

这两种测试都实现为pytest 基于类的测试套件

通过继承每种标准测试类型的基类(如下所示),您可以获得该类型的​​所有标准测试,并且可以覆盖测试套件用于配置测试的属性。

为了以与本指南相同的方式运行测试,我们建议在两个测试子目录下的测试文件中继承这些类:

  • tests/unit_tests 用于单元测试
  • tests/integration_tests 用于集成测试

实现标准测试

在以下选项卡中,我们展示了如何为每种组件类型实现标准测试:

要为聊天模型配置标准测试,我们继承 ChatModelUnitTestsChatModelIntegrationTests。在每个子类上,我们覆盖以下 @property 方法来指定要测试的聊天模型及其配置:

PropertyDescription
chat_model_class要测试的聊天模型类
chat_model_params要传递给聊天模型构造函数的参数

此外,聊天模型标准测试会测试一系列行为,从最基本的要求(生成查询响应)到多模态支持和工具调用等可选功能。为了使测试运行成功:

  1. 如果模型旨在支持某项功能,则应通过测试;
  2. 如果模型不支持某项功能,则应跳过测试。

“可选”功能的测试通过可以覆盖测试模型子类上的一组属性来控制。

您可以在 API 参考中找到所有可配置功能的列表单元测试集成测试

例如,要为图像输入启用集成测试,我们可以在集成测试类中实现:

@property
def supports_image_inputs(self) -> bool:
return True
note

有关运行哪些测试、如何跳过每个测试以及每个测试的故障排除技巧的详细信息,请参阅 API 参考。请参阅详细信息:

单元测试示例:

tests/unit_tests/test_chat_models.py
"""Test chat model integration."""

from typing import Type

from langchain_parrot_link.chat_models import ChatParrotLink
from langchain_tests.unit_tests import ChatModelUnitTests


class TestChatParrotLinkUnit(ChatModelUnitTests):
@property
def chat_model_class(self) -> Type[ChatParrotLink]:
return ChatParrotLink

@property
def chat_model_params(self) -> dict:
# These should be parameters used to initialize your integration for testing
return {
"model": "bird-brain-001",
"temperature": 0,
"parrot_buffer_length": 50,
}

集成测试示例:

tests/integration_tests/test_chat_models.py
"""Test ChatParrotLink chat model."""

from typing import Type

from langchain_parrot_link.chat_models import ChatParrotLink
from langchain_tests.integration_tests import ChatModelIntegrationTests


class TestChatParrotLinkIntegration(ChatModelIntegrationTests):
@property
def chat_model_class(self) -> Type[ChatParrotLink]:
return ChatParrotLink

@property
def chat_model_params(self) -> dict:
# These should be parameters used to initialize your integration for testing
return {
"model": "bird-brain-001",
"temperature": 0,
"parrot_buffer_length": 50,
}

运行测试

您可以使用项目根目录下的以下命令运行这些测试:

# 在没有网络访问的情况下运行单元测试
poetry run pytest --disable-socket --allow-unix-socket --asyncio-mode=auto tests/unit_tests

# 运行集成测试
poetry run pytest --asyncio-mode=auto tests/integration_tests

测试套件信息和故障排除

有关可用的标准测试套件的完整列表,以及有关包含哪些测试和如何排除常见问题的信息,请参阅标准测试 API 参考

您可以在 API 参考中列出的各个测试套件下找到故障排除指南。例如,这是 ChatModelIntegrationTests.test_usage_metadata 的故障排除指南。